本教程最初发布在SigNoz Blog上,由Pranshu Chittora编写。

OpenTelemetry 库可用于跟踪 MongoDB 交互。在本教程中,我们将学习如何使用 OpenTelemetry 库跟踪 MongoDB 以分析查询执行并识别性能瓶颈。

由于云和容器化,大多数现代应用程序都具有分布式架构。在云原生应用程序中,有必要跨服务和组件(如数据库)跟踪用户请求。分布式跟踪是一种能够跨应用程序的不同组件跟踪用户请求的技术。

但是如何为您的应用程序启用分布式跟踪?

这就是 OpenTelemetry 发挥作用的地方。它是云原生计算基金会 (CNCF) 下的一个开源项目,旨在标准化遥测数据(日志、指标和跟踪)的生成和收集。

OpenTelemetry 拥有所有主要编程语言的客户端库。这些客户端库可以从应用程序代码、不同的 Web 框架和数据库组件(如 MongoDB)收集和发出遥测数据。

但 OpenTelemetry 仅用于检测层。一旦收集到遥测数据,就需要将其发送到后端分析工具进行存储和可视化。这就是SigNoz出现的地方。 SigNoz 是一个全栈开源可观察性工具。您还可以选择其他分析工具,因为 OpenTelemetry 与供应商无关。

在本教程中,让我们学习如何使用 OpenTelemetry 跟踪 MongoDB 调用。我们将在示例 Nodejs 应用程序的帮助下对其进行说明。我们还有一个关于启用主机指标以监控 MongoDB 实例的健康状况的奖励部分。

先决条件

  • 签名号

  • 示例 Nodejs 应用程序您可以在此处找到带有 MongoDB的示例 nodejs express 应用程序的代码。 (查看 MongoDB 分支)

我们将使用一个示例 Nodejs 应用程序来说明如何使用 OpenTelemetry 检测 MongoDB。您还需要安装 SigNoz 以可视化从 OpenTelemetry 收集的数据。

安装 SigNoz

首先,您需要安装 SigNoz,以便 OpenTelemetry 可以将数据发送给它。

只需三个步骤,使用简单的安装脚本即可将 SigNoz 安装在 macOS 或 Linux 机器上。

安装脚本会自动在 Linux 上安装 Docker Engine。但是,在 macOS 上,您必须在运行安装脚本之前手动安装Docker Engine。

git clone -b main https://github.com/SigNoz/signoz.git
cd signoz/deploy/
./install.sh

进入全屏模式 退出全屏模式

您可以访问我们的文档以获取有关如何使用 Docker Swarm 和 Helm Charts 安装 SigNoz 的说明。

部署文档

完成 SigNoz 安装后,您可以通过http://localhost:3301访问 UI

使用 OpenTelemetry 检测 MongoDB 以启用跟踪

我们希望跟踪从我们的 Nodejs 应用程序到 MongoDB 的用户请求,以便可视化用户请求的完整分解。 OpenTelemetry 提供特定于语言的实现来启用 MongoDB 的跟踪。

对于 nodejs 应用程序,您需要在应用程序代码中添加特定的MongoDb 库作为依赖项。

您的 Nodejs 应用程序将有一个tracing.js文件,用于启动跟踪器。导入 MongoDBInstrumentation 并使用相关选项参数创建一个实例并将其附加到检测列表:

+ const { MongoDBInstrumentation } = require('@opentelemetry/instrumentation-mongodb');

...

const sdk = new opentelemetry.NodeSDK({
  traceExporter,
  instrumentations: [getNodeAutoInstrumentations(),
+  new MongoDBInstrumentation({
+    enhancedDatabaseReporting: true,
+  }),
    ],
});

进入全屏模式 退出全屏模式

启用 MongoDB 主机指标

启用 MongoDB 主机指标将提供有关 MongoDB 实例运行状况的详细指标。

第 1 步:添加 mongodb-exporter 服务

为了启用主机指标收集,您需要在示例应用程序的 docker-compose 文件中添加 mongodb-exporter 服务。你可以在这里找到。

services:
  mongo:
    container_name: mongo_db
    image: mongo
    restart: always
    ports:
      - 27017:27017

+  mongodb-exporter:
+    image: percona/mongodb_exporter:0.30
+    command: --mongodb.uri=mongodb://mongo:27017 --compatible-mode
+    ports:
+      - 9216:9216
+    depends_on:
+      - mongo

进入全屏模式 退出全屏模式

第 2 步:添加作业指标抓取作业

将作业指标抓取作业添加到otel-collector-metrics-config.yaml文件。您可以在此处找到文件。

receivers:
  otlp:
    protocols:
      grpc:
      http:

  # Data sources: metrics
  prometheus:
    config:
      scrape_configs:
        - job_name: "otel-collector"
          scrape_interval: 30s
          static_configs:
            - targets: ["otel-collector:8889"]
+        - job_name: "mongo-collector"
+          scrape_interval: 30s
+          static_configs:
+            - targets: ["host.docker.internal:9216"]

进入全屏模式 退出全屏模式

