Prometheus实战篇:Prometheus监控rabbitmq

Prometheus实战篇:Prometheus监控rabbitmq

准备环境

docker-compose安装rabbitmq

这里注意rabbitmq需要暴露2个端口

docker-compose.yaml

yaml 复制代码
version: '3'
services:
   rabbitmq:
 	image: rabbitmq:3.7.15-management
 	container_name: rabbitmq
 	 restart: always
 	 volumes:
 	 	- /data/rabbitmq/data: /var/lib/rabbitmq
 	 	- /data/rabbitmq/log: /var/log/rabbitmq
 	 port:
 	 - 5672:5672
 	 - 15672:15672
shell 复制代码
docker-compose up -d

监控rabbitmq

docker安装exporter

docker直接运行

shell 复制代码
docker run -d  -p 9419:9419  --name rabbitmq_exporter -e RABBIT_URL=http://localhost:15672 -e RABBIT_USER=guest -e RABBIT_PASSWORD=guest kbudde/rabbitmq_exporter

docker-compose方式

shell 复制代码
cat >docker-compose.yaml <<FOF
version: '3.3'
services:
 rabbitmq_exproter:
 	image: kbudde/rabbitmq-exporter
 	container_name: rabbitmq_exporter
 	restart: always
 	environment:
 		RABBIT_URL: "localhost:15672"
 		RABBIT_USER: "guest"
 		REDIS_PASSWORD: "guest"
 		PUBLISH_PORT: "9419"
 		OUTPUT_FORMAT: "JSON"
 	port:
 	 - "9419:9419"
EOF

启动

shell 复制代码
docker-compose up -d

检查

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

或者:

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

参数解释

Environment variable 描述
RABBIT_URL localhost:15672 rabbitmq管理插件的url(必须以http(2)开头)
RABBIT_USER guest rabbitmq管理插件的用户名
REDIS_PASSWORD guest rabbitmq管理插件的密码
OUTPUT_FORMAT JSON 输出格式
PUBLISH_PORT 9419 运行端口(监听端口)

metrics地址

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

名称 地址
rabbitmq_exporter http://localhost:9419/metrics

Prometheus配置

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

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

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

重新加载配置

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

检查

常用的rabbitmq监控指标

rabbitmq_queue_messages_unacknowledged_global			队列中有未确认的消息总数(未被消费的消息)
rabbitmq_node_disk_free_limit							使用磁盘大小
rabbitmq_node_disk_free									磁盘总大小
	
rabbitmq_node_mem_used									使用内存大小
rabbitmq_node_mem_limit									内存总大小

rabbitmq_sockets_used	 								使用的sockets的数量		
rabbitmq_sockets_available	 							可用的sockets总数
	
rabbitmq_fd_used										使用文件描述符的数量
rabbitmq_fd_available									可用的文件描述符总数

触发器配置

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

Prometheus配置

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

配置rabbitmq触发器

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

shell 复制代码
cat >prometheus/rules/rabbitmq.yml <<FOF
groups:
- name: Rabbitmq
	rules:
    - alert: RabbitMQDown
      expr: rabbitmq_up != 1
      labels:
        severity: High
      annotations:
          summary: "Rabbitmq Down,实例:{{$labels.instance }}"
          description: "Rabbitmq_exporter连不上RabbitMQ!"
    - alert: Rabbitmq有未确认消息
      expr: rabbitmq_queue_messages_unacknowledged_global > 0
      for: 1m
      labels:
        severity: critical
      annotations:
          summary: "RabbitMQ有未确认消息,实例:{{$labels.instance }}"
          description: "Rabbitmq未确认消息>0当前值为:{{ $value }}"
    - alert: RabbitMQ可用磁盘空间不足告警
      expr: rabbitmq_node_disk_free_alarm !=0
      for: 0m
      labels:
        severity: critical
      annotations:
          summary: "RabbitMQ可用磁盘空间不足,实例:{{$labels.instance }}"
          description: "RabbitMQ可用磁盘空间不足,请检查"
    - alert: RabbitMQ可用内存不足告警
      expr: rabbitmq_sockets_used / rabbitmq_sockets_available * 100 >60
      for: 0m
      labels:
        severity: critical
      annotations:
          summary: "RabbitMQ可用内存不足,实例:{{$labels.instance }}"
          description: "RabbitMQ可用内存不足,请检查"
    - alert: RabbitMQ_socket连接数使用过高告警
      expr: rabbitmq_sockets_used / rabbitmq_sockets_available * 100 >60
      for: 0m
      labels:
        severity: critical
      annotations:
          summary: "RabbitMQ_socket使用过高,实例:{{$labels.instance }}"
          description: "RabbitMQ_socket使用>60%当前值为::{{ $value }}"
    - alert: RabbitMQ文件描述符使用过高告警
      expr: rabbitmq_fd_used / rabbitmq_fd_available * 100 > 60
      for: 0m
      labels:
        severity: critical
      annotations:
          summary: "RaiibitMQ文件描述符使用过高,实例:{{$labels.instance }}"
          description: "RaiibitMQ文件描述符使用>60%,当前值为:{{ $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

grafana展示Prometheus从redis_exporter收集到的数据

id :4279

相关推荐
Dylanioucn1 小时前
【分布式微服务云原生】掌握分布式缓存:Redis与Memcached的深入解析与实战指南
分布式·缓存·云原生
鸡c2 小时前
rabbitmq----数据管理模块
rabbitmq
落落落sss3 小时前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
weixin_453965004 小时前
[单master节点k8s部署]31.ceph分布式存储(二)
分布式·ceph·kubernetes
坎坎坷坷.5 小时前
分布式理论:拜占庭将军问题
分布式
Xua30558 小时前
MQ高级:RabbitMQ小细节
rabbitmq
极客先躯11 小时前
高级java每日一道面试题-2024年10月3日-分布式篇-分布式系统中的容错策略都有哪些?
java·分布式·版本控制·共识算法·超时重试·心跳检测·容错策略
niu_sama11 小时前
仿RabbitMQ实现消息队列三种主题的调试及源码
分布式·rabbitmq
鸡c11 小时前
rabbitMq------客户端模块
分布式·rabbitmq·ruby
Dylanioucn12 小时前
【分布式微服务云原生】探索Redis:数据结构的艺术与科学
数据结构·redis·分布式·缓存·中间件