问题现象

近期在 Zabbix 监控系统中发现一个奇怪的现象:某台主机的 Agent Ping 告警频繁出现“问题已恢复”的通知,大约每 2-3 分钟就会重复一次。

典型告警信息如下:

Zabbix agent on HOST-A is unavailable for 10 minutes

明明 Agent 服务看起来正常运行,为什么会如此频繁地报“恢复”呢?

排查过程

第一步:确认现象特征

观察到的规律:

  • 告警级别为“一般”

  • 恢复间隔非常规律(约 2 分钟一次)

  • Agent 服务本身并未崩溃

这种“故障→恢复→故障→恢复”的周期性模式,通常不是 Agent 彻底宕机,而是连接不稳定监控逻辑问题导致的。

第二步:检查时间同步状态

时间不同步是 Zabbix 通信异常的常见原因之一。首先检查目标主机的时间同步状态:

timedatectl status

输出显示:

     NTP enabled: no
NTP synchronized: no

结论:主机的 NTP 时间同步服务未启用,系统时间存在偏差风险。

第三步:检查 NTP 服务

进一步查看 NTP 服务状态:

systemctl status ntpd

输出显示 inactive (dead),NTP 服务根本没有运行。

ntpq -p

返回 No association ID's found,确认没有配置任何时间同步源。

第四步:对比正常主机

检查同一环境中的另一台主机,其时间同步状态完全正常:

     NTP enabled: yes
NTP synchronized: yes

确认环境中有可用的内部 NTP 服务器(地址为 10.x.x.x)。

解决方案

配置 NTP 同步

  1. 编写 NTP 配置文件

sudo bash -c 'cat > /etc/ntp.conf << EOF
server 10.x.x.x iburst
restrict 10.x.x.x mask 255.255.255.255 nomodify notrap noquery
restrict 127.0.0.1
restrict -6 ::1
driftfile /var/lib/ntp/drift
logfile /var/log/ntp.log
EOF'
  1. 启动 NTP 服务并设置开机自启

sudo systemctl start ntpd
sudo systemctl enable ntpd
  1. 强制立即同步时间

sudo systemctl stop ntpd
sudo ntpdate -u 10.x.x.x
sudo systemctl start ntpd
  1. 验证同步状态

timedatectl status
ntpq -p

预期输出中应看到:

  • NTP synchronized: yes

  • ntpq -p 中 NTP 服务器地址前有 * 号(表示已成功同步)

  1. 重启 Zabbix Agent

sudo systemctl restart zabbix-agent

验证结果

配置完成后,观察到以下变化:

指标修复前修复后
NTP 服务状态inactiveactive (running)
NTP 同步状态noyes
时间偏差存在< 1ms
Zabbix 告警频率每 2-3 分钟一次停止

根本原因分析

Zabbix Server 与 Agent 之间的通信对时间同步有较高要求。当 Agent 主机时间不准确时,可能导致:

  • 监控数据时间戳验证失败

  • Server 与 Agent 之间的会话出现间歇性超时

  • Zabbix 内置的重试机制被反复触发,产生“故障-恢复”循环

配置 NTP 同步后,问题得到彻底解决。

经验总结

  1. 时间同步是监控系统的基础:建议所有被监控主机统一配置内部 NTP 服务器

  2. 检查时间同步应作为排障第一步:遇到 Zabbix 通信类问题时,优先检查 timedatectl status

  3. 定期巡检 NTP 状态:可通过 Zabbix 自身监控所有主机的 ntp.sync 状态,提前发现潜在问题

  4. 统一配置管理:建议通过 Ansible 等自动化工具批量确保所有服务器 NTP 配置一致

附录:常用 NTP 调试命令

# 查看时间同步状态
timedatectl status

# 查看 NTP 服务状态
systemctl status ntpd    # 使用 ntpd
systemctl status chronyd  # 使用 chrony

# 查看 NTP 同步详情
ntpq -p

# 手动同步时间
ntpdate -u <NTP_SERVER_IP>

# 查看系统时间
date

后记:本次排查解决后,建议同时对环境中其他主机进行 NTP 配置巡检,防患于未然。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