1. 在zabbix_agent的配置文件中配置自定义key和脚本位置
vim /etc/zabbix/zabbix_agentd.conf
UserParameter=mq_check_log,/etc/zabbix/zabbix_agentd.d/mqlog.sh
mq_check_log:是这个自定义参数的名称。在Zabbix的监控项(item)配置中,你可以通过引用这个名称来调用这个脚本。
/etc/zabbix/zabbix_agentd.d/mqlog.sh:指定自定义脚本位置
2. 书写自定义脚本(我这边是自己收集的日志,只有错误消息才有时间戳,所以我过滤时间戳就行,过滤到时间戳后和当前时间对比,小于30分钟就告警(1),大于三十分钟就恢复(0))
#!/bin/bash
# 日志文件路径
LOGFILE="/home/sysadm/entrade-transwarp/MQ/log"
# 使用grep和awk等工具提取最新的告警时间戳
# 时间戳格式为 '%Y-%m-%d %H:%M:%S'
LATEST_ALERT_TIMESTAMP=$(cat /home/sysadm/entrade-transwarp/MQ/log/* |tac|grep -Eo '\b[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\b' |head -n 1)
# 检查是否成功找到时间戳
if [ -z "$LATEST_ALERT_TIMESTAMP" ]; then
echo "0" # 如果没有找到时间戳,则返回0(不告警)
exit 0
fi
# 获取当前时间戳
NOW=$(date '+%s')
# 将找到的告警时间戳转换为秒
LATEST_ALERT_SEC=$(date -d "$LATEST_ALERT_TIMESTAMP" '+%s')
# 计算时间差(秒)
DIFF=$((NOW - LATEST_ALERT_SEC))
# 如果时间差小于或等于1800秒(30分钟),则返回1(告警)
# 否则返回0(不告警)
if [ $DIFF -le 1800 ]; then
echo "1"
else
echo "0"
fi
3. 在zabbix_server端验证新建的监控项
[root@localhost bin]# pwd
/usr/local/zabbix/bin
[root@localhost bin]# ./zabbix_get -s 192.168.224.88 -k mq_check_log
0
abbix_get命令
-s 客户端ip地址
-p 客户端端口号(默认是10050)
-k 指定键值
4. 在zabbix网页端配置自定义监控项
配置-模版-创建模版
点击监控项-创建监控项
点击触发器 - 创建触发器