使用 OpenTelemetry 跟踪 MongoDB 调用
本教程最初发布在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
[
](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 数据库,可以将数据库连接数、实例正常运行时间、请求总数和其他指标等设置为显示在单个视图中。
[
](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选项卡中的通话时间。
[
](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 仪表板上的一些跟踪可视化示例。
[
](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操作。您可以查看每个操作花费了多少时间以及其他详细信息
[
](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 仪表板上出现错误的数据库调用
[
](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 👇

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

延伸阅读
使用 OpenTelemetry 和 SigNoz 监控您的 Nodejs 应用程序
SigNoz - DataDog的开源替代品
更多推荐
所有评论(0)