注意: 确保 mongodb-exporter 服务的端口号和 otel config 中的 mongodb-collection 是同步的。

第 3 步:使用 PromQL 创建自定义仪表板

在上述步骤之后,您的 MongoDB 实例将发出主机指标,这些指标可以使用 SigNoz 中的自定义仪表板进行可视化。您可以在 SigNoz 仪表板上使用 PromQL 创建不同的图表。

以下是一些 PromQL 查询示例:

  • 用于数据库连接

mongodb_connections

  • 用于跟踪实例正常运行时间

mongodb_instance_uptime_seconds

  • 用于跟踪请求总数

mongodb_network_metrics_num_requests_total

[您可以编写 PromQL 查询来创建自定义仪表板](https://res.cloudinary.com/practicaldev/image/fetch/s--ekqj5R8o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https ://signoz.io/img/blog/2022/05/otel_mongodb_promql.webp)

编写 PromQL 查询以使用 SigNoz 仪表板为 MongoDB 实例创建自定义图表

使用 SigNoz 监控 MongoDB 数据库

SigNoz 提供自定义仪表板,您可以使用这些仪表板设置图表,其中包含对您的用例最关键的指标。对于 MongoDB 数据库,可以将数据库连接数、实例正常运行时间、请求总数和其他指标等设置为显示在单个视图中。

[显示请求总数等指标的 MongoDB 自定义仪表板](https://res.cloudinary.com/practicaldev/image/fetch/s--7zttyP-t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto% 2Cw_880/https://signoz.io/img/blog/2022/05/mongodb_custom_dashboards.webp)

使用 SigNoz 上的自定义仪表板监控您的 MongoDB 实例

您可以监控有关来自特定服务的数据库调用的重要指标,例如每秒请求数和平均数。Database Calls选项卡中的通话时间。

[SigNoz 仪表板上的数据库调用选项卡显示有关来自特定服务的数据库调用的重要指标](https://res.cloudinary.com/practicaldev/image/fetch/s--77X9GrJS--/c_limit%2Cf_auto% 2Cfl_progressive%2Cq_auto%2Cw_880/https://signoz.io/img/blog/2022/05/otel_mongodb_database_calls.webp)

监控来自特定服务的数据库调用的重要指标

OpenTelemetry 启用的最强大的功能之一是分布式跟踪。通过 SigNoz 仪表板上的跟踪可视化,您可以快速识别性能瓶颈。

以下是 SigNoz 仪表板上的一些跟踪可视化示例。

[在 SigNoz 仪表板上使用 Flamegraphs 跟踪 MongoDB 调用的可视化](https://res.cloudinary.com/practicaldev/image/fetch/s--he8I8cws--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/ https://signoz.io/img/blog/2022/05/otel_mongodb_trace_details.webp)

跟踪可视化 MongoDB 中的insert操作。您可以查看每个操作花费了多少时间以及其他详细信息

[在 SigNoz 仪表板上使用 Flamegraphs 跟踪 MongoDB 调用的可视化](https://res.cloudinary.com/practicaldev/image/fetch/s--V2Ml8Txj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/ https://signoz.io/img/blog/2022/05/otel_mongodb_database_error.webp)

跟踪可视化导致 SigNoz 仪表板上出现错误的数据库调用

[在 SigNoz 仪表板上使用 Flamegraphs 跟踪 MongoDB 调用的可视化](https://res.cloudinary.com/practicaldev/image/fetch/s--zs6woPx2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/ https://signoz.io/img/blog/2022/05/otel_mongodb_404.webp)

跟踪可视化返回 404 错误代码的 API。

您可以在此处](https://github.com/signoz/sample-nodejs-app/tree/mongodb)找到使用 mongodb 超过[的端到端检测示例 nodejs express 应用程序。

更多关于 OpenTelemetry MongoDB

OpenTelemetry 以多种编程语言提供特定于语言的实现来跟踪 MongoDB 交互。在上面的示例中,我们在带有 MongoDB 的示例 Nodejs 应用程序中使用了 OpenTelemetry。但它也可以被其他编程语言起诉,例如:

  • Java用于 Java 应用程序的 OpenTelemetry MongoDB 库

  • Python用于 Python 应用程序的 OpenTelemetry MongoDB 库

OpenTelemetry 是为云原生应用程序设置可观察性的未来。它有一个庞大的社区支持,涵盖了各种技术和框架。使用 OpenTelemetry,工程团队可以高枕无忧地检测多语言和分布式应用程序。

使用 OpenTelemetry 收集遥测数据后,您可以使用 SigNoz 等后端分析工具。它是为支持 OpenTelemetry 而原生构建的,也是开源的。您可以通过访问其 GitHub 存储库来试用 SigNoz 👇

SigNoz GitHub repo

如果您在设置方面有任何问题或需要任何帮助,请加入我们的 slack 社区并在#support频道联系我们。

SigNoz Slack 社区


延伸阅读

使用 OpenTelemetry 和 SigNoz 监控您的 Nodejs 应用程序

SigNoz - DataDog的开源替代品

Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