【免费下载链接】community-templates
Zabbix Community Templates repository
导读
本文围绕 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 会拒绝执行。
此外还有两点环境要求:
- 目标主机必须安装 Zabbix Agent,且建议使用active(主动)模式——YAML 中
chronyc tracking、chronyc sources、chronyバージョン、chronyReach四个采集项的类型均为ZABBIX_ACTIVE,需要 Agent 主动向 Server/Proxy 上报,请确保 Server 端对应配置了主动检查监听; - 目标主机必须安装 chrony 与 chronyc 客户端,并且执行命令的系统用户(通常是 zabbix 用户)需要具备读取 chrony 状态的权限。由于
EnableRemoteCommands会放开命令执行面,建议仅在受控的内网监控环境开启,并关注该配置带来的安全暴露面。
导入与关联:三分钟接入监控
仓库为该模板提供了三个 Zabbix 版本的定义文件,按你的 Zabbix 版本选择:
| Zabbix 版本 | 文件 |
|---|---|
| 5.0 | template_chrony_accuracy_japanese.xml |
| 5.4 | template_chrony_accuracy_japanese.yaml |
| 6.0 | template_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} | 偏移阈值(小) | 50 | Text macro |
{$NTP_OFFSET_LARGE} | 偏移阈值(大) | 5000 | Text 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 item | Reference,Update: 0 |
| chronyバージョン | chronyc 版本号 | Zabbix agent (active) | system.run[chronyc -v],Update: 1h |
| NTP時刻差(ms) | NTP 时间与系统时间的差值 | Dependent item | Systemtime_ms,FLOAT,单位 ms,Update: 0 |
| NTPオフセット(長期平均) | 与 NTP 服务器的长期平均偏移 | Dependent item | RMSoffset,FLOAT,单位 ms,Update: 0 |
| NTP時刻差(方向) | NTP 时间与系统时间差的方向(fast/slow) | Dependent item | Systemtime,CHAR,Update: 0 |
| NTPポーリング間隔 | 与 NTP 服务器的同步轮询间隔 | Dependent item | Updateinterval,FLOAT,单位 s,Update: 0 |
| 同期状態 | 闰秒/同步状态 | Dependent item | LeapStatus,CHAR,Update: 0 |
| NTP階層 | 本机所处的 stratum 层级 | Dependent item | Stratum,Update: 0 |
| NTPオフセット | 与 NTP 服务器的当前偏移 | Dependent item | Lastoffset,FLOAT,单位 ms,Update: 0 |
| ネットワーク合計遅延 | 到 stratum-1 的总网络延迟 | Dependent item | Rootdelay,FLOAT,单位 ms,Update: 0 |
| chronyReach | 用 8 位二进制表示过去 8 次查询成功次数 | Zabbix agent (active) | system.run[chronyc sources\|grep \* \|awk '{print$5}'],Update: 10m |
| chronyc sources | chronyc sources 完整输出 | Zabbix agent (active) | system.run[chronyc sources],TEXT,Update: 10m |
| chronyc tracking | chronyc tracking 完整输出(主数据源) | Zabbix agent (active) | system.run[chronyc tracking],TEXT,Update: 10m |
全部依赖项都带有Application: chrony标签,便于按应用维度筛选与权限控制。
预处理器:从文本到数值的关键转换
依赖项的数据解析完全由 Zabbix 预处理器完成,理解这些步骤是调优该模板的前提。以Lastoffset(NTPオフセット)为例,YAML 中依次定义了三个处理步骤:
- REGEX 提取:
Last offset : (.*)→ 捕获组\1。chronyc tracking输出中该行为Last offset : +0.000123 seconds,正则从冒号后捕获数值部分; - RTRIM 裁剪:参数
seconds,去掉值尾部残留的seconds文本单位; - MULTIPLIER 放大:参数
1000,把 chrony 输出的秒单位乘以 1000 转为毫秒,与监控项单位ms对齐。
其余依赖项遵循同一套路,仅正则模式与裁剪参数不同(全部可从 YAML 定义 中核对):
| 监控项 key | REGEX 模式 | 后续处理 |
|---|---|---|
Lastoffset | Last offset : (.*) | RTRIMseconds→ MULTIPLIER 1000 |
RMSoffset | RMS offset :(.*) | RTRIMseconds→ MULTIPLIER 1000 |
Rootdelay | Root delay :(.*) | RTRIMseconds→ MULTIPLIER 1000 |
Systemtime_ms | System time :(.*) | RTRIMseconds {fast\|slow} of NTP time→ MULTIPLIER 1000 |
Systemtime | System time : (.*)再匹配(fast\|slow) | 用第二条 REGEX 二次提取方向词 |
LeapStatus | Leap status :(.*) | 直接输出 |
Reference | Reference ID : (.*) | LTRIMReference ID :(去前缀) |
Stratum | Stratum : (.*) | 直接输出 |
Updateinterval | Update 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 条触发器,导入后即可生效。从源码结构看,触发器全部挂载于依赖项之上:
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)。采用双向判断,偏移过大或过小均告警。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}宏需手动补充的分析。同期状態(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オフセット(当前偏移) | Lastoffset | BOLD_LINE(粗线) | 1A7C11(绿) |
| NTPオフセット(長期平均) | RMSoffset | BOLD_LINE | F63100(红) |
| NTP時刻差(ms) | Systemtime_ms | BOLD_LINE | 2774A4(蓝) |
将"当前瞬时偏移(Lastoffset)"与"长期平均偏移(RMSoffset)"以及"系统时间差(Systemtime_ms)"放在同一坐标系中,可以直观判断:瞬时值抖动是否收敛于长期均值、系统时间与 NTP 时间的偏离趋势,是判断 chrony 驯服(disciplining)质量最常用的可视化手段。
同目录模板选型:何时用 chrony,何时用 ntpq
Applications/NTP 目录下还提供了多个功能相近的模板,明确各自的适用边界有助于正确选型:
| 模板目录 | 数据源 | 适用场景 |
|---|---|---|
| template_chrony_accuracy_japanese(本文) | chronyc tracking / sources | 主机运行 chrony 且装有 Zabbix Agent |
| template_chrony_accuracy_english | chronyc tracking / sources | 同上,英文界面/命名偏好 |
| template_chrony_accuracy | chronyc tracking(grep + awk 逐项采集) | 同上,但每个指标独立执行命令,并附带proc.num[,chrony]进程数监控 |
| template_chrony_accuracy_1 | chronyc tracking / sources | 同上,较早的逐项采集实现(无 dependent item 架构) |
| template_ntp_accuracy | ntpq -p | 主机运行 ntpd(传统 NTP 守护进程) |
| template_ntp_accuracy_japanese | ntpq -p | ntpd 场景的日语版;另含基于{$NTP_IP}宏的远程 NTP 设备监控模式 |
可见,chrony 系列与 ntpq 系列的抉择本质上是chrony 与 ntpd 两种时间服务的抉择;而日语版、英语版仅差在界面文案。本文模板的差异化优势在于:以单一chronyc tracking命令为数据源、配合 dependent item 批量切分,采集效率与历史数据一致性优于template_chrony_accuracy_1等逐项 grep/awk 的实现。
常见问题与调优建议
- 监控项显示 "Not supported":优先检查
zabbix_agentd.conf中EnableRemoteCommands=1与UnsafeUserParameters=1是否生效(修改后需重启 zabbix-agent 服务);其次确认主机上存在chronyc可执行文件,且 zabbix 用户对其有执行权限。 - 主动检查数据不更新:确认 Agent 的主动检查(ServerActive/Server 配置)指向正确的 Server/Proxy,且模板监控项类型与 agent 模式匹配。
- INFO 级小阈值告警不触发:按上文分析补充定义
{$NTP_OFFSET_SMALL}宏(建议取值与{$NTP_OFFSET}一致,如 50),或直接在主机级覆盖为业务所需精度。 - 阈值个性化:不同业务的时钟精度要求差异很大——日志审计、数据库主从、证书有效性校验等场景对偏移敏感,可在主机宏中单独覆盖
{$NTP_OFFSET}/{$NTP_OFFSET_LARGE},无需改动模板。 - 安全加固:远程命令 + 非安全参数属于高权限配置,建议限制
system.run的使用范围(如通过用户参数白名单或仅对内网监控网段开放),并定期核查被监控主机上 chrony 配置(/etc/chrony.conf)的源列表与日志,与模板指标互为印证。 - 长期运维视角:结合
RMSoffset(长期平均)与Rootdelay(根延迟)判断是本地时钟漂移还是网络路径劣化;结合Stratum判断层级是否异常跳变;chronyReach持续低于255时说明查询存在丢失,应排查网络或源服务器健康度。
总结
chronyテンプレート(日语版 chrony 精度监控模板)通过一条chronyc tracking主采集链加九路依赖解析,将 NTP 同步质量拆解为偏移、长期均值、系统时间差、根延迟、层级、轮询间隔、同步状态与可达性等多维指标,并内置大小阈值两级偏移告警与失同步告警,配合三线精度趋势图,构成一套低成本、可告警、可溯源的时钟同步监控方案。结合本文对 YAML 源码 的逐项拆解,读者既可以开箱即用地部署监控,也能在理解预处理器与触发器机制后,针对自身业务灵活调整阈值与扩展监控维度。
【免费下载链接】community-templates
Zabbix Community Templates repository
相关推荐
Zabbix chrony 精度监控模板(template_chrony_accuracy_english)实战指南:基于 chronyc 采集 NTP 偏移、Stratum 与同步状态
Zabbix chrony 精度监控模板(template_chrony_accuracy_english)实战指南:基于 chronyc 采集 NTP 偏移、
Zabbix 监控实践:基于 chronyc 命令的 chrony NTP 精度监控模板详解
Zabbix 监控实践:基于 chronyc 命令的 chrony NTP 精度监控模板详解 本文以 Zabbix Community Templates 仓库
mathjs表达式解析器实战:一行代码求值任意数学公式,支持单位换算与复数运算
mathjs表达式解析器实战:一行代码求值任意数学公式,支持单位换算与复数运算 mathjs表达式解析器 (Expression Parser)是开源数学库 m
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考