☰
Zabbix chrony 精度监控模板(日语版)实战:基于 chronyc 采集与依赖项解析实现 NTP 时间同步质量监控
2026/10/16 3:35:35 网站建设 项目流程

【免费下载链接】community-templates

Zabbix Community Templates repository

项目地址:https://gitcode.com/gh_mirrors/co/community-templates
点击查看免费下载

导读

本文围绕 community-templates 仓库中Applications/NTP/template_chrony_accuracy_japanese目录下的 Zabbix 监控模板展开,该模板是 chrony accuracy 英文版模板的日语本地化版本,用于对安装了 Zabbix Agent 与 chrony 时间服务的主机进行 NTP 同步精度监控。读完本文,你将掌握该模板的导入前提(zabbix_agentd.conf 远程命令开关)、13 个监控项的采集链路设计(master item + dependent item 的数据流架构)、REGEX/RTRIM/MULTIPLIER/OCTAL_TO_DECIMAL 预处理器的解析原理,以及源码中实际定义的三条告警触发器与一张精度趋势图,并可据此按需调整宏阈值投入生产使用。

模板概览:它监控什么、数据从哪里来

该模板的定位非常聚焦:完整采集chronyc tracking与chronyc sources命令输出中的全部精度信息,并量化为可绘制曲线、可触发告警的数值指标。模板定义文件 template_chrony_accuracy_japanese.yaml(Zabbix 6.0 导出格式)显示:

  • 模板内部标识:chrony_Monitoring-Japanese,显示名chronyテンプレート;
  • 所属模板组:自宅ラックテンプレート(Home Rack 模板组,作者个人化分组,导入后可按需移动);
  • 导出时间:2021-11-21,面向 Zabbix 6.0;
  • 与英文原版一一对应:英文版位于 Applications/NTP/template_chrony_accuracy_english/6.0/README.md,原文档中指向cat-app/ntp/chrony-accuracy-template-english的链接是作者个人站点路径,在仓库内对应的真实位置即上述英文版目录。

从数据源看,模板围绕 chrony 的两个核心诊断命令构建:

  • chronyc tracking:显示本机与 NTP 服务器的同步跟踪状态(当前偏移、长期平均偏移、系统时间差、根延迟、层级、同步状态等);
  • chronyc sources:显示所有配置的 NTP 源及其可达性、延迟、偏移、抖动;
  • chronyc -v:显示 chrony 客户端版本。

部署前置条件:必须开启 Agent 远程命令

原文档(README.md)明确强调:模板依赖 Zabbix Agent 的远程命令(system.run)能力,使用前必须修改zabbix_agentd.conf:

EnableRemoteCommands=1 UnsafeUserParameters=1

两个参数的作用与注意事项:

  • EnableRemoteCommands=1:允许 Zabbix Agent 执行system.run[...]远程命令。模板的全部 master item 都基于此机制,若未开启,所有监控项会直接返回 "Not supported";
  • UnsafeUserParameters=1:允许定义包含特殊字符(管道符、通配符、重定向等)的用户参数/远程命令。模板中如system.run[chronyc sources|grep \* |awk '{print$5}']这类带管道与*的命令必须依赖此开关,否则 Agent 会拒绝执行。

此外还有两点环境要求:

  1. 目标主机必须安装 Zabbix Agent,且建议使用active(主动)模式——YAML 中chronyc tracking、chronyc sources、chronyバージョン、chronyReach四个采集项的类型均为ZABBIX_ACTIVE,需要 Agent 主动向 Server/Proxy 上报,请确保 Server 端对应配置了主动检查监听;
  2. 目标主机必须安装 chrony 与 chronyc 客户端,并且执行命令的系统用户(通常是 zabbix 用户)需要具备读取 chrony 状态的权限。由于EnableRemoteCommands会放开命令执行面,建议仅在受控的内网监控环境开启,并关注该配置带来的安全暴露面。

导入与关联:三分钟接入监控

仓库为该模板提供了三个 Zabbix 版本的定义文件,按你的 Zabbix 版本选择:

Zabbix 版本文件
5.0template_chrony_accuracy_japanese.xml
5.4template_chrony_accuracy_japanese.yaml
6.0template_chrony_accuracy_japanese.yaml

导入流程与常规 Zabbix 模板一致:在 Zabbix 前端依次进入Data collection → Templates → Import,上传对应版本的定义文件即可。随后将模板链接到受监控主机(Configuration → Hosts → 主机 Templates 栏添加chronyテンプレート),并确保该主机配置了正确的 Zabbix Agent 主动检查参数。

模板不含任何 Template links 与 Discovery rules(低级别自动发现),因此导入后无需额外等待发现规则运行,监控项会直接开始采集。

核心架构:一条主采集链 + 九路依赖解析

