Prometheus 监控服务 MongoDB Exporter 接入

在使用 MongoDB 过程中需要对 MongoDB 运行状态进行监控,以便了解 MongoDB 服务是否运行正常,排查 MongoDB 故障问题原因, Prometheus 监控服务提供了基于 Exporter 的方式来监控 MongoDB 运行状态,并提供了开箱即用的 Grafana 监控大盘。这里说明如何部署 Exporter 以及实现 MongoDB Exporter 告警接入等操作。

相关产品
Prometheus 监控服务 产品页,含版本规格、价格与购买入口。

一、操作场景

注意:说明:

注意:如果需要监控的 MongoDB 是腾讯云 云数据库 MongoDB 版,推荐使用集成中心 云监控集成,支持一键采集云产品指标。

二、操作步骤

1. 登录 Prometheus 监控服务控制台。

2. 在实例列表中,选择对应的 Prometheus 实例。

3. 进入实例详情页,选择数据采集 > 集成中心。

4. 在集成中心找到并单击 MongoDB,即会弹出一个安装窗口,在安装页面填写指标采集名称和地址等信息,并单击保存即可。

三、配置说明

参数 说明
名称 集成名称,命名规范如下:名称具有唯一性。名称需要符合下面的正则:'^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$'。
用户名 MongoDB 的用户名称,账号创建及授权请参见 账号创建及授权。
密码 MongoDB 的密码。
地址 MongoDB 的连接地址。
标签 给指标添加自定义 Label。
Exporter 配置 database:启用数据库指标的收集。collection:启用集合指标的收集。topmetrics:启用数据库表头指标信息的收集。indexusage:启用索引使用统计信息的收集。connpoolstats:收集 MongoDB 连接池统计信息。

四、方式二:自定义安装

注意:说明:

注意:为了方便安装管理 Exporter,推荐使用腾讯云 容器服务 进行统一管理。

五、前提条件

·在 Prometheus 实例对应地域及私有网络 VPC 下,创建 腾讯云容器服务,并为集群创建 命名空间。

·在 Prometheus 监控服务控制台 选择对应的 Prometheus 实例,然后在数据采集 > 集成容器服务中找到对应容器集群完成关联集群操作。可参见指引 关联集群。

六、操作步骤

步骤1:Exporter 部署

1. 登录 容器服务控制台。

2. 在左侧菜单栏中单击集群。

3. 单击需要获取集群访问凭证的集群 ID/名称,进入该集群的管理页面。

4. 执行以下 使用 Secret 管理 MongoDB 连接串 > 部署 MongoDB Exporter > 验证 步骤完成 Exporter 部署。

使用 Secret 管理 MongoDB 连接串

1. 在左侧菜单中选择工作负载 > Deployment,进入 Deployment 页面。

2. 在页面右上角单击 YAML 创建资源,创建 YAML 配置,配置说明如下:
使用 Kubernetes 的 Secret 来管理密码并对密码进行加密处理,在启动 MongoDB Exporter 的时候直接使用 Secret Key,需要调整对应的 URI,YAML 配置示例如下:

apiVersion: v1kind: Secretmetadata: name: mongodb-secret-test namespace: mongodb-testtype: OpaquestringData: datasource: "mongodb://{user}:{passwd}@{host1}:{port1},{host2}:{port2},{host3}:{port3}/admin" # 对应连接URI

部署 MongoDB Exporter

在 Deployment 管理页面,单击新建,选择对应的命名空间来进行部署服务。可以通过控制台的方式创建,如下以 YAML 的方式部署 Exporter,YAML 配置示例如下:

apiVersion: apps/v1kind: Deploymentmetadata: labels: k8s-app: mongodb-exporter # 根据业务需要调整成对应的名称,建议加上 MongoDB 实例的信息 name: mongodb-exporter # 根据业务需要调整成对应的名称,建议加上 MongoDB 实例的信息 namespace: mongodb-testspec: replicas: 1 selector: matchLabels: k8s-app: mongodb-exporter # 根据业务需要调整成对应的名称,建议加上 MongoDB 实例的信息 template: metadata: labels: k8s-app: mongodb-exporter # 根据业务需要调整成对应的名称,建议加上 MongoDB 实例的信息 spec: containers: – args: – –collect.database # 启用采集 Database metrics – –collect.collection # 启用采集 Collection metrics – –collect.topmetrics # 启用采集 table top metrics – –collect.indexusage # 启用采集 per index usage stats – –collect.connpoolstats # 启动采集 MongoDB connpoolstats env: – name: MONGODB_URI valueFrom: secretKeyRef: name: mongodb-secret-test key: datasource image: ccr.ccs.tencentyun.com/rig-agent/mongodb-exporter:0.10.0 imagePullPolicy: IfNotPresent name: mongodb-exporter ports: – containerPort: 9216 name: metric-port # 这个名称在配置抓取任务的时候需要 securityContext: privileged: false terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst imagePullSecrets: – name: qcloudregistrykey restartPolicy: Always schedulerName: default-scheduler securityContext: { } terminationGracePeriodSeconds: 30

注意:说明:

注意:Exporter 详细参数请参见 mongodb_exporter。

七、验证

1. 在 Deployment 页面单击上述步骤创建的 Deployment,进入 Deployment 管理页面。

2. 单击日志页签,可以查看到 Exporter 成功启动并暴露对应的访问地址:

3. 单击 Pod 管理页签,进入 Pod 页面。

4. 在右侧的操作项下单击远程登录,登录 Pod,在命令行中执行以下 wget 命令对应 Exporter 暴露的地址,可以正常得到对应的 MongoDB 指标,若发现未能得到对应的数据,请检查一下连接 URI 是否正确,具体如下:

