Elastic Cloud 可观测性是提供运行中的 Web 应用可见性的首选工具。Google Cloud Run 是运行需要大规模扩展并缩减到零的 Web 应用的首选无服务器平台。Elastic 可观测性与 Google Cloud Run 相结合,为开发人员提供了一个完美的解决方案,可以部署自动扩展且操作完全可观测的 Web 应用,并以易于实施和管理的方式进行。
这篇博文将向您展示如何将简单的 Hello World Web 应用部署到 Cloud Run,然后引导您完成为 Hello World Web 应用添加监控的步骤,以便使用 Elastic Cloud 观察应用程序的操作。
Elastic 可观测性设置
我们将从设置 Elastic Cloud 部署开始,我们将要部署的 Web 应用的可观测性将在该处进行。
从Elastic Cloud 控制台中,选择**创建部署**。
输入部署名称,然后点击**创建部署**。创建部署需要几分钟时间。在等待期间,系统会提示您保存部署的管理员凭据,这些凭据为您提供对 Elastic® 部署的超级用户访问权限。请妥善保管这些凭据,因为它们只会显示一次。
Elastic 可观测性需要一个 APM 服务器 URL 和一个 APM 密钥令牌,以便应用将可观测性数据发送到 Elastic Cloud。部署创建完成后,我们将复制 Elastic 可观测性服务器 URL 和密钥令牌,并将它们安全地存储在某个位置,以便在后续步骤中添加到 Web 应用代码中。
要复制 APM 服务器 URL 和 APM 密钥令牌,请访问Elastic Cloud。然后转到部署页面,该页面列出了您创建的所有部署。选择要使用的部署,这将打开部署详细信息页面。在**Kibana**链接行中,点击**打开**以打开部署的**Kibana**。
从顶层菜单中选择**集成**。然后点击**APM**磁贴。
在 APM 代理页面上,复制secretToken和serverUrl值,并保存以备后续步骤使用。
现在我们已经完成了 Elastic Cloud 设置,下一步是为将应用部署到 Cloud Run 设置 Google Cloud 项目。
Google Cloud Run 设置
首先,我们需要一个 Google Cloud 项目,因此让我们通过访问Google Cloud 控制台并创建一个新项目来创建一个。选择项目菜单,然后点击**新建项目**按钮。
创建新项目后,我们需要启用 Hello World 应用将使用的必要 API。这可以通过点击此启用 API链接来完成,该链接将在 Google Cloud 控制台中打开一个页面,其中列出了将启用的 API,并允许我们确认其激活。
启用必要的 API 后,我们需要为 Hello World 应用设置所需的权限,这可以在 Google Cloud Console 的IAM 部分中完成。在 IAM 部分中,选择**Compute Engine**默认服务帐户,并添加以下角色
- 日志查看器
- 监控查看器
- Pub/Sub 订阅者
将 Hello World Web 应用部署到 Cloud Run
我们将使用名为Cloud Shell 编辑器的便捷 Google Cloud 工具执行将 Node.js Hello World Web 应用部署到 Cloud Run 的过程。要部署 Hello World 应用,我们将执行以下五个步骤
- 在 Cloud Shell 编辑器中,在屏幕底部出现的终端窗口中,通过输入以下命令克隆来自 GitHub 的Node.js Hello World 示例应用存储库。
git clone https://github.com/elastic/observability-examples
- 更改到 Hello World Web 应用代码所在的位置。
cd gcp/run/helloworld
- 构建 Hello World 应用镜像并将镜像推送到 Google Container Registry,方法是在终端中运行以下命令。请务必将以下命令中的your-project-id替换为您实际的 Google Cloud 项目 ID。
gcloud builds submit --tag gcr.io/your-project-id/elastic-helloworld
- 将 Hello World 应用部署到 Google Cloud Run,方法是在终端中运行以下命令。请务必将以下命令中的your-project-id替换为您实际的 Google Cloud 项目 ID。
gcloud run deploy elastic-helloworld --image gcr.io/your-project-id/elastic-helloworld
- 部署过程完成后,将在终端中显示服务 URL。将服务 URL 复制并粘贴到浏览器中,以查看在 Cloud Run 中运行的 Hello World 应用。
使用 Elastic 可观测性监控 Hello World Web 应用
在 Web 应用成功运行于 Cloud Run 后,我们现在可以添加开始监控应用所需的最小代码。要为 Elastic Cloud 中的 Hello World 应用启用可观测性,我们将执行以下六个步骤
- 在 Google Cloud Shell 编辑器中,编辑 Dockerfile 文件以添加以下 Elastic Open Telemetry 环境变量以及安装和运行 Elastic APM 代理的命令。将ELASTIC_APM_SERVER_URL文本和ELASTIC_APM_SECRET_TOKEN文本替换为您在前面步骤中复制和保存的APM服务器URL和APM密钥令牌值。
ENV OTEL_EXPORTER_OTLP_ENDPOINT='ELASTIC_APM_SERVER_URL'
ENV OTEL_EXPORTER_OTLP_HEADERS='Authorization=Bearer ELASTIC_APM_SECRET_TOKEN'
ENV OTEL_LOG_LEVEL=info
ENV OTEL_METRICS_EXPORTER=otlp
ENV OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production
ENV OTEL_SERVICE_NAME=helloworld
ENV OTEL_TRACES_EXPORTER=otlp
RUN npm install --save @opentelemetry/api
RUN npm install --save @opentelemetry/auto-instrumentations-node
CMD ["node", "--require", "@opentelemetry/auto-instrumentations-node/register", "index.js"]
更新后的 Dockerfile 应如下所示
FROM node:18-slim
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . ./
OTEL_EXPORTER_OTLP_ENDPOINT='https://******.apm.us-central1.gcp.cloud.es.io:443'
ENV OTEL_EXPORTER_OTLP_HEADERS='Authorization=Bearer ******************'
ENV OTEL_LOG_LEVEL=info
ENV OTEL_METRICS_EXPORTER=otlp
ENV OTEL_RESOURCE_ATTRIBUTES=service.version=1.0,deployment.environment=production
ENV OTEL_SERVICE_NAME=helloworld
ENV OTEL_TRACES_EXPORTER=otlp
RUN npm install --save @opentelemetry/api
RUN npm install --save @opentelemetry/auto-instrumentations-node
CMD ["node", "--require", "@opentelemetry/auto-instrumentations-node/register", "index.js"]
- 在 Google Cloud Shell 编辑器中,编辑 package.json 文件以添加 Elastic APM 依赖项。package.json 中的 dependencies 部分应如下所示
"dependencies": {
"express": "^4.18.2",
"elastic-apm-node": "^3.49.1"
},
- 在 Google Cloud Shell 编辑器中,编辑 index.js 文件
- 添加初始化 Elastic Open Telemetry APM 代理所需的代码
const otel = require("@opentelemetry/api");
const tracer = otel.trace.getTracer("hello-world");
- 替换“Hello World!”输出代码...
res.send(`<h1>Hello World!</h1>`);
...使用“Hello Elastic Observability”代码块。
res.send(
`<div style="text-align: center;">
<h1 style="color: #005A9E; font-family:'Verdana'">
Hello Elastic Observability - Google Cloud Run - Node.js
</h1>
<img src="https://storage.googleapis.com/elastic-helloworld/elastic-logo.png">
</div>`
);
- 在“Hello Elastic Observability”代码块之前添加跟踪“hi”,并在“Hello Elastic Observability”代码块之后添加跟踪“bye”。
tracer.startActiveSpan("hi", (span) => {
console.log("hello");
span.end();
});
res.send(
`<div style="text-align: center;">
<h1 style="color: #005A9E; font-family:'Verdana'">
Hello Elastic Observability - Google Cloud Run - Node.js
</h1>
<img src="https://storage.googleapis.com/elastic-helloworld/elastic-logo.png">
</div>`
);
tracer.startActiveSpan("bye", (span) => {
console.log("goodbye");
span.end();
});
- 完成的 index.js 文件应如下所示
const otel = require("@opentelemetry/api");
const tracer = otel.trace.getTracer("hello-world");
const express = require("express");
const app = express();
app.get("/", (req, res) => {
tracer.startActiveSpan("hi", (span) => {
console.log("hello");
span.end();
});
res.send(
`<div style="text-align: center;">
<h1 style="color: #005A9E; font-family:'Verdana'">
Hello Elastic Observability - Google Cloud Run - Node.js
</h1>
<img src="https://storage.googleapis.com/elastic-helloworld/elastic-logo.png">
</div>`
);
tracer.startActiveSpan("bye", (span) => {
console.log("goodbye");
span.end();
});
});
const port = parseInt(process.env.PORT) || 8080;
app.listen(port, () => {
console.log(`helloworld: listening on port ${port}`);
});
- 重新构建 Hello World 应用镜像并将镜像推送到 Google Container Registry,方法是在终端中运行以下命令。请务必将以下命令中的your-project-id替换为您实际的 Google Cloud 项目 ID。
gcloud builds submit --tag gcr.io/your-project-id/elastic-helloworld
- 重新部署 Hello World 应用到 Google Cloud Run,方法是在终端中运行以下命令。请务必将以下命令中的your-project-id替换为您实际的 Google Cloud 项目 ID。
gcloud run deploy elastic-helloworld --image gcr.io/your-project-id/elastic-helloworld
- 部署过程完成后,终端中将显示一个服务 URL。复制并粘贴服务 URL 到浏览器中,以查看在 Cloud Run 中运行的更新后的 Hello World 应用。
观察 Hello World Web 应用
现在我们已经为 Web 应用配置了将可观测性数据发送到 Elastic Observability,我们可以使用 Elastic Cloud 来监控 Web 应用的操作。
-
在 Elastic Cloud 中,选择可观测性**服务**菜单项。
-
点击**helloworld**服务。
-
点击**事务**选项卡。
-
向下滚动并点击**GET /**事务。
-
向下滚动到**跟踪样本**部分,查看**GET /**、**hi**和**bye**跟踪样本。
可扩展的可观测性
您已经看到了将 Web 应用部署到 Google Cloud Run 的整个过程,该 Web 应用已配置了 Elastic Observability。最终结果是一个 Web 应用,它可以根据需求进行扩展和缩减,并结合可观测性工具来监控 Web 应用,无论它服务于单个用户还是数百万用户。
现在您已经了解了如何部署一个配置了可观测性的无服务器 Web 应用,请访问Elastic Observability,以了解更多关于如何为您的应用实施完整可观测性解决方案的信息。或者访问在 Google Cloud 上入门使用 Elastic,以获取更多关于如何通过结合Google Cloud 监控和云计算服务与 Elastic 的搜索驱动平台来获得所需数据洞察力的示例。
本文中描述的任何功能或功能的发布和时间安排完全由 Elastic 自行决定。任何当前不可用的功能或功能可能无法按时或根本无法交付。