该模板最值得借鉴的设计是master item(主采集项)与 dependent item(依赖项)相结合的数据流架构。YAML 中chronyc tracking(system.run[chronyc tracking],更新间隔 10 分钟,TEXT 类型,保留 60 天历史)作为唯一主数据源,一次性拉取整份 tracking 报告;其余九个精度指标全部注册为DEPENDENT类型、delay: '0'(不单独轮询),通过 master item 的 key 挂载在其下:

system.run[chronyc tracking](10m 拉取一次) ├── Lastoffset NTPオフセット(当前偏移) ├── RMSoffset NTPオフセット(長期平均)(长期平均偏移) ├── Rootdelay ネットワーク合計遅延(根延迟) ├── Systemtime_ms NTP時刻差(ms)(系统时间差) ├── Systemtime NTP時刻差(方向)(时间差方向) ├── LeapStatus 同期状態(闰秒状态) ├── Reference NTP同期サーバ(参考源 ID) ├── Stratum NTP階層(层级) └── Updateinterval NTPポーリング間隔(轮询间隔)

这一设计的收益在于:一次命令执行、一次网络传输,即可在 Server 端通过预处理器切分出多个独立指标,极大降低 Agent 端执行负担与网络开销;同时各指标可独立设置值类型、单位、趋势保留与告警阈值。

其余三条采集链:

  • system.run[chronyc sources](10 分钟,TEXT):保留完整的 NTP 源列表原始输出,便于事后人工排查;
  • system.run[chronyc sources|grep \* |awk '{print$5}'](10 分钟):通过管道提取当前同步源(*标记行)的第 5 列 reach 值,并做八进制转十进制预处理(见下文);
  • system.run[chronyc -v](1 小时,CHAR):采集 chronyc 版本号,便于版本溯源。

宏(Macros)详解与阈值调整

README 的宏表完整列出模板定义的两个宏:

宏名说明默认值类型
{$NTP_OFFSET}偏移阈值(小)50Text macro
{$NTP_OFFSET_LARGE}偏移阈值(大)5000Text macro

两个宏默认值分别对应50ms与5000ms的偏移告警边界。需要特别留意一个源码级细节(可从 template_chrony_accuracy_japanese.yaml 的触发器表达式推断):NTPオフセット(Lastoffset)的小阈值触发器表达式引用的是{$NTP_OFFSET_SMALL},而宏表中并未定义该宏,只定义了{$NTP_OFFSET}(默认 50)与{$NTP_OFFSET_LARGE}(默认 5000)。也就是说,模板作者在设计上以{$NTP_OFFSET}作为"小偏移"参考值,但触发器实际书写的是{$NTP_OFFSET_SMALL}——若你的环境未在模板级或主机级补充定义{$NTP_OFFSET_SMALL},该 INFO 级触发器可能因宏未解析而无法正常触发。建议在主机宏或模板宏中显式补充:

{$NTP_OFFSET_SMALL} = 50

以与{$NTP_OFFSET}的语义保持一致,并根据实际业务对时间精度的要求调整(如金融、日志审计类场景可将小阈值收紧到 5~10ms)。

监控项(Items)全表与预处理器原理

以下是模板采集的 13 个监控项全景(对齐 README 表格并补充源码中的值类型、单位与预处理器信息):

监控项名称说明类型Key 与补充信息
NTP同期サーバ当前参考同步源(Reference ID)Dependent itemReference,Update: 0
chronyバージョンchronyc 版本号Zabbix agent (active)system.run[chronyc -v],Update: 1h
NTP時刻差(ms)NTP 时间与系统时间的差值Dependent itemSystemtime_ms,FLOAT,单位 ms,Update: 0
NTPオフセット(長期平均)与 NTP 服务器的长期平均偏移Dependent itemRMSoffset,FLOAT,单位 ms,Update: 0
NTP時刻差(方向)NTP 时间与系统时间差的方向(fast/slow)Dependent itemSystemtime,CHAR,Update: 0
NTPポーリング間隔与 NTP 服务器的同步轮询间隔Dependent itemUpdateinterval,FLOAT,单位 s,Update: 0
同期状態闰秒/同步状态Dependent itemLeapStatus,CHAR,Update: 0
NTP階層本机所处的 stratum 层级Dependent itemStratum,Update: 0
NTPオフセット与 NTP 服务器的当前偏移Dependent itemLastoffset,FLOAT,单位 ms,Update: 0
ネットワーク合計遅延到 stratum-1 的总网络延迟Dependent itemRootdelay,FLOAT,单位 ms,Update: 0
chronyReach用 8 位二进制表示过去 8 次查询成功次数Zabbix agent (active)system.run[chronyc sources\|grep \* \|awk '{print$5}'],Update: 10m
chronyc sourceschronyc sources 完整输出Zabbix agent (active)system.run[chronyc sources],TEXT,Update: 10m
chronyc trackingchronyc tracking 完整输出(主数据源)Zabbix agent (active)system.run[chronyc tracking],TEXT,Update: 10m

