Elastic Cloud Observability 是提供运行中的 Web 应用程序可见性的首选工具。Google Cloud Run 是首选的无服务器平台,用于运行需要大规模扩展和缩减至零的 Web 应用程序。Elastic Observability 与 Google Cloud Run 相结合,是开发人员部署具有完全可观察操作的自动扩展的 Web 应用程序的完美解决方案,其实现和管理方式都非常简单。
这篇博文将向您展示如何将简单的 Hello World Web 应用程序部署到 Cloud Run,然后引导您完成配置 Hello World Web 应用程序的步骤,以便通过 Elastic Cloud 观察应用程序的操作。
Elastic Observability 设置
我们将首先设置 Elastic Cloud 部署,这将是我们部署的 Web 应用程序的可观察性发生的地方。
从 Elastic Cloud 控制台,选择 创建部署。
输入部署名称,然后单击 创建部署。创建部署需要几分钟时间。在等待期间,系统会提示您保存部署的管理员凭据,这将使您获得对 Elastic® 部署的超级用户访问权限。请妥善保管这些凭据,因为它们只显示一次。
Elastic Observability 需要 APM 服务器 URL 和 APM 密钥令牌,以便应用程序将可观察性数据发送到 Elastic Cloud。创建部署后,我们将复制 Elastic Observability 服务器 URL 和密钥令牌,并将其安全地存储在某个地方,以便在稍后的步骤中添加到我们的 Web 应用程序代码中。
要复制 APM 服务器 URL 和 APM 密钥令牌,请转到 Elastic Cloud。然后转到部署页面,该页面列出了您已创建的所有部署。选择您想要使用的部署,这将打开部署详细信息页面。在 Kibana 链接行中,单击 打开 以打开您部署的 Kibana。
从顶层菜单中选择 集成。然后单击 APM 磁贴。
在 APM 代理页面上,复制 secretToken 和 serverUrl 值,并保存它们以供稍后步骤中使用。
现在我们已完成 Elastic Cloud 设置,下一步是设置我们的 Google Cloud 项目,以便将应用程序部署到 Cloud Run。
Google Cloud Run 设置
首先,我们需要一个 Google Cloud 项目,因此让我们通过转到 Google Cloud 控制台并创建一个新项目来创建一个。选择项目菜单,然后单击 新建项目 按钮。
创建新项目后,我们需要启用我们的 Hello World 应用程序将要使用的必要 API。这可以通过单击此 启用 API 链接来完成,该链接会在 Google Cloud 控制台中打开一个页面,其中列出了将要启用的 API,并允许我们确认它们的激活。
在启用必要的 API 后,我们需要为我们的 Hello World 应用程序设置所需的权限,这可以在 Google Cloud 控制台的 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 示例应用程序 repo。
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 Observability 配置 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 的整个过程,该应用程序配置了 Elastic Observability。最终结果是一个可以根据需求进行扩展的 Web 应用程序,并结合可观察性工具来监控 Web 应用程序,无论它是服务于单个用户还是数百万用户。
现在您已经了解了如何部署配置了可观察性的无服务器 Web 应用程序,请访问 Elastic Observability 以了解更多关于如何为您的应用程序实施完整可观察性解决方案的信息。或者访问 开始使用 Elastic on Google Cloud,了解更多关于如何通过将 Google Cloud 监控 和云计算服务与 Elastic 的搜索驱动平台相结合,来驱动您所需的数据见解的示例。
本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。任何当前不可用的特性或功能可能不会按时或根本不交付。