Prometheus实战篇:Prometheus监控mongodb

Prometheus实战篇:Prometheus监控mongodb

准备环境

docker-compose安装mongodb

docker-compose.yaml

yaml 复制代码
version: '3'
services:
   mongo:
 	image: mongo:4.2.5
 	container_name: mongo
 	 restart: always
 	 volumes:
 	 	- /data/mongo/db: /data/db
 	 port:
 	 - 27017:27017
 	 command: [--auth]
 	 enviroment:
 	 	MONGO_INITDB_ROOT_USERNAME: root
 	 	MONGO_INITDB_ROOT_PASSWORD: 123456
shell 复制代码
docker-compose up -d

监控mongoDB

创建监控用户

登录MongoDB创建监控用户,权限为"readAnyDatabase",如果是cluster环境,需要有"clusterMonitor"

登录MongoDB(docker安装的mongo)

shell 复制代码
docker exec -it mongo mongo admin

创建监控用户

复制代码
> db.auth('root','123456')
1
>db.createUser({ user: 'exporter',pwd : 'password',roles:[{role: 'readAnyDatabase',db : admin},{role: 'clusterMonitor',db : admin}]})
#测试 使用上面创建的用户信息进行连接
> db.auth('exporter','password')
1
#表示成功
> exit

docker安装exporter

docker直接运行

shell 复制代码
docker run -d  -p 9216:9216 -p 17001:17001 --restart=always  --name mongodb-exporter bitnami/mongodb_exporter :latest --collect-all --compatible-mode --mongodb.uri=mongodb://exporter:password@localhost:27017/admin?ssl=false

docker-compose方式

为了方便省事,我mongodb使用管理员账号,生产不建议使用

shell 复制代码
cat >docker-compose.yml << EOF
version: '3.3'
services:
 mongodb_exproter:
 	image: bitnami/mongodb_exporter:latest
 	container_name: mongodb_exproter
 	restart: always
 	environment:
 		MONGODB_URI: "mongodb://exporter:password@localhost:27017/admin?ssl=false"
 	command:
 		- '--collect-all'
 		- '--compatible-mode'
 	port:
 	 - "9216:9216"
EOF

启动

shell 复制代码
docker-compose up -d

检查

shell 复制代码
查看正在运行的容器
docker ps

或者:

查看mongodb_exporter容器的运行日志
docker logs -f mongodb_exporter

参数解释

Environment variable 描述
collect-all localhost:15672 rabbitmq管理插件的url(必须以http(2)开头)
compatible-mode guest rabbitmq管理插件的用户名

metrics地址

安装好Exporter后会暴露一个/metrics结尾的服务

名称 地址
mongodb_exporter http://localhost:9216/metrics

Prometheus配置

配置Prometheus去采集(拉取)nginx_exporter的监控样本数据

shell 复制代码
cd /data/docker-prometheus

# 在scrapc_configs(搜刮配置):下面增加如下配置:
cat >prometheus/prometheus.yml <<FOF
 - job_name: 'mongodb_exporter'
   static_configs:
   - targets: ['localhost:9216']
   	 labels:
   	 	instance: test服务器 
EOF

重新加载配置

shell 复制代码
curl -x POST http://localhost:9090/-/reload

检查

常用的mongodb监控指标

复制代码
mongodb_ss_connections{conn_type="available"} 可用的连接数

mongodb_ss_mem_virtual
mongodb_ss_mem_residenl


#关于server status
mongodb_up	服务器是否在线
mongodb_ss_ok{cl_id="",cl_role="current",rs_state="0"}	服务器是否正常运行,取值为1,0.标签中记录了Cluster,ReplicaSet
mongodb_ss_uptime	服务器的运行时长,单位为秒
mongdb_ss_connections{conn_type="current"}	客户端连接数

# 关于主机
mongodb_sys_cpu_num_cpus	主机的CPU核数

