Prometheus实战篇:Prometheus监控mongodb

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: Prometheus实战篇:Prometheus监控mongodb

Prometheus实战篇:Prometheus监控mongodb

准备环境

docker-compose安装mongodb

docker-compose.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
docker-compose up -d

监控mongoDB

创建监控用户

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

登录MongoDB(docker安装的mongo)

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直接运行

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使用管理员账号,生产不建议使用

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

启动

docker-compose up -d

检查

查看正在运行的容器
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的监控样本数据

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

重新加载配置

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配置

rule_files:
  - "alert.yml"
  - "rules/*.yml"

配置mongdb触发器

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

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语法还是比较严格的一点缩进错误都不能有

检查配置

docker exec -it prometheus promtool check config /etc/prometheus/prometheus.yml

重新加载配置

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

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
Prometheus Kubernetes 监控
|
3月前
|
Prometheus 监控 Cloud Native
Prometheus实战篇:Prometheus监控docker
Prometheus实战篇:Prometheus监控docker
|
3月前
|
消息中间件 Prometheus 监控
Prometheus实战篇:Prometheus监控rabbitmq
Prometheus实战篇:Prometheus监控rabbitmq
|
3月前
|
Prometheus 监控 Cloud Native
|
3月前
|
编解码 Prometheus 运维
Prometheus 的监控方法论
【1月更文挑战第24天】
|
3月前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
2月前
|
Prometheus 监控 Kubernetes
如何用 Prometheus Operator 监控 K8s 集群外服务?
如何用 Prometheus Operator 监控 K8s 集群外服务?
|
6月前
|
Prometheus 监控 Cloud Native
【云原生】Docker容器命令监控+Prometheus监控平台
【云原生】Docker容器命令监控+Prometheus监控平台
212 0
【云原生】Docker容器命令监控+Prometheus监控平台
|
2月前
|
Prometheus 监控 Kubernetes
Prometheus Operator 与 kube-prometheus 之二 - 如何监控 1.23+ kubeadm 集群
Prometheus Operator 与 kube-prometheus 之二 - 如何监控 1.23+ kubeadm 集群
|
5月前
|
数据采集 Prometheus 监控
监控利器之Prometheus基于Blackbox_exporter监控服务的端口
监控利器之Prometheus基于Blackbox_exporter监控服务的端口
285 0

热门文章

最新文章

  • 1
    Serverless 应用引擎产品使用之数据文件(例如sdxl)超过了OSS(对象存储服务)的单个上传大小限制(5GB)如何解决
    7
  • 2
    Serverless 应用引擎产品使用之在函数计算中,数据库访问失败如何解决
    12
  • 3
    Serverless 应用引擎产品使用之在阿里云函数计算中发现没有NAC(Native Application Component)选项,且无法自己上传MOD(模块)如何解决
    14
  • 4
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,调用了FC函数但是没有执行或者报错,并且在FC函数后台也看不到调用记录日志如何解决
    16
  • 5
    Serverless 应用引擎操作报错合集之在阿里函数计算中,sd部署启动报错CAExited 报错信息“operation not permitted”如何解决
    11
  • 6
    Serverless 应用引擎操作报错合集之在阿里函数计算中,SD Controlnet Depth 运行过程中出现错误“urllib3 v2.0 only supports OpenSSL 1.1.1+”如何解决
    11
  • 7
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,laravel zip包使用示例的start.sh脚本启动时出现错误代码如何解决
    13
  • 8
    Serverless 应用引擎操作报错合集之在阿里云函数计算中,服务器调用FC函数时出现 "[Errno -3] Temporary failure in name resolution)" 错误如何解决
    11
  • 9
    Serverless 应用引擎操作报错合集之在Serverless 应用引擎中,部署过程中遇到错误代码如何解决
    13
  • 10
    Serverless 应用引擎操作报错合集之在 Serverless 应用引擎中,遇到“没法通过 head 传递灰度标识”如何解决
    13
  • 相关产品

  • 可观测监控 Prometheus 版