使用Zabbix监控RabbitMQ消息队列

注:本文档根据GitHub开源项目,实践成功后所编写

开源项目地址:https://github.com/jasonmcintosh/rabbitmq-zabbix

为方便大家下载,已经将此项目整个打包上传至附件,可从附件中直接下载

监控部署督步骤:

  1. 下载附件中文件
  2. 复制项目中scripts目录中所有内容至 zabbix_agentd 端服务器的 /usr/local/sbin 目录下(任何包含 zabbix_agentd 端服务器均可)

    注:放置文件的服务器需要能与rabbitmq服务器通讯,假设我存放的服务器为agent1

  3. 上传项目中 zabbix_agentd.d 目录下面的 zabbix-rabbitmq.conf 至agent1服务器的zabbix_agentd 扩展配置文件目录

    注:执行以下shell命令可以找到扩展配置文件目录,如果没有任何显示,那么需要修改配置文件打开对应的选项,并注意路径设置正确

    grep "^Include" zabbix_agentd.conf

  4. 导入 rabbitmq.template.xml 模板文件至zabbix,导入方法省略
  5. 修改 zabbix-rabbitmq.conf 配置文件,保证里面各脚本的路径与第2步中上传的路径一至,也就是确保此路径能找到相对应的文件,否则就不要继续下一步
  6. 修改 zabbix_agentd 端和 zabbix_server 端,修改Timeout超时时间为10秒,默认为3秒,因为脚本有的执行时间超过3秒,这样会超时,无法获取数据,定义具体多大,视情况而定,最大30秒
  7. 在api.py文件所在目录创建一个文件,名称为“.rab.auth”注意,此文件是隐藏文件,前面有个点,文件内容为

    USERNAME=guest

    PASSWORD=guest

    CONF=etc/zabbix/zabbix_agentd.conf

    LOGLEVEL=DEBUG

    LOGFILE=/var/log/zabbix/rabbitmq_zabbix.log

    PORT=15672

    USERNAME:rabbitmq管理界面登录用户名

    PASSWORD:rabbitmq管理界面登录密码

    CONF:指定 zabbix_agentd 配置文件路径

    LOGLEVEL:指定日志级别,如果监控调试OK,可将此值改为INFO

    LOGFILE:指定日志文件路径

    PORT:指定rabbitmq管理访问端口

  8. 修改api.py文件
    1. 全文替换 /etc/zabbix/zabbix_agentd.conf 此路径为你自己的路径,如果相同就不必替换
    2. 全文替换 /var/log/zabbix/rabbitmq_zabbix.log 此路径为你自己的路径
    3. 修改 RabbitMQAPI 类中的 __init__ 方法中:

      user_name:rabbitmq管理界面登录用户名

      password:rabbitmq管理界面登录密码

      host_name:rabbitmq管理界面地址

      port:rabbitmq管理界面端口

      conf:zabbix_agentd 配置文件路径

      senderhostname:此选项为zabbix_sender往zabbix_server推送数据的地址,默认此模板                    是按“Zabbix客户端(主动式)”把数据传输到服务端的,我推荐使用                    服务端主动式,所以这里默认及可

      protocol:rabbitmq管理界面使用协议,比如http或者https,默认为http

  9. 修改api.py文件所在目录的所有文件,包括.rab.auth隐藏文件的所属组和所属主为zabbix,然后修改权限为755
  10. 修改 rabbitmq.template.xml 中所有获取数据模式为“Zabbix客户端(主动式)”的监控项,改为“Zabbix客户端”
  11. 将模板关联到对应的主机
  12. 监控结果如下:

    上图为所有队列信息

    上图为服务器概况

监控过程中有可能遇到问题解决:

  1. 查看debug日志,访问的地址与指定的地址不正确时解决方法如下

    修改api.py文件中RabbitMQAPI类中call_api方法

    把self.host_name改为rabbitmq服务器的地址,注意加单引号

  2. zabbix监控服务器监控数据中有信息,但是为python报错,并且报错有401错误,此为登录认证失败,需要确认配置用户名密码正确
