Zabbix监控ActiveMQ工具

介绍

最近学习使用go语言写了一个zabbix监控ActiveMQ的小工具,有如下特点:
1.使用Zabbix Agent Trapper方式(主动发送采集数据到zabbix server,类似active模式)监控Activemq状态
2.支持对密码加密,避免配置文件里出现明文密码
3.支持ActiveMQ基本状态/Queues/Topics状态监控
4.支持自定义采集周期
5.LLD(自动发现)添加Queues/Topics状态监控
工具通过访问ActimveMQ管理页面,登录之后抓取页面数据,进行采集

模版下载:https://dl.cactifans.com/zabbix/zabbix_template_activemq.tar.gz
脚本下载:https://dl.cactifans.com/zabbix/mqmon-0.0.1_linux_amd64.tar.gz

导入模版

在zabbix Server上导入导入模版,解压之前下载的模版。
导入模版文件:zbx_templates_activemq.xml
2
导入之后可以看到名为Template App ActiveMQ的模版,表示导入成功
3
Activemq作为中间件可以挂载到任何在zabbix server里的host上!!!**监控脚本不一定部署在真实的Activemq服务器之上**,只要脚本通过远程方式能连接到activemq管理页面即可。关联模版到需要挂载ActiveMQ监控的的host上即可。

配置插件

下载并解压插件

1
2
3
mkdir -p  /opt/mqmon
wget https://dl.cactifans.com/zabbix/mqmon-0.0.1_linux_amd64.tar.gz
tar zxvf mqmon-0.0.1_linux_amd64.tar.gz -C /opt/mymon

文件目录结构
├── control //启动脚本
├── mqmon //二进制程序
└── mqmon.json //配置文件
把密码写在明文的文件里不被推荐的,因此脚本提供了一个使用AES加密算法加密管理员密码的工具,保证管理员密码的安全。使用以下命令加密密码明文,将yourpassword替换为你的密码

1
/opt/mqmon/mqmon enc yourpassword

执行之后会看到进过加密后的密码密文。记录下来

1
2
/opt/mqmon/mqmon enc admin
sXcEQ2FTGk4WsWSxyT6fuBnjZ3v43pc0

修改配置文件mqmon.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"debug": true,
"interval":{
"status": 300,
"discovery": 300,
"metic": 60
},
"activemq": {
"username": "admin",
"password": "j1wqc+QGX2+7n/KOlEmNPZQsaWhmkqGQ",
"host": "172.16.66.16",
"port": 8161
},
"zabbix":{
"server": "zabbix.cactifans.com",
"port": 10051,
"hostname": "host135"
}
}

配置文件说明
interval 采集周期配置,单位为秒

status ativemq 基本信息采集周期,默认为300秒
discovery queues和topics自动发现周期,默认为300秒
metic queues和topics具体指标采集周期,默认为60秒

需要监控的Activemq信息配置

username activemq管理账号
passoword activemq用户密码加密后的密文
host activemq的主机
port activemq管理页面端口,默认为8161

zabbix信息配置

server 为zabbix server的地址,如通过zabbix proxy 需要设置为zabbix proxy的地址
port zabbix server端口默认为10051
hostname为之前关联模版的主机名一致

4

使用

配置需要监控的activemq的管理页面地址/端口/用户账号/密码信息之后,
可以启动插件,使用以下命令进行测试activemq是否能够连通

1
2
cd /opt/mqmon
./mqmon ping

可以看到使用的配置文件,如返回OK,表示配置信息正确,如其他表示连接异常,请检查配置文件及网络。

1
2
2018/08/20 12:58:44 ping.go:37: Using config file: /opt/mqmon.json  successfully!
OK

测试成功之后可以使用以下命令启动即可

1
./control start

常用操作

1
2
3
4
./control start    //启动应用
./control stop //停止应用
./control restart //重启应用
./control tail //查看日志

效果

5
6
7
8

扩展

自动发现数据结构

Queue自动发现规则数据(activemq.queues.discovery的数据)Demo

1
2
3
4
5
6
{
"data": [
{"{#QUEUENAME}": "demoRequest"},
{"{#QUEUENAME}": "demoResponse"}
]
}

Topic自动发现规则数据(activemq.topics.discovery的数据)Demo

1
2
3
4
5
6
7
{
"data": [
{"{#TOPICNAME}": "12312312"},
{"{#TOPICNAME}": "12312"},
{"{#TOPICNAME}": "23121"}
]
}

添加阈值

如需要对特定的Queue或topic添加阈值,可以根据以下方式配置
例子:假如要为demoRequest和demoResponse 2个Queue添加二个阈值,规则如下
1.demoRequest的Number Of Pending Messages 大于10告警
2.demoResponse的Number Of Pending Messages 大于5告警
3.其他queue 大于2告警
可进行如下配置:
在模版里添加如下规则
6
注意是在模版Discovery rules里的Trigger prototypes里添加如下触发器原型
标题

1
Queue {#QUEUENAME} PM > {$QUEUE_PM_LIMIT:"{#QUEUENAME}"}

表达式

1
{Template App ActiveMQ:activemq.queues.pm[{#QUEUENAME}].last()}>{$QUEUE_PM_LIMIT:"{#QUEUENAME}"}

创建之后,在关联的hosts上配置如下宏。宏可以配置在模版里,为了灵活性需要,建议配置到具体的主机上,可做到精确匹配

1
2
3
{$QUEUE_PM_LIMIT:demoRequest}     =>  10
{$QUEUE_PM_LIMIT:demoResponse} => 5
{$QUEUE_PM_LIMIT} => 2

如图
10
即可完成为不同queue配置不同的阈值的需求。

1
2
{#QUEUENAME}为Queue自动发现的数据,topic设置为{#TOPICNAME}
{$QUEUE_PM_LIMIT} 为自定义的宏,可以随意起名

11
关于具体的说明,可以看官方这里的列子:
https://www.zabbix.com/documentation/3.4/manual/discovery/low_level_discovery

命令行工具

工具内置几个命令行工具及基本使用,可以使用mqmon -h 查看帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost activemq-mymon]# ./mqmon
Zabbix activemq monitoring tool. For example:

mqmon daemon --config=./mqmon.json

Usage:
mqmon [command]

Available Commands:
daemon Running as a daemon
enc Encrypt passwords in AES mode
help Help about any command
ping Connected line checker
version Version

Flags:
--config string config file (default is /.mqmon.json)
-h, --help help for mqmon

Use "mqmon [command] --help" for more information about a command.

注意事项

1.trapper方式默认允许任何主机发送数据到zabbix server,建议通过设置宏的方式,在模版里配置allowed hosts配置权限
2.采集指标建议采用默认采集周期,缩短采集周期会对activemq页面产生一定压力

如果觉得我的文章对您有用,请关注我的公众号,有更多技术干货!
微信