首先,在MQ上创建消息队列“Zabbix监控”
然后分别创建报警媒介-用户-动作
报警媒介:
Linux自带python环境,所以只需要装个pip环境和pika库就行,我是ubuntu,这是命令:sudo apt install python3-pip,pip3 install pika
脚本名称:自定义,配置媒介时名称需保持一致,位置在zabbix服务器这个目录下:/usr/lib/zabbix/alertscripts/
脚本内容:
#!/usr/bin/python3
import sys
import pika
import json# 解析命令行参数
recipient = sys.argv[1] if len(sys.argv) > 1 else '发送内容为空'# RabbitMQ服务器的连接信息
credentials = pika.PlainCredentials(username='mq用户名', password='mq密码')
parameters = pika.ConnectionParameters(host='mq的ip', port=5672, credentials=credentials)# 建立连接
connection = pika.BlockingConnection(parameters)
channel = connection.channel()# 获取所有命令行参数(除了脚本路径)
args = sys.argv[2:]# 构造消息体
data = {}
for idx, arg in enumerate(args):
# 参数名 PARAM1, PARAM2, ...
key = f"PARAM{idx + 1}"
data[key] = arg# 定义消息队列名称
queue_name = 'Zabbix监控'# 报警信息
alert_message = f"这是一个消息,发送给收件人: {recipient}"# 将报警信息转换为JSON格式并推送到消息队列
channel.queue_declare(queue=queue_name, durable=True)
channel.basic_publish(exchange='', routing_key=queue_name, body=json.dumps(data, ensure_ascii=False).encode('utf-8'))
print(f" Sent [MQ] {alert_message}")
# 打印log(调试用)
with open('/var/log/zabbix/zabbix_server.log', 'a') as log_file:
log_file.write(f" Sent [MQ] {alert_message}\n")
# 关闭连接
connection.close()
记住:报警媒介的参数如果填一般的宏如{HOST.IP}、{HOST.NAME}、{EVENT.NAME}MQ收到的消息还是{HOST.IP}、{HOST.NAME}、{EVENT.NAME}如下:
此处能用的宏是这三个{ALERT.MESSAGE} → “默认消息”;{ALERT.SENDTO} → “收件人”;{ALERT.SUBJECT} → “默认主题”
如果想发送{HOST.IP}、{HOST.NAME}、{EVENT.NAME}这些宏的值,只需要在下图中的“主题”和“消息”处配置就行:
至于收件人去哪了,它在:
用户:
配置用户,关联媒介并给它个权限
动作:
配置-动作-Trigger actions 选择一个报警动作,关联媒介和用户