时间: 2024-07-30 09:52:00

使用Zabbix监控RabbitMQ消息队列的相关文章

Zabbix 监控rabbitmq

一 应用场景描述 测试环境业务 OpenStack中搭建了rabbitmq作为RPC消息队列,所以mq起到了很重要的角色,本案例是来如何使用zabbix监控 rabbitmq业务 二 Rabbitmq监控要点 RabbitMQ官方提供两种方法来管理和监控RabbitMQ. 1.使用rabbitmqctl管理和监控 查看虚拟主机 # rabbitmqctl list_vhosts 查看队列 # rabbitmqctl list_queues 查看exchanges # rabbitmqctl li

RabbitMQ消息队列应用

RabbitMQ消息队列应用 消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是通过消息队列传输系统日志.目前业界使用较多的消息队列组件有RabbitMQ.ActiveMQ.MSMQ.kafka.zeroMQ等,本文对系统架构之MQ Component诠释,并采用RabbitMQ作为消息队列中间件. 图1- 消息队列组件示意图 一.RabbitMQ介绍 RabbitMQ是一款基

Golang调用Rabbitmq消息队列和封装

前言 介绍Rabbimq Rabbitmq消息队列是干嘛的? 简单的说,消息队列,引申一下就是传递消息用的队列,也可以称为传递消息的通信方法.用争抢订单的快车举个例子,假如,A用户发送了一个用车的消息,那么消息队列要做的就是把A用户用车的这个消息广而告之,发送到一个公用队列当中,司机只管取到消息,而不管是谁发布的,这就是一个简单的消息队列例子,Rabbitmq其实就是消息队列的一种,用的比较多的还可能有Redis,kafka,ActiceMq等等,这个后面的博文里面我会说,这次我们只说Rabbi

(转)RabbitMQ消息队列(六):使用主题进行消息分发

在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因,因为是仅仅能够通过severity设定.不支持更多的标准. 比如syslog unix的日志工具,它可以通过severity (info/warn/crit...) 和模块(auth/cron/kern...).这可能更是我们想要的:我们可以仅仅需要cron模块的log. 为了实现类似的功能,我们需

RabbitMQ消息队列(六):使用主题进行消息分发

在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因,因为是仅仅能够通过severity设定.不支持更多的标准. 比如syslog unix的日志工具,它可以通过severity (info/warn/crit...) 和模块(auth/cron/kern...).这可能更是我们想要的:我们可以仅仅需要cron模块的log. 为了实现类似的功能,我们需

(转)RabbitMQ消息队列(九):Publisher的消息确认机制

在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consumer处理呢?毕竟对于一些非常重要的数据,可能Publisher需要确认某个消息已经被正确处理. 在我们的系统中,我们没有是实现这种确认,也就是说,不管Message是否被Consume了,Publisher不会去care.他只是将自己的状态publish给上层,由上层的逻辑去处理.如果Message

(转)RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会通过其它节点求来斐波纳契完成示例. 1. 客户端接口 Client interface 为了展示一个RPC服务是如何使用的,我们将创建一段很简单的客户端class. 它将会向外提供名字为call的函数,这个call会发送RPC请求并且阻塞知道收到RPC运算的结果.代码如下: [python] vie

(转)(二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念

http://blog.csdn.net/super_rd/article/details/70238869 没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. RabbitMQ架构 说是架构其实更像是应用场景下的架构(自己画的有点丑,勿嫌弃) 从图中可以看出RabbitMQ主要由Exchange和Queue两部分组成,然后通过RoutingKey关联起来,消息投递到Exchange然后通过Queue接收. RabbitMQ消息队列基本概

RabbitMQ消息队列(九):Publisher的消息确认机制

在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consumer处理呢?毕竟对于一些非常重要的数据,可能Publisher需要确认某个消息已经被正确处理. 在我们的系统中,我们没有是实现这种确认,也就是说,不管Message是否被Consume了,Publisher不会去care.他只是将自己的状态publish给上层,由上层的逻辑去处理.如果Message