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的插件下载即可,具体在设置中然后搜索这个插件下载即可.

相关推荐
2302_8097983212 分钟前
【JavaWeb】MySQL
数据库·mysql
drowingcoder19 分钟前
MySQL相关
数据库
Musennn1 小时前
MySQL刷题相关简单语法集合
数据库·mysql
Think Spatial 空间思维2 小时前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
laowangpython2 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
mooyuan天天3 小时前
SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
数据库·web安全·sql注入·dvwa靶场·sql报错
运维-大白同学3 小时前
go-数据库基本操作
开发语言·数据库·golang
R-sz3 小时前
通过从数据库加载MinIO配置并初始化MinioClient,spring boot之Minio上传
数据库·oracle
洛阳泰山3 小时前
Windows系统部署MongoDB数据库图文教程
数据库·windows·mongodb
医只鸡腿子4 小时前
3.2/Q2,Charls最新文章解读
数据库·数据挖掘·数据分析·深度优先·数据库开发