如何使用Linux Trigger监控系统
小樊
44
2025-12-11 09:58:25
Linux Trigger 监控系统的落地方案
一 概念与总体架构
- 在 Linux 运维语境中,**Trigger(触发器)**通常指当某个条件满足时自动执行的操作,典型场景包括:
- 时间触发:按Cron或systemd Timers周期执行任务。
- 文件事件触发:基于inotify监听目录/文件的创建、修改、删除。
- 设备事件触发:通过Udev在设备插入/拔出时执行脚本。
- 服务状态触发:用systemd监控并响应服务状态变化。
- 监控平台触发:在 Zabbix 中由“触发器表达式”评估监控数据,满足条件时执行“动作”(告警、脚本、Webhook 等)。
- 建议的落地架构:
- 采集层:部署 Zabbix Agent 或 Node Exporter 采集主机与应用指标。
- 触发层:Zabbix 定义触发器表达式(如 CPU 利用率 > 80% 持续 5 分钟);或用系统级触发器(Cron/Inotify/Udev)执行本地自愈脚本。
- 告警层:Zabbix 动作对接 SMTP/PagerDuty/企业微信/钉钉/Webhook 等通道。
- 可视化层:Zabbix 前端或 Grafana 展示趋势与告警历史。
- 高可用:Zabbix Server 双机 + Keepalived VIP 保障监控与控制面连续性。
二 快速上手 Zabbix 触发器监控
- 安装与初始化
- 准备一台服务器部署 Zabbix Server + Web(后端用 MySQL/MariaDB),在被监控主机安装 Zabbix Agent;初始化 Web 向导,创建管理员账户,建立主机与监控项(如 system.cpu.util、vfs.fs.size 等)。
- 创建触发器
- 在 Zabbix 前端进入:Configuration → Hosts → Triggers → Create trigger,填写名称与表达式,例如:
- 表达式:
{host:system.cpu.util[,avg1].last()} > 80
- 描述:当 CPU 1 分钟平均利用率 > 80% 时触发。
- 可设置“严重性”“依赖关系”“事件恢复表达式”等,避免抖动与重复告警。
- 配置动作与告警
- 进入:Configuration → Actions → Create action,设置条件(如触发器=“CPU 高负载”)、操作(发送邮件/企业微信/钉钉/Webhook、执行远程命令)、恢复操作(告警恢复时通知)。
- 邮件示例:在 Zabbix Server 配置 SMTP,并在动作中使用
{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE} 等宏;脚本告警可将脚本放入 AlertScriptsPath 并在动作中调用。
- 验证
- 在目标主机制造压力(如
stress -c 2 持续数分钟),观察 Zabbix 前端是否产生问题事件、是否按动作发送通知与执行命令。
三 系统级触发器与脚本联动
- 时间触发
- Cron:编辑
crontab -e,如 0 * * * * /opt/scripts/cleanup.sh 每小时执行清理脚本。
- Systemd Timers:定义服务单元与定时器单元,例如每小时执行一次脚本,启用
mytimer.timer 即可由 systemd 管理调度与日志。
- 文件事件触发
- inotifywait:安装
inotify-tools 后监听目录,事件到来即执行脚本,适合配置下发、日志轮转、文件落盘即处理等场景。
- 设备事件触发
- Udev:编写规则匹配设备属性(如 idVendor/idProduct),在设备插入时执行脚本,用于自动化挂载、驱动加载、资产登记等。
- 服务状态触发
- systemd:用
systemctl status <service> 查看状态,结合监控平台或自定义脚本在异常时重启服务或上报事件。
四 高可用与告警通道实践
- 高可用
- 部署 Zabbix Server 主备 两台,使用 Keepalived 提供 VRRP 虚拟 IP(VIP),当主节点故障自动切换 VIP 到备机,保障监控与控制面不中断;数据库建议使用主从或集群,避免单点。
- 告警通道
- 邮件:配置 SMTP,在动作中使用宏发送主题与正文;脚本:将告警脚本放入 AlertScriptsPath,在动作中调用以执行本地修复或联动工单系统。
- 企业微信/钉钉/Webhook:在动作中使用 Webhook 或脚本调用其 API 发送 Markdown/卡片消息,便于与 IM/工单/值班平台打通。
五 排错与最佳实践
- 触发器不触发
- 检查监控项键值是否正确、是否有数据(Latest data)、触发器表达式与依赖关系是否合理、是否设置了“事件恢复表达式”与“OK 事件生成”。
- 动作未执行
- 核对动作条件、用户媒介(邮件/Webhook/脚本)是否配置、脚本路径与权限是否正确、Zabbix Server 与 Agent 连通性与防火墙策略。
- 误报与抖动
- 使用“评估窗口/次数”(如
avg(5m))与“依赖关系”,必要时设置“告警抑制/依赖主机”,减少连锁告警。
- 日志与审计
- Zabbix Server/Frontend/Proxy 日志位于系统日志或安装目录日志中;systemd 触发器使用
journalctl -u <unit> 排查;Cron 建议在 /etc/rsyslog.d/50-default.conf 中启用 cron.* /var/log/cron.log 并重启 rsyslog 以记录任务执行日志。