监控组件
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可以忽略这一步,想了解的可以私我)
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的运行状态:
监控可视化
监控可视化使用grafana组件,在安装完成后,需要配置prometheus数据源:
然后新建监控页面,根据自己的需要使用promql语句获取监控指标,例如"当前连接数"(可以先在prometheus上测试查询语句):