资讯动态

Apache SkyWalking MongoDB 监控接入指南:基于 mongodb-exporter 与 OpenTelemetry Collector 的指标采集实践

发布时间:2026/9/20 9:56:02 来源:尧图企业网站定制
Apache SkyWalking MongoDB 监控接入指南基于 mongodb-exporter 与 OpenTelemetry Collector 的指标采集实践【免费下载链接】skywalkingAPM, Application Performance Monitoring System项目地址: https://gitcode.com/gh_mirrors/sky/skywalkingApache SkyWalking 通过mongodb-exporterPercona 社区版采集 MongoDB 集群的多维指标再经 OpenTelemetry Collector 以 OTLP 协议推送到 OAP Server 的 OpenTelemetry Receiver最终由 MALMeter Analysis Language完成过滤、计算与聚合形成Layer: MONGODB的 Service/Instance 监控体系。本文基于当前仓库源码完整讲解数据链路、部署步骤、集群与节点两套指标清单以及如何定制自己的指标与仪表盘。整体数据链路MongoDB 监控的完整数据流由三段组成对应仓库中 e2e 测试用例 docker-compose.yml 所搭建的环境mongodb-exporter与 MongoDB 节点同机部署side-by-side从 MongoDB 的serverStatus、dbStats、replSetGetStatus等命令中抓取指标并以 Prometheus 格式暴露在:9216/metricsOpenTelemetry Collector 通过内置的 Prometheus Receiver 拉取上述指标再经 gRPC 导出器otlpexporter推送到 SkyWalking OAP Server 的 OpenTelemetry Receiver:11800OAP Server 使用 MAL 解析接收到的指标按 Meter System 的规则进行过滤、计算、聚合后落库供 UI 与查询接口使用。在 OAP 的模型抽象中每个 MongoDB 集群表现为一个Layer: MONGODB的Service服务名形如mongodb::replset集群内的每个节点则表现为该 Service 下的Instance。这一建模方式可以从 MAL 规则的expSuffix中直接看到集群级规则mongodb-cluster.yaml通过.service([cluster], Layer.MONGODB)将带cluster标签的指标归并到对应 Service并统一加上mongodb::前缀节点级规则mongodb-node.yaml额外通过.instance([cluster], [service_instance_id], Layer.MONGODB)将service_instance_id标签映射为 Instance。环境部署步骤1. 部署 mongodb-exporter使用 Percona 的 mongodb-exporter建议为每个 MongoDB 节点各部署一个 exporter 实例。仓库 e2e 用例采用percona/mongodb_exporter:0.39镜像并开启了以下采集能力见 docker-compose.ymlmongodb-exporter-1: image: percona/mongodb_exporter:0.39 expose: - 9216 command: - --mongodb.urimongodb://mongodb-1:27017 - --discovering-mode - --compatible-mode - --collector.dbstats - --collector.diagnosticdata - --collector.replicasetstatus关键启动参数说明参数作用--mongodb.uri指定要采集的 MongoDB 连接串按节点分别配置--discovering-mode启用发现模式可自动发现副本集/分片集群中的成员--compatible-mode输出兼容的指标格式这是 OAP MAL 规则依赖的指标命名基础--collector.dbstats开启dbStats采集支撑 Data Size、Collection Count、Object Count 等集群指标--collector.diagnosticdata开启诊断数据采集对应serverStatus系列指标--collector.replicasetstatus开启副本集状态采集支撑 Replication Lag、ReplSet State 等指标2. 配置 OpenTelemetry CollectorCollector 的作用是桥接用 Prometheus Receiver 从 exporter 拉取指标再用 OTLP gRPC 导出器发送给 OAP。仓库提供了可直接参考的完整配置 otel-collector-config.yamlreceivers: prometheus: config: scrape_configs: - job_name: mongodb-monitoring # 该 job_name 是 OAP MAL 规则 filter 的匹配依据 metrics_path: /metrics scrape_interval: 10s static_configs: - targets: [mongodb-exporter-1:9216,mongodb-exporter-2:9216] labels: cluster: replset # 集群标签决定 OAP 中的 Service 名 processors: batch: exporters: otlp: endpoint: oap:11800 tls: insecure: true service: pipelines: metrics: receivers: [prometheus] processors: [batch] exporters: [otlp]这里有两个必须与 OAP 规则对齐的关键点job_name必须为mongodb-monitoringOAP 的 MAL 规则文件通过filter: { tags - tags.job_name mongodb-monitoring }精确匹配该 job只有带此标签的指标才会进入 MongoDB 规则处理cluster标签决定 Service 归属expSuffix中mongodb:: tags.cluster会拼出最终服务名如mongodb::replset采集拓扑副本集、分片集群不同时建议为不同集群设置不同标签值。配置中还用注释给出了一个进阶用法默认情况下 OAP 会以 exporter 的 target 地址作为service_instance_id如果想自定义实例名例如映射到真实节点地址mongodb-1:27017可以在static_configs中为每个 target 单独追加service_instance_id标签规则文件会将该标签映射为 Instance 维度。3. 配置 SkyWalking OAP 的 OpenTelemetry Receiver在 OAP 的 application.yml 中receiver-otel模块负责接收并解析 OTLP 指标receiver-otel: selector: ${SW_OTEL_RECEIVER:default} default: enabledHandlers: ${SW_OTEL_RECEIVER_ENABLED_HANDLERS:otlp-metrics,otlp-logs} enabledOtelMetricsRules: ${SW_OTEL_RECEIVER_ENABLED_OTEL_METRICS_RULES:apisix,nginx/*,k8s/*,istio-controlplane,vm,mysql/*,postgresql/*,oap,aws-eks/*,windows,aws-s3/*,aws-dynamodb/*,aws-gateway/*,redis/*,elasticsearch/*,rabbitmq/*,mongodb/*,kafka/*,pulsar/*,bookkeeper/*,rocketmq/*,clickhouse/*,activemq/*}enabledHandlers需包含otlp-metrics否则指标不会进入 Meter 处理链路enabledOtelMetricsRules中需包含mongodb/*默认值已包含表示启用otel-rules/mongodb/目录下的全部 MAL 规则如只需其中某类可精确写成mongodb/cluster或mongodb/node。更多参数细节可参考 OpenTelemetry Receiver 配置文档。4. 可选用 e2e 用例快速验证环境仓库在 test/e2e-v2/cases/mongodb 下提供了完整的端到端验证环境docker-compose.yml拉起双节点副本集mongo:6.0.8、两个 exporter 与 Collectorsetup.sh 用mongosh执行rs.initiate初始化副本集rs1。e2e 用例 mongodb-cases.yaml 通过swctl直接对 GraphQL 接口发起查询来断言每个指标是否产出例如swctl --display yaml --base-urlhttp://${oap_host}:${oap_12800}/graphql metrics exec \ --expressionmeter_mongodb_cluster_uptime --service-namemongodb::replset这套用例同时印证了每个指标的实际产出形态含哪些标签维度可作为自建环境后的验收参考。MongoDB 集群级监控指标集群维度聚焦整个副本集/分片集群的整体健康度MAL 规则定义在 mongodb-cluster.yaml指标统一以meter_mongodb_cluster为前缀监控面板单位指标名说明数据源Uptime (day)daymeter_mongodb_cluster_uptime集群内节点的最大运行时长mongodb-exporterData Size (GB)GBmeter_mongodb_cluster_data_size集群数据总量mongodb-exporterCollection Countmeter_mongodb_cluster_collection_count集群集合总数mongodb-exporterObject Countmeter_mongodb_cluster_object_count集群对象总数mongodb-exporterDocument Total QPSmeter_mongodb_cluster_document_avg_qps各节点文档操作速率之和mongodb-exporterOperation Total QPSmeter_mongodb_cluster_operation_avg_qps各节点操作速率之和mongodb-exporterTotal Connectionsmeter_mongodb_cluster_connections集群各节点连接数总和mongodb-exporterCursor Totalmeter_mongodb_cluster_cursor_avg各节点已打开游标总数mongodb-exporterReplication Lag (ms)msmeter_mongodb_cluster_repl_lag副本集成员平均复制延迟仅副本集模式mongodb-exporterDB Total Data Size (GB)GBmeter_mongodb_cluster_db_data_size每个数据库的数据量总和mongodb-exporterDB Total Index Size (GB)GBmeter_mongodb_cluster_db_index_size每个数据库的索引大小总和mongodb-exporterDB Total Collection Countmeter_mongodb_cluster_db_collection_count每个数据库的集合数总和mongodb-exporterDB Total Index Countmeter_mongodb_cluster_db_index_count每个数据库的索引数总和mongodb-exporter这些规则在实现上做了不少精细化处理值得关注聚合语义差异uptime、connections等采用.max([cluster,service_instance_id])取最大值而data_size、collection_count、object_count采用.sum([cluster, rs_nm])求和QPS 类指标document_avg_qps、operation_avg_qps则先max再.rate(PT1M)计算每分钟速率排除 mongos 与 local 库data_size、collection_count等库维度指标通过.tagNotEqual(cl_role,mongos).tagNotEqual(database,local)过滤掉 mongos 路由节点和local系统库避免重复统计副本集专属处理repl_lag先通过tag将set标签改写到rs_nm再剔除stateARBITER的仲裁节点后求平均仅统计主节点db_data_size、db_index_size等每个数据库维度指标额外加了.tagEqual(rs_state, 1)只聚合主节点的 dbStats防止主从重复计数。MongoDB 节点级监控指标节点维度刻画单个 MongoDB 实例的细粒度状态MAL 规则定义在 mongodb-node.yaml指标统一以meter_mongodb_node为前缀监控面板单位指标名说明数据源Uptime (day)daymeter_mongodb_node_uptime节点运行时长mongodb-exporterQPSmeter_mongodb_node_qps节点每秒操作数mongodb-exporterLatencyµsmeter_mongodb_node_op_rate / meter_mongodb_node_latency_rate操作延迟mongodb-exporterMemory Usage%meter_mongodb_node_memory_usage内存使用率占 RAM 百分比mongodb-exporterVersionmeter_mongodb_node_versionMongoDB 版本与发行版mongodb-exporterReplSet Statemeter_mongodb_node_rs_state副本集状态仅副本集模式mongodb-exporterCPU Usage (%)%meter_mongodb_node_cpu_total_percentage节点 CPU 使用率mongodb-exporterNetwork (KB/s)KB/smeter_mongodb_node_network_bytes_in / meter_mongodb_node_network_bytes_out节点出入网流量mongodb-exporterMemory Free (GB)GBmeter_mongodb_node_memory_free_kb / meter_mongodb_node_swap_memory_free_kb空闲内存与交换分区mongodb-exporterDisk (GB)GBmeter_mongodb_node_fs_used_size / meter_mongodb_node_fs_total_size磁盘已用与总量mongodb-exporterConnectionsmeter_mongodb_node_connections节点连接数mongodb-exporterActive Clientmeter_mongodb_node_active_total_num / meter_mongodb_node_active_reader_num / meter_mongodb_node_active_writer_num活跃读写客户端数mongodb-exporterTransactionsmeter_mongodb_node_transactions_active / meter_mongodb_node_transactions_inactive节点上运行中的事务数mongodb-exporterDocument QPSmeter_mongodb_node_document_qps每秒文档操作数mongodb-exporterOperation QPSmeter_mongodb_node_operation_qps每秒操作数mongodb-exporterRepl Operation QPSmeter_mongodb_node_repl_operation_qps每秒复制操作数mongodb-exporterOperation Latency (µs)µsmeter_mongodb_node_op_rate / meter_mongodb_node_latency_rate不同类型操作的延迟mongodb-exporterCursormeter_mongodb_node_cursor节点已打开的游标mongodb-exporterServer Status Memory (MB)MBmeter_mongodb_node_mem_virtual / meter_mongodb_node_mem_resident虚拟内存与常驻内存mongodb-exporterAssertsmeter_mongodb_node_asserts断言触发速率mongodb-exporterRepl Buffer Countmeter_mongodb_node_repl_buffer_countoplog 缓冲区当前操作数mongodb-exporterRepl Buffer Size (MB)MBmeter_mongodb_node_repl_buffer_size / meter_mongodb_node_repl_buffer_size_maxoplog 缓冲区当前与最大大小mongodb-exporterQueued Operationmeter_mongodb_node_queued_operation因锁等待而排队的操作数mongodb-exportergetLastError Write Nummeter_mongodb_node_write_wait_num / meter_mongodb_node_write_wait_timeout_numwrite concern 操作数量mongodb-exportergetLastError Write Time (ms)msmeter_mongodb_node_write_wait_timewrite concern 操作等待时间mongodb-exporter节点级规则中几个实现细节可以直接对应到面板含义延迟计算op_rate各操作类型次数与latency_rate各操作类型累计延迟均按[cluster,service_instance_id,op_type]维度汇总后做rate(PT1M)UI 面板上用aggregate_labels(meter_mongodb_node_latency_rate,sum(op_type)) / aggregate_labels(meter_mongodb_node_op_rate,sum(op_type))相除得到各操作类型read/write/command 等的平均延迟内存使用率通过(MemTotal_kb - MemAvailable_kb) / MemTotal_kb * 100由系统指标直接推算CPU 使用率将user/iowait/system/irq/softirq/nice/steal七类 CPU 毫秒数求和后/10再rate(PT1M)换算为百分比瞬时速率与增量网络出入流量使用irate()取瞬时速率asserts使用.increase(PT1M)统计每分钟增量。UI 仪表盘与自定义扩展内置仪表盘模板仓库已为 MongoDB 预置了三份 UI 模板位于 ui-initialized-templates/mongodb 目录mongodb-root.jsonMongoDB 服务的根级入口Tab 容器聚合集群与节点两类视图mongodb-cluster.json集群维度面板layer为MONGODB、entity为Service包含 Uptime、Data Size、Collection Count、Object Count 等卡片及 Document/Operation QPS 等趋势图mongodb-node.json节点维度面板entity为ServiceInstance包含 CPU Usage、Network、Memory Free、Disk、Connections、Active Client、Transactions、Cursor、Asserts、Repl Buffer、Queued Operation、getLastError Write 等共 25 个组件。模板中的每个 Widget 都用 MQEMetrics Query Expression直接引用前文指标例如节点面板中latest(meter_mongodb_node_uptime)/3600/24将秒级 uptime 换算为天meter_mongodb_node_network_bytes_in/1024换算为 KB/smeter_mongodb_node_memory_free_kb/1024/1024换算为 GB。自定义指标、规则与面板如果内置指标不满足需求可以按以下路径扩展新增/修改指标定义与表达式编辑集群规则 mongodb-cluster.yaml 或节点规则 mongodb-node.yaml。每个规则项包含name拼接在metricPrefix之后形成最终指标名如meter_mongodb_cluster_uptime和expMAL 表达式。MAL 支持sum/max/avg/rate/irate/increase/tag/tagEqual/tagNotEqual等算子语法细节可参考 MAL 文档新增/修改仪表盘在 ui-initialized-templates/mongodb 中调整面板 JSON注意保持layer: MONGODB与正确的entityService或ServiceInstance并确保expressions引用的指标名与 MAL 规则产出一致启用规则确认 application.yml 的receiver-otel.enabledOtelMetricsRules中包含mongodb/*修改后重启 OAP 生效。验证与排障要点确认 Service 出现部署完成后在 UI 的 Service 列表或通过 GraphQL 应能看到名为mongodb::cluster标签、Layer: MONGODB的服务其下挂载各节点 Instance指标是否产出可参照 mongodb-cases.yaml 中的 swctl 查询方式逐个验证meter_mongodb_cluster_*与meter_mongodb_node_*指标是否有值e2e 的 expected 目录给出了各类指标应带标签维度的断言样例如service_instance_id、database、doc_op_type、legacy_op_type、csr_type、op_type、member、version等可用于核对标签完整性版本前提若使用 OTLP exporter 直推 OAP需确保 OAP 版本不低于 9.2.0见 otel-collector-config.yaml 中注释MongoDB 副本集相关指标repl_lag、rs_state、repl_*仅在副本集模式下才有数据源单节点部署时这些面板为空属正常现象。【免费下载链接】skywalkingAPM, Application Performance Monitoring System项目地址: https://gitcode.com/gh_mirrors/sky/skywalking创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价