当前位置:首页>Linux>Zabbix 通过不同维度监控 linux 服务

Zabbix 通过不同维度监控 linux 服务

  • 2026-10-10 17:05:35
Zabbix 通过不同维度监控 linux 服务

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

快速操作清单:

  1. 确认端口:运行 ss -tlnp | grep qwserv 获取端口号(假设为 PORT)。
  2. 添加监控项 1:Key=systemd.service.run[qwserv],触发器 <> 1。
  3. 添加监控项 2:Key=net.tcp.service[tcp,,PORT],触发器 = 0。
  4. 测试:

这样配置后,无论 qwserv 出现何种类型的故障(进程挂掉、网络不通、配置错误),您都能在第一时间收到通知。

最新文章

随机文章