You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Zabbix的vfs.file.exists键验证MySQL备份文件存在性?

解决Zabbix监控MySQL昨日备份文件存在性的问题

这问题我之前帮同事排查过,核心原因是Zabbix内置键的参数并不支持直接解析Shell命令替换——你写的$(date -d "yesterday" +%Y-%m-%d)会被当作路径的一部分直接传递,而不是被解析成实际的日期字符串,导致检查的路径根本不存在,监控自然失效。下面给你两种靠谱的解决办法:

方法一:直接用Zabbix用户自定义参数(最简洁)

Zabbix的UserParameter允许我们在Agent端执行自定义Shell命令,完美适配这种动态路径的检查需求:

  1. 修改Zabbix Agent配置文件
    打开Agent的配置文件(通常路径是/etc/zabbix/zabbix_agentd.conf),添加以下配置:

    UserParameter=mysql.backup.check,test -f /data/backup/mysql-$(date -d "yesterday" +%Y-%m-%d).sql && echo 1 || echo 0
    

    这个命令的逻辑是:检查昨日备份文件是否存在,存在返回1(布尔真),不存在返回0(布尔假),完全符合Zabbix的数值型监控要求。

  2. 重启Zabbix Agent服务
    让配置生效:

    systemctl restart zabbix-agent
    
  3. 在Zabbix前端配置监控项
    创建新的监控项,参数设置:

    • 键值:mysql.backup.check
    • 类型:Zabbix agent
    • 信息类型:数字(布尔)
    • 更新间隔:设置为1d,并调整执行时间到每日00:01(或者直接用前端的调度功能指定执行时间)

方法二:用自定义脚本实现(更灵活,适合复杂场景)

如果后续需要扩展备份检查的逻辑(比如同时检查文件大小、修改时间),可以写一个独立的Shell脚本:

  1. 编写检查脚本
    创建脚本文件/usr/local/bin/check_mysql_backup.sh,内容如下:

    #!/bin/bash
    # 生成昨日备份文件的路径
    BACKUP_FILE="/data/backup/mysql-$(date -d "yesterday" +%Y-%m-%d).sql"
    # 检查文件是否存在
    if [ -f "$BACKUP_FILE" ]; then
        echo 1
    else
        echo 0
    fi
    
  2. 给脚本添加执行权限

    chmod +x /usr/local/bin/check_mysql_backup.sh
    
  3. 配置Zabbix Agent的UserParameter
    同样在zabbix_agentd.conf里添加:

    UserParameter=mysql.backup.check,/usr/local/bin/check_mysql_backup.sh
    
  4. 重启Agent并配置前端监控项
    步骤和方法一一致,这里就不重复了。

验证配置是否生效

在Agent服务器上手动执行以下命令,验证自定义参数是否正常工作:

zabbix_agentd -t mysql.backup.check

如果昨日备份存在,会返回类似mysql.backup.check [t|1]的结果;不存在则返回mysql.backup.check [t|0],说明配置没问题。

内容的提问来源于stack exchange,提问作者loong576

火山引擎 最新活动