mongodb_exporter+prometheus+grafana实现MongoDB监控可视化

982 阅读2分钟

监控组件


1.1 选择监控组件

这里选择使用percona的MongoDB监控数据采集组件,github.com/percona/mon…,我用的是0.39.0版本。但是实际使用发现这个组件只通过 db.adminCommand({replSetGetStatus:1}).members[n].optimeDate 命令收集了最新一条oplog的时间戳,并没有副本集起始oplog的时间,所以对于我的监控场景,需要副本集oplog保留时长这一监控指标是做不到的。

这里我去修改了mongodb_exporter的源码,重新编译了一版,增加了 db.oplog.rs.find({},{"ts":1}).limit(1) 监控指标,能满足我的需求。(不需要的uu可以忽略这一步,想了解的可以私我)

image.png

1.2 启动监控进程

在启动之前先要在MongoDB上创建监控账号(只用clusterMonitor某些指标无权限收集):

use admin
db.createUser({ 
    user: "monitor",
    pwd: "monitor",
    roles: [
        { role: "read", db: "admin" },
        { role: "clusterMonitor", db: "admin" },
        { role: "readAnyDatabase", db: "admin"}
    ]
})

启动监控进程,mongodb_exporter已经编译好了,直接使用就行(副本集写到一个连接串里,只收集primary节点的监控数据,要监控所有副本集节点,需要开多个mongodb_exporter进程):

nohup /usr/local/mongodb_exporter --mongodb.uri=mongodb://monitor:monitor@127.0.0.1:27017/admin?ssl=false --web.listen-address=:9225 --collect-all --mongodb.direct-connect &

mongodb_exporter不会主动采集监控数据,需要主动调用其端口,这里可以调用一次测试监控进程是否启用成功:

wget http://127.0.0.1:9225/metrics

监控存储系统


2.1 配置监控采集任务

使用prometheus带的时序数据库存储监控数据,直接下载就能使用github.com/prometheus/…,新增MongoDB监控时,需要在配置文件prometheus.yml中追加监控采集任务(可根据需要任意新增多个label):

scrape_configs:

  - job_name: "mytest-mongodb"

    static_configs:
      - targets: ["127.0.0.1:9225"]     # mongodb_exporter运行地址:端口
        labels:
          addr: "127.0.0.1:27017"       # 自定义标签

      - targets: ["127.0.0.1:9226"]
        labels:
          addr: "127.0.0.1:27018"

启动prometheus:

nohup /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.enable-lifecycle --web.enable-admin-api --storage.tsdb.path=/data/prometheus/data/ & 

prometheus默认运行在9090端口,可以通过web页面http://127.0.0.1:9090/查看prometheus和mongodb_exporter的运行状态:

image.png

监控可视化


监控可视化使用grafana组件,在安装完成后,需要配置prometheus数据源:

image.png

然后新建监控页面,根据自己的需要使用promql语句获取监控指标,例如"当前连接数"(可以先在prometheus上测试查询语句):

image.png