如何使用Zabbix监控失败的rsync任务?

4

我有一个情况,需要通过Zabbix监控rsync作业是否执行失败。

我考虑在源文件中插入一个退出代码,并对其进行监控,但我还没有找到一个好的方法来实现这一点。

有人有任何想法可以帮助我实现这种监控吗?


你是作为守护进程(服务)运行rsync还是仅作为命令行? - Joao Vitorino
嗨,我有一个cron job,每24小时运行一次rsync。该脚本执行将几个目录备份到另一台机器上。 - AlimaSP
2个回答

7
我通过三个步骤解决了这个问题。
1 - 创建一个脚本,在cron上执行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

所以,如果您的日志文件没有改变或没有显示“状态=OK”消息,这意味着它们已经执行了错误(失败)或者它们没有运行(可能是cron问题)。抱歉英语不太好——使用has、have、they等词仍然让我感到困惑。

非常感谢,Joao。我会实现这个解决方案。 - AlimaSP

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 触发器的结果来看,每个检查都具有成功运行所需的期望值。在我看来,由于没有满足触发条件,所以该触发器不应该被触发。

另一个问题是,如果备份确实出了问题,但后来已经修复并且备份已经正常运行,触发器仍然没有被清除。

有人发现了什么问题吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接