wget http://127.0.0.1:9216/metricscat metrics

命令执行结果如下:


步骤2:添加采集任务

1. 登录 Prometheus 监控服务控制台,选择对应 Prometheus 实例进入管理页面。

2. 通过数据采集 > 集成容器服务,选择已经关联的集群,通过数据采集配置 > 新建自定义监控 > YAML 编辑来添加采集配置。

3. 通过服务发现添加 PodMonitors 来定义 Prometheus 抓取任务,YAML 配置示例如下,详情可参考 抓取配置:

apiVersion: monitoring.coreos.com/v1kind: PodMonitormetadata: name: mongodb-exporter # 填写一个唯一名称 namespace: cm-prometheus # 按量实例:集群的 namespace;包年包月实例(已停止售卖):namespace 固定,不要修改 labels: prom_id: prom-xxxspec: podMetricsEndpoints: – interval: 30s port: metric-port # 填写 pod yaml 中 Prometheus Exporter 对应的 Port 的 Name path: /metrics # 填写 Prometheus Exporter 对应的 Path 的值,不填默认/metrics relabelings: – action: replace sourceLabels: – instance regex: (.*) targetLabel: instance replacement: 'cmgo-xxxxxxxx' # 调整成对应的 MongoDB 实例 ID namespaceSelector: # 选择要监控 pod 所在的 namespace matchNames: – mongodb-test selector: # 填写要监控 pod 的 Label 值,以定位目标 pod matchLabels: k8s-app: mongodb-exporter

注意:说明:

注意:由于 Exporter 和 MongoDB 部署在不同的服务器上,因此建议通过 Prometheus Relabel 机制将 MongoDB 实例的信息放到监控指标中,以便定位问题。

八、腾讯云 MongoDB

1. 登录 腾讯云 MongoDB 控制台,选择对应 MongoDB 实例进入管理页面。

2. 在管理页面选择数据库管理 > 账号管理,然后单击创建账号。

3. 填写账号的名称、密码和相应的备注,然后单击确定。

4. 授予该账号 local 数据库的只读权限,全局权限选择只读,local 数据库选择只读,然后单击确定完成账号创建。

九、其他 MongoDB 服务

在 MongoDB 未启用权限认证的情况下,监控账号无需分配任何角色。开启权限认证后,监控账号需在 admin 数据库上授予 clusterMonitor 角色,并在 local 数据库上授予 read 角色。要确认 MongoDB 是否已开启权限认证,可以检查配置文件 mongodb.conf 中的以下配置:

……security: authorization: enabled # enabled 表示已开启权限认证,disabled 表示未开启……

未开启权限认证已开启权限认证1. 在确保客户端机器与 MongoDB 数据库服务器连通的前提下,使用命令行工具 mongosh 连接到 MongoDB 的 admin 数据库。mongosh "mongodb://{hostname}:{port}/admin"命令执行结果如下:2. 创建一个 MongoDB 账号,无需授予其任何角色。以下示例命令展示了如何创建一个账号名和密码均为 monitor 的监控账号。use admindb.createUser({ user: "monitor", pwd: "monitor", roles: []})命令执行结果如下:1. 在确保客户端机器与 MongoDB 数据库服务器连通的前提下,使用命令行工具 mongosh,通过具有 userAdminAnyDatabase 或 root 权限的账号连接到 MongoDB 的 admin 数据库。mongosh "mongodb://{user}:{passwd}@{hostname}:{port}/admin"命令执行结果如下:2. 创建一个 MongoDB 账号,并授予该账号在 admin 数据库的 clusterMonitor 角色和在 local 数据库的 read 角色。以下示例命令展示了如何创建一个账号名和密码均为 monitor 的监控账号,并授予其监控所需的权限。use admindb.createUser({ user: "monitor", pwd: "monitor", roles: [ { role: "clusterMonitor", db: "admin" }, { role: "read", db: "local" }, ]})命令执行结果如下:

十、前提条件

Prometheus 实例已绑定 Grafana 实例。

十一、操作步骤

1. 登录 Prometheus 监控服务控制台,选择对应 Prometheus 实例进入管理页面。

2. 单击数据采集 > 集成中心,进入集成中心页面。找到 MongoDB 监控,安装对应的 Grafana Dashboard 即可开启 MongoDB 监控大盘,查看实例相关的监控数据:

·MongoDB 概览:以实例的维度查看实例状态,例如文档个数、连接使用率、读写耗时等,可单击实例跳转到该实例详情。

·MongoDB 详情:可以查看某个实例的详细状态,例如元数据概览、核心指标、命令操作、请求流量、读写 Top 等。

注意:说明:

注意:每个图表可以单击左侧的进行查看说明。

十二、配置告警

1. 登录 Prometheus 监控服务控制台,选择对应 Prometheus 实例进入管理页面。

2. 在告警管理 > 告警策略页面,可以添加相应的告警策略,详情请参见 新建告警策略。

十三、常见问题

客户端报错:client check out connect timeout,该如何处理?

可能是连接池使用率达到100%,导致创建连接失败。可以通过 Grafana 大盘 MongoDB 详情/核心指标/连接使用率指标排查。


写入不断超时,该如何处理?

需检查 Cache 使用率是否过高、Transactions 可用个数是否为0,可以通过 Grafana 大盘 MongoDB 详情/核心指标/ WiredTiger Transactions 可用个数| WiredTiger Cache 使用率| GetLastError 写耗时| GetLastError 写超时指标排查。


赞 (0)
上一篇 4天前
下一篇 4天前