# 关于 collection
mongodb_collstats_storageStats_count{database="xx",collection="xx"}	collection 全部文档的数量
mongodb_collstats_storageStats_size	collection全部文档的体积,单位bytes
mongodb_collstats_storageStats_storageSize	collection全部文档占用的磁盘空间,默认会压缩
delta(mongodb_collstats_latencyStats_reads_ops[1m])	collection读操作的数量(每分钟)
delta(mongodb_collstats_latencyStats_reads_latency[1m])	collection读操作的延迟(每分钟),单位为微秒
mongodb_collstats_latencyStats_write_ops
mongodb_collstats_latencyStats_write_latency

触发器配置

由于之前的触发器是全部写在了一个yml里面就是alert.yam,这样随着后面配置的触发器越来越多最终会变得难以维护.这里我们让它去读rules目录下所有的yml文件即可

Prometheus配置

shell 复制代码
rule_files:
	- "alert.yml"
	- "rules/*.yml"

配置mongdb触发器

因为是单机所以未配置集群的触发器

shell 复制代码
cat >prometheus/rules/mongodb.yml <<FOF
groups:
- name: PerconaMongodbExporter
	rules:
    - alert: MongodbDown
      expr: 'mongodb_up == 0'
      for: 0m
      labels:
        severity: critical
      annotations:
          summary: "MongoDB Down,容器:$labels.instance"
          description: "MongoDB 容器 is down,当前值{{ $value }}"
    - alert: MongodbNumberCursorsOpen
      expr: 'mongodb_ss_metrics_cursor_open{csr_type="total"}' > 10
      for: 2m
      labels:
        severity: warning
      annotations:
          summary: "MongoDB 数字游标打开告警 容器:{{$labels.instance }}"
          description: "MongoDB为客户端打开的游标过多>10k,当前值为:{{ $value }}"
    - alert: MongdbCursorsTimeouts
      expr: 'increase(mongodb_ss_metrics_cursor_timedOut[1m]) > 100'
      for: 2m
      labels:
        severity: warning
      annotations:
          summary: "MongDB 游标超时,容器:{{$labels.instance }}"
          description: "太多游标超时,当前值为:{{ $value }}"
    - alert: MongodbVirtualMemoryUsage
      expr: '(sum(mongodb_ssmem_virtual BY (instance) / sum(mongodb_ss_mem_resident) BY (instance)) > 3'
      for: 2m
      labels:
        severity: warning
      annotations:
          summary: "MongoDB虚拟内存使用告警,容器:{{$labels.instance }}"
          description: "虚拟内存使用过高,当前值为:{{ $value }}"
   
EOF

一定记住这里需要仔细校对yaml语法,最好是能去在线验证yaml语法的网站上看看.yaml语法还是比较严格的一点缩进错误都不能有

检查配置

shell 复制代码
docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml

重新加载配置

shell 复制代码
curl -x POST http://localhost:9090/-/reload

检查

http://localhost:9090/alerts?search=

或:

http://localhost:9090/rules

dashboard

这里需要从github上去下载对应的dashboard

https://github.com/percona/grafana-dashboards/blob/main/dashboards/MongoDB/MongoDB_Instances_Overview.json

选择导入刚刚从github上下载的json文件即可

可以发现最终的仪表盘上有这一块连接数是空的

只需要在插件中将polystat的插件下载即可,具体在设置中然后搜索这个插件下载即可.

相关推荐
异世界贤狼转生码农1 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong1 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪2 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
时序数据说7 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.11 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)11 小时前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺11 小时前
Java应届生求职八股(2)---Mysql篇
数据库·mysql
HMBBLOVEPDX11 小时前
MySQL的事务日志:
数据库·mysql
weixin_4196583113 小时前
MySQL数据库备份与恢复
数据库·mysql
专注API从业者14 小时前
基于 Flink 的淘宝实时数据管道设计:商品详情流式处理与异构存储
大数据·前端·数据库·数据挖掘·flink