我有一个情况,需要通过Zabbix监控rsync作业是否执行失败。
我考虑在源文件中插入一个退出代码,并对其进行监控,但我还没有找到一个好的方法来实现这一点。
有人有任何想法可以帮助我实现这种监控吗?
我有一个情况,需要通过Zabbix监控rsync作业是否执行失败。
我考虑在源文件中插入一个退出代码,并对其进行监控,但我还没有找到一个好的方法来实现这一点。
有人有任何想法可以帮助我实现这种监控吗?
#!/bin/bash +x
# Put your own rsync command on line below
rsync -rlptv --delete-after root@serverA:/some_dir/ /another_dir/ > /lalla_dir/my.log
# Check if rsync was executed with success
if [ $? = 0 ];then
# If true, send a random number to log file and status=ok message
echo $[ 1 + $[ RANDOM % 1000 ]] >> /lalla_dir/my.log
echo "Status = OK" >> /lalla_dir/my.log
# If false, send a random number to log file and status=ERROR message
else
echo $[ 1 + $[ RANDOM % 1000 ]] >> /lalla_dir/my.log
echo "Status = ERROR" >> /lalla_dir/my.log
fi
2 - 在Zabbix上创建两个项目
A - 检查my.log的校验和(这就是为什么脚本必须具有随机数的原因,这样您可以确保自上次检查以来日志文件已被修改
Zabbix键
vfs.file.cksum[]
B - 检查日志文件是否存在OK消息。
Zabbix键
vfs.file.regmatch[/lalla_dir/my.log,Status = OK]
3 - 创建触发器。
{my-server:vfs.file.cksum[/lalla_dir/my.log].change()}=0
or
{my-server:vfs.file.regmatch[/lalla_dir/my.log,Status = OK].last()}=0
我正在尝试使用这种技术来监控一些备份日志。它们会打印出像这样的日志文件:
897
Status=OK,Message=
zabbix 触发器定义如下:
{svr1.xxxx.com:vfs.file.exists[/data/logs/db-backup.log].change()}=0 or {svr1.xxxx.com:vfs.file.cksum[/data/logs/db-backup.log].change()}=0 or {svr1.xxxx.com:vfs.file.regmatch[/data/logs/db-backup.log,Status=ERROR].last()}=1
备份脚本正常运行,每天早上4:10执行:
jbaptiste@svr1:/data/logs$ ls -lth
total 12K
-rw-r--r-- 1 root root 23 Mar 20 04:10 db-backup.log
而且zabbix每天早上5点检查日志文件,但它触发了备份似乎有问题:
Trigger: DB - Check backup last run status
Trigger status: PROBLEM
Trigger severity: Warning
Trigger URL:
Item values:
1. Backup file exists check (svr1.xxxx.com:vfs.file.exists[/data/logs/db-backup.log]): 1
2. Backup file checksum (svr1.xxxx.com:vfs.file.cksum[/data/logs/db-backup.log]): 1864703203
3. Backup run status code (svr1.xxxx.com:vfs.file.regmatch[/data/logs/db-backup.log,Status=ERROR]): 0
从 zabbix 触发器的结果来看,每个检查都具有成功运行所需的期望值。在我看来,由于没有满足触发条件,所以该触发器不应该被触发。
另一个问题是,如果备份确实出了问题,但后来已经修复并且备份已经正常运行,触发器仍然没有被清除。
有人发现了什么问题吗?