使用Zabbix监控RabbitMQ消息队列


本项目脚本下载地址:https://github.com/jasonmcintosh/rabbitmq-zabbix

  下载文件解压  
        mkdir -p /etc/zabbix/scripts/rabbitmq
       unzip rabbitmq-zabbix-master.zip
        [root@node110 ~]# cd rabbitmq-zabbix-master/

        [root@node110 rabbitmq-zabbix-master]# ls
        LICENSE  rabbitmq.template.xml  README.ja.md  README.md  scripts  tests  zabbix_agentd.d
  把scripts文件放在目录/etc/zabbix/scripts/rabbitmq
         

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

  导入 rabbitmq.template.xml 模板文件至zabbix服务端,导入方法省略

  修改 zabbix-rabbitmq.conf 配置文件,保证里面各脚本的路径与以上步骤中上传的路径一至,也就是确保此路径能找到相对应的文件,否则就不要继续下一步
          

  修改 zabbix_agentd 端和 zabbix_server 端,修改Timeout超时时间为10秒,默认为3秒,因为脚本有的执行时间超过3秒,这样会超时,无法获取数据,定义具体多大,视情况而定,最大30秒

  在api.py文件所在目录创建一个文件,名称为“.rab.auth”注意,此文件是隐藏文件,前面有个点,文件内容为

    USERNAME=guest    
    PASSWORD=guest
    CONF=/usr/local/zabbix/etc/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管理访问端口
修改/etc/zabbix/scripts/rabbitmq/api.py文件
  a.全文替换 /etc/zabbix/zabbix_agentd.conf 此路径为你自己的路径,如果相同就不必替换
  b.全文替换 /var/log/zabbix/rabbitmq_zabbix.log 此路径为你自己的路径
  c.修改 RabbitMQAPI 类中的 __init__ 方法中:
  user_name:rabbitmq管理界面登录用户名
  password:rabbitmq管理界面登录密码
  host_name:rabbitmq管理界面地址
  port:rabbitmq管理界面端口
  conf:zabbix_agentd 配置文件路径
  senderhostname:此选项为zabbix_sender往zabbix_server推送数据的地址,这里要修改成zabbix_agentd.conf文件中的Hostname的值
  protocol:rabbitmq管理界面使用协议,比如http或者https,默认为http
修改完成后如下:
def __init__(self, user_name='guest', password='guest', host_name='node110',
22                  port=15672, conf='/usr/local/zabbix/etc/zabbix_agentd.conf', senderhostname='node1011110', protocol=    'http'):
  修改api.py文件所在目录的所有文件,包括.rab.auth隐藏文件的所属组和所属主为zabbix,然后修改权限为755


api.py这个文件有个BUG如下:

etc/zabbix/scripts/rabbitmq/api.py
 18 class RabbitMQAPI(object):
19    '''Class for RabbitMQ Management API'''
20
21    def __init__(self, user_name='guest', password='guest', host_name='node110',
22                  port=15672, conf='/usr/local/zabbix/etc/zabbix_agentd.conf', senderhostname='node1011110', protocol=    'http'):
23        self.user_name = user_name
24        self.password = password
25        self.host_name = host_name or socket.gethostname()
26        self.port = port
27        self.conf = conf or '/usr/local/zabbix/etc/zabbix_agentd.conf'
28        #self.senderhostname = senderhostname or socket.gethostname()
29        self.senderhostname = senderhostname

说明:将self.senderhostname = senderhostname or socket.gethostname()修改成  self.senderhostname = senderhostname
senderhostname='node1011110'  这里的node1011110,是zabbix agentd中配置文件zabbix_agentd.conf中的Hostname的值

 rabbitmq服务器上添加zabbix_sender软链接

[root@node110 bin]# ln -s /usr/local/zabbix/bin/zabbix_sender /bin/zabbix_sender

rabbitmq服务器上修改zabbix_agentd.conf,添加ServerActive:

cat zabbix_agentd.conf
# Mandatory: no
# Default:
# ServerActive=
#ServerActive=127.0.0.1
ServerActive=10.1.1.200        #zabbix 服务端IP地址

  添加入监控模板选择
        


注意:

监控过程中有可能遇到问题解决:
查看debug日志,访问的地址与指定的地址不正确时解决方法如下
修改api.py文件中RabbitMQAPI类中call_api方法
把self.host_name改为rabbitmq服务器的地址,注意加单引号
zabbix监控服务器监控数据中有信息,但是为python报错,并且报错有401错误,此为登录认证失败,需要确认配置用户名密码正确

官方GITHUB:
https://github.com/jasonmcintosh/rabbitmq-zabbix

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS