开发人员和 SRE 选择在 Google Cloud Platform (GCP) 上托管他们的应用程序,因为其可靠性、速度和易用性。在 Google Cloud 上,开发团队发现迁移到 GKE 上的 Kubernetes、利用 Cloud Run 等最新的无服务器选项,以及通过托管服务改进传统的分层应用程序具有额外的价值。
Elastic 可观测性为 Google Cloud 服务提供 16 个开箱即用的集成,而且还在不断增加。Google Cloud 集成的完整列表可以在我们的在线文档中找到。
除了我们原生的 Google Cloud 集成之外,Elastic 可观测性不仅聚合日志,还聚合 Google Cloud 服务以及在 Google Cloud 计算服务(Compute Engine、Cloud Run、Cloud Functions、Kubernetes Engine)上运行的应用程序的指标。所有这些数据都可以使用 Elastic® 的高级机器学习 (ML) 功能以可视方式和更直观的方式进行分析,这有助于检测性能问题并在最终用户受到影响之前找出根本原因。
有关 Elastic 可观测性如何提供应用程序性能监控 (APM) 功能(如服务地图、跟踪、依赖关系和基于 ML 的指标关联)的更多详细信息,请阅读:Elastic 可观测性中的 APM 关联:自动识别缓慢或失败事务的可能原因。
没错,Elastic 为 Google Cloud 服务以及 Google Cloud 计算服务上的应用程序提供指标摄取、聚合和分析。Elastic 不仅仅是日志 - 它为 Google Cloud 环境提供统一的可观测性解决方案。
在本博客中,我将回顾 Elastic 可观测性如何监控在 Google Cloud 服务上运行的三层 Web 应用程序的指标,其中包括
- Google Cloud Run
- 用于 PostgreSQL 的 Google Cloud SQL
- 用于 Redis 的 Google Cloud Memorystore
- Google Cloud VPC 网络
您将看到,一旦安装了集成,指标将立即到达,您可以立即开始查看指标。
先决条件和配置
以下是我们用于设置此演示的一些组件和详细信息
- 确保您在 Elastic Cloud 上拥有一个帐户和一个已部署的堆栈(请参阅此处的说明)。
- 确保您拥有一个 Google Cloud 项目和一个服务帐户,该帐户具有从 Google Cloud 中提取必要数据的权限(请参阅我们文档中的详细信息)。
- 我们使用了 Google Cloud 的三层应用程序并使用 Google Cloud 控制台部署了它。
- 我们将逐步介绍如何安装通用的 Elastic Google Cloud Platform 集成,该集成涵盖我们要收集指标的服务。
- 我们不会介绍应用程序监控;相反,我们将重点介绍如何轻松监控 Google Cloud 服务。
- 为了查看指标,您需要加载应用程序。我们还创建了一个 Playwright 脚本来驱动应用程序的流量。
三层应用程序概述
在深入了解 Elastic 配置之前,让我们回顾一下我们正在监控的内容。如果您按照快速入门解决方案:三层 Web 应用程序的说明进行操作部署任务跟踪应用程序,您将部署以下内容。
已部署的内容
- 在用户浏览器中呈现 HTML 客户端并允许将用户请求发送到任务跟踪应用程序的 Cloud Run 前端层
- 与前端和数据库层通信的 Cloud Run 中间层 API 层
- 数据库层中的 Memorystore for Redis 实例,缓存并提供频繁读取的数据
- 数据库层中的 Cloud SQL for PostgreSQL 实例,处理无法从内存 Redis 缓存提供服务的请求
在本博客的末尾,我们还将提供一个 Playwright 脚本,该脚本可以运行以向此应用程序发送请求,以便使用示例数据加载它并测试其功能。这将有助于驱动指标“点亮”仪表板。
全部设置
让我们逐步了解如何获取应用程序、Elastic 上的 Google Cloud 集成以及摄取的内容的详细信息。
步骤 0:在 Elastic Cloud 上获取一个帐户
步骤 1:部署 Google Cloud 三层应用程序
按照快速入门解决方案:三层 Web 应用程序中列出的说明,选择 通过控制台部署 选项进行部署。
步骤 2:创建 Google Cloud 服务帐户并下载凭据文件
安装应用程序后,下一步是创建一个具有角色和服务帐户密钥的服务帐户,Elastic 的集成将使用该帐户访问 Google Cloud 项目中的数据。
转到 Google Cloud IAM 角色,创建一个具有必要权限的角色。单击 创建角色 按钮。
为角色指定一个标题和一个 ID。然后添加此处列出的 10 个分配的权限。
- cloudsql.instances.list
- compute.instances.list
- monitoring.metricDescriptors.list
- monitoring.timeSeries.list
- pubsub.subscriptions.consume
- pubsub.subscriptions.create
- pubsub.subscriptions.get
- pubsub.topics.attachSubscription
- redis.instances.list
- run.services.list
这些权限是本博客文章所需的最小权限集。您应该为您想要收集指标的所有服务添加权限。如果您将来需要添加或删除权限,可以根据需要多次更新角色的权限。
单击 创建 按钮。
转到 Google Cloud IAM 服务帐户以创建一个服务帐户,Elastic 集成将使用该帐户访问 Google Cloud。单击 创建服务帐户 按钮。
输入 服务帐户名称 和 服务帐户 ID。单击 创建并继续 按钮。
然后选择您之前创建的 角色,然后单击 继续 按钮。
单击 完成 按钮以完成服务帐户创建过程。
接下来,选择您刚刚创建的服务帐户以查看其详细信息页面。在 密钥 选项卡下,单击 添加密钥 下拉列表,然后选择 创建新密钥。
在“创建私钥”对话框窗口中,将 密钥类型 设置为 JSON,单击 创建 按钮。
JSON 凭据文件密钥将自动下载到您本地计算机的 下载 文件夹。凭据文件将命名为类似如下内容
your-project-id-12a1234b1234.json
您可以将文件重命名为其他名称。对于本博客而言,我们将它重命名为
credentials.json
步骤 3:创建 Google Cloud VM 实例
要在 Google Cloud 中创建 Compute Engine VM 实例,请转到 Compute Engine。然后选择 创建实例。
输入 VM 实例详细信息的以下值
- 为虚拟机实例输入您选择的名称。
- 展开高级选项部分和网络子部分。
- 输入 allow-ssh 作为网络标签。
- 选择网络接口以使用 tiered-web-app-private-network,这是部署 Google Cloud 三层 Web 应用程序的网络。
单击创建按钮以创建虚拟机实例。
步骤 4:SSH 进入 Google Cloud 虚拟机实例并上传凭证文件
为了 SSH 进入您在上一步中创建的 Google Cloud 虚拟机实例,您需要在 tiered-web-app-private-network 中创建一个防火墙规则,这是虚拟机实例所在的网络。
转到 Google Cloud 防火墙策略页面。单击创建防火墙规则按钮。
为防火墙规则输入以下值。
- 输入防火墙规则的名称。
- 为网络选择 tiered-web-app-private-network。
- 为目标标签输入 allow-ssh。
- 为源 IPv4 范围输入 0.0.0.0/0。单击 TCP 并将端口设置为 22。
单击创建以创建防火墙规则。
创建新的防火墙规则后,您现在可以 SSH 进入您的虚拟机实例。转到 Google Cloud 虚拟机实例,然后选择您在上一步中创建的虚拟机实例以查看其详细信息页面。单击 SSH 按钮。
在您 SSH 进入虚拟机实例终端窗口后,单击上传文件按钮。
选择位于您本地计算机上的 credentials.json 文件,然后单击上传文件按钮以上传该文件。
在虚拟机实例的 SSH 终端中,运行以下命令以获取 Google Cloud 服务帐户凭证文件的完整路径。
realpath credentials.json
这应该返回 Google Cloud 服务帐户凭证文件的完整路径。
复制凭证文件的完整路径并将其保存在方便的位置,以便在稍后的步骤中使用。
步骤 5:添加 Elastic Google Cloud 集成
通过从顶层菜单中选择集成,导航到 Elastic 中的 Google Cloud Platform 集成。搜索 google 并单击 Google Cloud Platform 图块。
单击添加 Google Cloud Platform。
单击仅添加集成(跳过代理安装)。
将项目 ID 输入文本框更新为您的 Google Cloud 项目 ID。接下来,将凭证文件的完整路径粘贴到凭证文件输入文本框中。
如您所见,通用的 Elastic Google Cloud Platform 集成将从 16 项 Google Cloud 服务中收集大量数据。如果您不想安装此通用的 Elastic Google Cloud Platform 集成,您可以选择安装单独的集成。单击保存并继续。
您将看到一个确认对话窗口。单击将 Elastic Agent 添加到您的主机。
这将显示安装 Elastic Agent 所需的说明。复制Linux Tar 选项卡下的命令。
接下来,您需要使用 SSH 登录到 Google Cloud 虚拟机实例,并运行从 Linux Tar 选项卡复制的命令。转到 Compute Engine。然后单击您在步骤 2 中创建的虚拟机实例的名称。通过单击 SSH 按钮登录到虚拟机。
在您 SSH 进入虚拟机实例终端窗口后,运行先前从在主机上安装 Elastic Agent 说明中的 Linux Tar 选项卡复制的命令。
安装完成后,您将在在主机上安装 Elastic Agent 表单中看到确认消息。单击添加集成按钮。
太棒了!Elastic Agent 正在向 Elastic Cloud 发送数据。现在让我们观察一些指标。
步骤 6:对应用程序运行流量
虽然让应用程序运行相当容易,但除非您在应用程序上添加负载,否则没有使用 Elastic 监控或观察的内容。
这是一个简单的脚本,您也可以使用 Playwright 运行它,以添加流量并练习 Google Cloud 三层应用程序的功能
import { test, expect } from "@playwright/test";
test("homepage for Google Cloud Threetierapp", async ({ page }) => {
await page.goto("https://tiered-web-app-fe-zg62dali3a-uc.a.run.app");
// Insert 2 todo items
await page.fill("id=todo-new", (Math.random() * 100).toString());
await page.keyboard.press("Enter");
await page.waitForTimeout(1000);
await page.fill("id=todo-new", (Math.random() * 100).toString());
await page.keyboard.press("Enter");
await page.waitForTimeout(1000);
// Click one todo item
await page.getByRole("checkbox").nth(0).check();
await page.waitForTimeout(1000);
// Delete one todo item
const deleteButton = page.getByText("delete").nth(0);
await deleteButton.dispatchEvent("click");
await page.waitForTimeout(4000);
});
步骤 7:转到 Elastic 中的 Google Cloud 仪表板
在 Elastic Agent 运行的情况下,您可以转到 Elastic 仪表板以查看正在提取的内容。只需在 Elastic 中搜索“dashboard”,然后选择仪表板。
这将打开 Elastic 仪表板页面。
在仪表板搜索框中,搜索 GCP 并单击 [Metrics GCP] CloudSQL PostgreSQL Overview 仪表板,这是许多可用的开箱即用仪表板之一。让我们看看会出现什么。
在 Cloud SQL 仪表板上,我们可以看到以下一些可用指标的采样
- 磁盘写入操作
- CPU 利用率
- 网络发送和接收的字节数
- 事务计数
- 已使用的磁盘字节数
- 磁盘配额
- 内存使用量
- 磁盘读取操作
接下来,让我们看看 Cloud Run 的指标。
我们使用 Elastic 仪表板页面上的创建仪表板按钮创建了一个自定义仪表板。在这里,我们看到一些可用指标
- 容器实例计数
- 三层应用程序前端和 API 的 CPU 利用率
- 三层应用程序前端和 API 的请求计数
- 进出 API 的字节数
这是一个为 MemoryStore 创建的自定义仪表板,我们可以在其中看到以下可用指标的采样
- 到 Memorystore Redis 实例的网络流量
- 存储在 Memorystore Redis 中的密钥计数
- Memorystore Redis 实例的 CPU 利用率
- Memorystore Redis 实例的内存使用量
恭喜,您现在已开始监控应用程序的关键 Google Cloud 服务的指标!
接下来在 Google Cloud 上监控什么?
从 Google Cloud 服务添加日志
现在正在监控指标,您现在还可以添加日志。有几个选项用于提取日志。
Elastic Agent 中的 Google Cloud Platform 集成具有四个独立的日志设置:审计日志、防火墙日志、VPC 流日志和 DNS 日志。只需确保打开您希望接收的内容即可。
使用 Elastic 机器学习分析您的数据
一旦指标和日志(或其中一个)进入 Elastic,就开始通过 Elastic 的 ML 功能分析您的数据。这里可以找到对这些功能的精彩回顾
结论:使用 Elastic Observability 监控 Google Cloud 服务指标很容易!
我希望您已经了解 Elastic Observability 如何帮助您监控 Google Cloud 服务指标。以下是课程和您所学知识的快速回顾
- Elastic Observability 支持提取和分析 Google Cloud 服务指标。
- 通过 Elastic Agent 可以轻松设置从 Google Cloud 服务中提取数据。
- Elastic Observability 具有多个开箱即用的 Google Cloud 服务仪表板,您可以使用它们初步查看信息,然后根据您的需求进行修改。
- 对于开箱即用仪表板未涵盖的指标,可以轻松创建自定义仪表板以可视化对您重要的指标。
- Elastic Observability 上的 Google Cloud Platform 集成支持 16 项 Google Cloud 服务,并且会定期添加更多服务。
- 正如相关博客中所述,您可以使用 Elastic 的机器学习功能分析您的 Google Cloud 服务指标。
通过 Google Cloud Marketplace 注册并快速启动在全球任何 Google Cloud 上的 Elastic Cloud 区域的部署,亲自试用。您在 Google Cloud Marketplace 上购买的 Elastic 将包含在您的月度综合账单中,并将在您与 Google Cloud 的承诺支出中扣除。
本文中描述的任何特性或功能的发布和时间安排仍由 Elastic 自行决定。当前不可用的任何特性或功能可能不会按时交付或根本不交付。