Zabbix 通过不同维度监控 linux 服务
示例:监控 qwserv (Quorum Witness) 服务
基础监控:仅监控进程是否存在(如果进程挂了才报警)。
深度监控(推荐):监控服务的逻辑健康状态(例如:进程在运行,但无法响应集群请求或证书过期,这种情况基础监控发现不了,但深度监控可以)。
鉴于这是关键的仲裁服务,建议同时实施这两种监控。
方案一:基础监控(监控 systemd 服务状态)
适用场景:检测服务是否意外停止、崩溃或被误杀。
前提:使用 Zabbix Agent 2 (推荐) 或配置了
AllowKey=system.run[*] 的 Agent 。
1. Zabbix 前端配置
- 主机: 选择运行 qwserv 的主机。
- 创建监控项 (Item):
- 名称: Qwserv Service Status (Systemd)
- 类型: Zabbix agent
- 键值 (Key): systemd.service.run[qwserv]
- (注:如果是旧版 Agent,需配置需配置 AllowKey=systemd.run[*] 并使用 systemd.run["qwserv"])
- 信息类型: 数字 (无符号)
- 更新间隔: 60s
- 创建触发器 (Trigger):
- 名称: Qwserv Service is DOWN on {HOST.NAME}
- 表达式:
last(/192.168.100.242/systemd.service.run[qwserv]) = 0
方案二:深度监控(监控业务逻辑端口/连通性)
适用场景:检测服务是否“假死”(进程在但无法处理请求)、防火墙阻断或证书错误。
原理:qwserv 是一个监听端口的服务(通常监听 TCP 端口,如 8080 或自定义 HTTPS 端口)。我们从 Zabbix Server 或其他集群节点主动探测该端口。
1. 确认监听端口首先在服务器上确认
qwserv 监听的端口号:
ss -tlnp | grep qwserv # 或 netstat -tlnp | grep qwserv
假设输出显示监听在 TCP *:8080 。
2. Zabbix 前端配置
- 主机: 选择运行 qwserv 的主机 (SB193ABHCZC)。
- 创建监控项 (Item):
- 名称: Qwserv Service Port Check (TCP)
- 类型: Zabbix agent (主动式) -> 注意:这里选 "Zabbix agent (主动式)" 或者直接在 Server 端做简单检查
- 更简单的做法(无需 Agent):
- 类型: Zabbix agent (主动式) (如果 Zabbix Server 能直接访问该 IP)
- 键值 (Key): net.tcp.service[tcp,,<端口号>]
- 例如:net.tcp.service[tcp,,8080]
- 信息类型: 数字 (无正负) (1=Up, 0=Down)
- 更新间隔: 60s
- 创建触发器 (Trigger):
- 名称: Qwserv Service Port Unreachable on {HOST.NAME}
- 表达式:
last(/192.168.100.242/net.tcp.service[tcp,,8080])=0
方案三:高级监控(监控日志中的关键错误)
适用场景:检测证书过期、认证失败等逻辑错误,即使端口是通的。
1. 配置 Zabbix Agent 允许读取日志编辑
/etc/zabbix/zabbix_agentd.conf (或 .d/ 下的文件):
# 允许读取 qwserv 相关日志 (假设日志在 journalctl 或 /var/log/messages) # 如果是 journalctl,Agent 2 支持更好。如果是文件,确保 zabbix 用户有读权限。 # 这里以监控 syslog 中包含 qwserv 的错误为例
2. Zabbix 前端配置
- 创建监控项 (Item):
- 名称: Qwserv Service Error Logs
- 类型: Zabbix agent
- 键值 (Key): log[/var/log/messages,qwserv.*(error|fail|certificate expired),,,skip,]
- (注:如果您的系统使用 journalctl,且安装了 Agent 2,可以使用journald[qwserv,"error"])
- 信息类型: 日志 (Log)
- 创建触发器 (Trigger):
- 名称: Qwserv Service Critical Errors Detected
- 表达式:
strlen(last(/192.168.100.242/log[/var/log/messages,qwserv.*(error|fail|certificate expired),,,skip,])) > 0
- 含义: 只要日志中出现匹配到的错误字符串,立即告警。
🚀 综合实施建议(最佳实践)
为了构建最可靠的监控体系,建议您按以下组合配置:
监控维度 | 监控项 Key 示例 | 告警条件 | 目的 |
进程存活 | systemd.service.run[qwserv] | 值 = 0 | 防止进程崩溃、被杀 |
端口可达 | net.tcp.service[tcp,,4379] | 值 = 0 | 防止防火墙拦截、服务假死、绑定失败 |
日志错误 | `log[...,"error | expired"]` | 长度 > 0 |
快速操作清单:
- 确认端口:运行 ss -tlnp | grep qwserv 获取端口号(假设为 PORT)。
- 添加监控项 1:Key=systemd.service.run[qwserv],触发器 <> 1。
- 添加监控项 2:Key=net.tcp.service[tcp,,PORT],触发器 = 0。
- 测试:
这样配置后,无论 qwserv 出现何种类型的故障(进程挂掉、网络不通、配置错误),您都能在第一时间收到通知。