如何利用正则提取日志内容实现Zabbix监控及异常告警?
日志提取与Zabbix监控告警实现方案
1. 正则表达式编写
针对你的日志结构,可使用以下PCRE正则精准提取每个检查项的名称和对应详情信息(支持跨多行匹配):
^===== (\S.*?)\s*=====\s*(?:.*\n)*?Details: \[(\w+)\] (.*)$
^===== (\S.*?)\s*=====:匹配检查项标题行,捕获标题文本(如Backup Failures)\s*(?:.*\n)*?:非贪婪匹配标题到Details行之间的所有内容,避免跨区块误匹配Details: \[(\w+)\] (.*)$:匹配详情行,捕获状态标签(OK/CRITICAL等)和具体描述
2. Zabbix监控项配置
方式一:自动发现所有检查项(推荐)
创建日志监控项,利用正则捕获组自动生成对应检查项的监控键:
log[/path/to/your/target/log,"^===== (\S.*?)\s*=====\s*(?:.*\n)*?Details: \[(\w+)\] (.*)$",,,,\1]
- 替换
/path/to/your/target/log为实际日志文件路径 - 最后一个参数
\1会将捕获的检查项名称作为监控键后缀,最终生成如log[/path/to/log].Backup Failures的监控项
方式二:单独配置单个检查项
如果需要针对特定检查项单独监控,可编写专属正则,比如针对Zombie Services:
log[/path/to/your/target/log,"^===== Zombie Services\s*=====\s*(?:.*\n)*?Details: \[(\w+)\] (.*)$"]
3. 告警触发器配置
创建触发器,当监控项捕获的状态非OK时触发告警:
单检查项触发器示例:
{Your_Hostname:log[/path/to/log].Zombie Services.str(OK)}=0
批量检查项触发器示例(适配自动发现的监控项):
{Your_Hostname:log[/path/to/log].*[regexp("\[CRITICAL\]|\[ERROR\]")].strlen()}>0
- 替换
Your_Hostname为你的Zabbix主机名 - 设置合适的告警级别(如CRITICAL对应严重故障),并配置恢复条件为状态回到
OK时自动清除告警
4. 验证测试
- 修改日志文件,手动写入非
OK状态的检查项条目,确认Zabbix能正确捕获并触发告警 - 查看监控项的历史数据,验证提取的内容与预期一致
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