全部依赖项都带有Application: chrony标签,便于按应用维度筛选与权限控制。

预处理器:从文本到数值的关键转换

依赖项的数据解析完全由 Zabbix 预处理器完成,理解这些步骤是调优该模板的前提。以Lastoffset(NTPオフセット)为例,YAML 中依次定义了三个处理步骤:

  1. REGEX 提取:Last offset : (.*)→ 捕获组\1。chronyc tracking输出中该行为Last offset : +0.000123 seconds,正则从冒号后捕获数值部分;
  2. RTRIM 裁剪:参数seconds,去掉值尾部残留的seconds文本单位;
  3. MULTIPLIER 放大:参数1000,把 chrony 输出的秒单位乘以 1000 转为毫秒,与监控项单位ms对齐。

其余依赖项遵循同一套路,仅正则模式与裁剪参数不同(全部可从 YAML 定义 中核对):

监控项 keyREGEX 模式后续处理
LastoffsetLast offset : (.*)RTRIMseconds→ MULTIPLIER 1000
RMSoffsetRMS offset :(.*)RTRIMseconds→ MULTIPLIER 1000
RootdelayRoot delay :(.*)RTRIMseconds→ MULTIPLIER 1000
Systemtime_msSystem time :(.*)RTRIMseconds {fast\|slow} of NTP time→ MULTIPLIER 1000
SystemtimeSystem time : (.*)再匹配(fast\|slow)用第二条 REGEX 二次提取方向词
LeapStatusLeap status :(.*)直接输出
ReferenceReference ID : (.*)LTRIMReference ID :(去前缀)
StratumStratum : (.*)直接输出
UpdateintervalUpdate interval :(.*)RTRIMseconds

chronyReach则是唯一使用算术类预处理器的监控项:命令chronyc sources|grep \* |awk '{print$5}'提取当前同步源行的 reach 字段(如377,为八进制表示的 8 位可达性位图,每位代表过去一次查询的成败),随后经OCTAL_TO_DECIMAL预处理器转为十进制(377→255),供趋势与告警使用。README 对该字段的释义为"以 8 位二进制表示过去 8 次查询的成功次数"。

说明:Systemtime_ms与Systemtime共享同一行System time的原始数据,但通过不同的正则与处理链分别产出"数值(ms)"与"方向(fast/slow)"两个指标,是"一份原始数据多路解析"的典型示例。

触发器(Triggers):README 未记载的告警逻辑

需要指出的是,README 的 "Triggers" 一节写的是There are no triggers in this template,但这是文档滞后于实现的描述——实际 YAML 定义文件中明确包含 3 条触发器,导入后即可生效。从源码结构看,触发器全部挂载于依赖项之上:

  1. NTPオフセット(Lastoffset)大阈值告警(WARNING):

    last(/chrony_Monitoring-Japanese/Lastoffset)>{$NTP_OFFSET_LARGE} or last(/chrony_Monitoring-Japanese/Lastoffset)<-{$NTP_OFFSET_LARGE}

    名称:上位NTPとのずれが{$NTP_OFFSET_LARGE}msを超えました(与上级 NTP 的偏差超过 5000ms)。采用双向判断,偏移过大或过小均告警。

  2. NTPオフセット(Lastoffset)小阈值告警(INFO):

    last(/chrony_Monitoring-Japanese/Lastoffset)>{$NTP_OFFSET_SMALL} or last(/chrony_Monitoring-Japanese/Lastoffset)<-{$NTP_OFFSET_SMALL}

    名称:上位NTPとのずれが{$NTP_OFFSET_SMALL}msを超えました。且该触发器在定义中显式依赖(dependency)于大阈值触发器——即小偏移告警会继承大偏移告警的故障状态,避免同一偏移异常同时触发 INFO 与 WARNING 两级告警造成通知轰炸,只有大阈值未触发时 INFO 才会独立告警。这也再次印证上文对{$NTP_OFFSET_SMALL}宏需手动补充的分析。

  3. 同期状態(LeapStatus)失同步告警(WARNING,类型 MULTIPLE):

    find(/chrony_Monitoring-Japanese/LeapStatus,,"regexp","Not synchronized")<>0

    名称:NTPサーバーと同期していません。(未与 NTP 服务器同步)。find函数对Not synchronized做正则匹配,一旦同步状态变为未同步即触发。MULTIPLE类型意味着该触发器允许多次触发(周期性问题场景下每次出现都会重新告警)。

LeapStatus 的取值含义(模板描述原文):Normal正常、Insert second插入闰秒、Delete second删除闰秒、Not synchronized未同步。

