prometheus监控RabbitMQ策略

news/2024/5/18 23:23:53 标签: prometheus, rabbitmq

一般用官方的rabbitmq_exporter采取数据即可,然后在普米配置。但如果rabbitmq节点的队列数超过了5000,往往rabbitmq_exporter就会瘫痪,因为rabbitmq_exporter采集的信息太多,尤其是那些队列的细节,所以队列多了,rabbitmq_exporter就没法用了。所以我们不得不自己写脚本探测MQ,脚本分享如下:

首先 pip3 install prometheus-client

import prometheus_client as prom
import pandas as pd
from sqlalchemy import create_engine
import requests,time
#自定义普米MQ监控指标
port = '15672'
username = 'username'
password = 'password'
g0 = prom.Gauge("rabbitmq_up", 'life of the node',labelnames=['node','region'])
g1 = prom.Gauge("rabbitmq_queues", 'total queue num of the node',labelnames=['node','region'])
g2 = prom.Gauge("rabbitmq_channels", 'total queue num of the node',labelnames=['node','region'])
g3 = prom.Gauge("rabbitmq_connections", 'total queue num of the node',labelnames=['node','region'])
g4 = prom.Gauge("rabbitmq_consumers", 'total queue num of the node',labelnames=['node','region'])
g5 = prom.Gauge("rabbitmq_exchanges", 'total queue num of the node',labelnames=['node','region'])
g6 = prom.Gauge("rabbitmq_messages", 'total messages of the node',labelnames=['node','region'])
g7 = prom.Gauge("rabbitmq_vhosts", 'total vhost num of the node',labelnames=['node','region'])
g8 = prom.Gauge("rabbitmq_node_mem_used", 'mem used of the node',labelnames=['node','region'])
g9 = prom.Gauge("rabbitmq_node_mem_limit", 'mem limit of the node',labelnames=['node','region'])
g10 = prom.Gauge("rabbitmq_node_mem_alarm", 'mem alarm of the node',labelnames=['node','region'])
g11 = prom.Gauge("rabbitmq_node_disk_free_alarm", 'free disk alarm of the node',labelnames=['node','region'])

prom.start_http_server(8086)
#要监控的MQ节点
nodelist=['1.1.1.1','1.1.1.2','1.1.1.3'] 
while True:
  for node in nodelist:                      #遍历各个node
    status=1
    try:                                                                              #测试连通性
      requests.get(url=f"http://{node}:{port}/api/overview", auth=(username, password),timeout=5)
    except:
      status=0
      continue
    finally:
      g0.labels(node=node,region=region).set(status)
    api = AdminAPI(url=f"http://{node}:{port}", auth=(username, password))
    info1=requests.get(url=f"http://{node}:{port}/api/overview", auth=(username, password),timeout=5)
    info2=requests.get(url=f"http://{node}:{port}/api/nodes", auth=(username, password),timeout=5)[0]
    info3=requests.get(url=f"http://{node}:{port}/api/vhosts", auth=(username, password),timeout=5)
    g1.labels(node=node,region=region).set(info1.get('object_totals').get('queues'))  
    g2.labels(node=node,region=region).set(info1.get('object_totals').get('channels')) 
    g3.labels(node=node,region=region).set(info1.get('object_totals').get('connections')) 
    g4.labels(node=node,region=region).set(info1.get('object_totals').get('consumers')) 
    g5.labels(node=node,region=region).set(info1.get('object_totals').get('exchanges')) 
    g6.labels(node=node,region=region).set(info1.get('queue_totals').get('messages')) 
    g7.labels(node=node,region=region).set(len(info3)) 
    g8.labels(node=node,region=region).set(info2.get('mem_used'))
    g9.labels(node=node,region=region).set(info2.get('mem_limit'))
    g10.labels(node=node,region=region).set(info2.get('mem_alarm'))
    g11.labels(node=node,region=region).set(info2.get('disk_free_alarm'))
  time.sleep(30)

python3 执行这个脚本,就会运行一个页面如下
在这里插入图片描述
于是就可以用普米采集了
在这里插入图片描述
注意honor_labels 指标,就是让job,instance指标不被普米自身的覆盖


http://www.niftyadmin.cn/n/5345499.html

相关文章

使用javadoc生成maven项目的文档

概述:Maven 提供了 javadoc 插件来执行这个任务。 废话不多说,让我们开始操作吧!!! 第一步:引入插件 在 pom.xml 中配置 javadoc 插件: 在 Maven 项目的 pom.xml 文件中,你需要添加…

源码编译运行webviz

源码编译运行webviz 建议全程在代理环境下进行! 加代理都麻烦的要死, 无代理建议换个方式, linux就用rviz, windows考虑用foxglove吧 此外, 我尝试在arm架构使用webviz, 但是尽管编译成功, 但是出不了图, 看不到相关消息, 如果有大佬知道为什么还请不吝赐教! git clone http…

orchestrator介绍3.4 web API 的使用

目录 使用 web API API使用简单举例 查看所有的API 实例 JSON 详解 API使用举例 使用 web API orchestrator提供精心设计的 Web API。 敏锐的 Web 开发人员会注意到(通过Firebug or Developer Tools)Web 界面如何完全依赖于 JSON API 请求。 开发人员可…

【力扣】记录一下竞赛分上 Knight

记录一下力扣上 Knight 力扣的题还是相对来说比较简单的,前两个月写的题多一点,后面几乎都是只做了每日一题,感觉正常来说刷个两三个月的题水平就差不多够了,甚至在我才刷半个月的时候就可以做三题了,排名和现在差不多…

用Python画出漂亮的地图

用Python画出漂亮的地图 地图可视化是数据分析和地理信息系统中的重要环节。Python提供了多个强大的库,如Folium、Matplotlib、Geopandas等,使得创建漂亮而具有信息量的地图变得简单而灵活。本文将详细介绍如何使用这些库绘制漂亮的地图,并提…

InitVerse:为云计算服务带来更高的透明度和可验证性

InitVerse:为云计算服务带来更高的透明度和可验证性 在云计算服务领域,透明度和可验证性是构建信任的关键要素。传统的云计算市场往往缺乏透明度,用户难以了解其数据和计算资源的实际使用情况。然而,通过利用区块链技术&#xff0…

Vue3+Ts:实现paypal按钮

Vue3Ts:实现paypal按钮 一、前端页面按钮实现第一步:下载paypal.js依赖第二步:引入要使用的vue页面,并调用。 二、实现逻辑研究第一点:了解下Buttons自带的style属性第二点:了解下Buttons自带的处理方法第三…

5-分页实现

分页实现 前端基于element封装的分页组件 pagination(opens new window)后端基于mybatis的轻量级分页插件pageHelper(opens new window) 1.前端调用实现 1、前端定义分页流程 // 一般在查询参数中定义分页变量 queryParams: {pageNum: 1,pageSize: 10 },// 页面添加分页组件…