图表(Graphs):精度三线趋势图

YAML 末尾定义了一张名为chrony NTP精度情報的图表,将三个核心偏移指标叠加展示:

曲线监控项线型颜色
NTPオフセット(当前偏移)LastoffsetBOLD_LINE(粗线)1A7C11(绿)
NTPオフセット(長期平均)RMSoffsetBOLD_LINEF63100(红)
NTP時刻差(ms)Systemtime_msBOLD_LINE2774A4(蓝)

将"当前瞬时偏移(Lastoffset)"与"长期平均偏移(RMSoffset)"以及"系统时间差(Systemtime_ms)"放在同一坐标系中,可以直观判断:瞬时值抖动是否收敛于长期均值、系统时间与 NTP 时间的偏离趋势,是判断 chrony 驯服(disciplining)质量最常用的可视化手段。

同目录模板选型:何时用 chrony,何时用 ntpq

Applications/NTP 目录下还提供了多个功能相近的模板,明确各自的适用边界有助于正确选型:

模板目录数据源适用场景
template_chrony_accuracy_japanese(本文)chronyc tracking / sources主机运行 chrony 且装有 Zabbix Agent
template_chrony_accuracy_englishchronyc tracking / sources同上,英文界面/命名偏好
template_chrony_accuracychronyc tracking(grep + awk 逐项采集)同上,但每个指标独立执行命令,并附带proc.num[,chrony]进程数监控
template_chrony_accuracy_1chronyc tracking / sources同上,较早的逐项采集实现(无 dependent item 架构)
template_ntp_accuracyntpq -p主机运行 ntpd(传统 NTP 守护进程)
template_ntp_accuracy_japanesentpq -pntpd 场景的日语版;另含基于{$NTP_IP}宏的远程 NTP 设备监控模式

可见,chrony 系列与 ntpq 系列的抉择本质上是chrony 与 ntpd 两种时间服务的抉择;而日语版、英语版仅差在界面文案。本文模板的差异化优势在于:以单一chronyc tracking命令为数据源、配合 dependent item 批量切分,采集效率与历史数据一致性优于template_chrony_accuracy_1等逐项 grep/awk 的实现。

常见问题与调优建议

  1. 监控项显示 "Not supported":优先检查zabbix_agentd.conf中EnableRemoteCommands=1与UnsafeUserParameters=1是否生效(修改后需重启 zabbix-agent 服务);其次确认主机上存在chronyc可执行文件,且 zabbix 用户对其有执行权限。
  2. 主动检查数据不更新:确认 Agent 的主动检查(ServerActive/Server 配置)指向正确的 Server/Proxy,且模板监控项类型与 agent 模式匹配。
  3. INFO 级小阈值告警不触发:按上文分析补充定义{$NTP_OFFSET_SMALL}宏(建议取值与{$NTP_OFFSET}一致,如 50),或直接在主机级覆盖为业务所需精度。
  4. 阈值个性化:不同业务的时钟精度要求差异很大——日志审计、数据库主从、证书有效性校验等场景对偏移敏感,可在主机宏中单独覆盖{$NTP_OFFSET}/{$NTP_OFFSET_LARGE},无需改动模板。
  5. 安全加固:远程命令 + 非安全参数属于高权限配置,建议限制system.run的使用范围(如通过用户参数白名单或仅对内网监控网段开放),并定期核查被监控主机上 chrony 配置(/etc/chrony.conf)的源列表与日志,与模板指标互为印证。
  6. 长期运维视角:结合RMSoffset(长期平均)与Rootdelay(根延迟)判断是本地时钟漂移还是网络路径劣化;结合Stratum判断层级是否异常跳变;chronyReach持续低于255时说明查询存在丢失,应排查网络或源服务器健康度。

总结

chronyテンプレート(日语版 chrony 精度监控模板)通过一条chronyc tracking主采集链加九路依赖解析,将 NTP 同步质量拆解为偏移、长期均值、系统时间差、根延迟、层级、轮询间隔、同步状态与可达性等多维指标,并内置大小阈值两级偏移告警与失同步告警,配合三线精度趋势图,构成一套低成本、可告警、可溯源的时钟同步监控方案。结合本文对 YAML 源码 的逐项拆解,读者既可以开箱即用地部署监控,也能在理解预处理器与触发器机制后,针对自身业务灵活调整阈值与扩展监控维度。

【免费下载链接】community-templates

Zabbix Community Templates repository

项目地址:https://gitcode.com/gh_mirrors/co/community-templates
点击查看免费下载
上一篇:如何在5分钟内使用Gradio为BentoML AI模型构建专业Web界面
下一篇:彻底搞懂Vue.js实现原理:从响应式到虚拟DOM的完整指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询