拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Telegraf OpenNTPD Input 插件:用 ntpctl 采集 OpenNTPD 对等节点、传感器与时钟同步状态

Telegraf OpenNTPD Input 插件用 ntpctl 采集 OpenNTPD 对等节点、传感器与时钟同步状态【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf本篇指南基于 Telegraf 仓库中的 openntpd input 插件文档 及其源码实现讲解如何通过ntpctl命令采集 OpenNTPD 的 NTP 同步质量指标从插件配置、权限方案组权限 / sudo到openntpd、openntpd_sensors、openntpd_status三类指标的字段含义与解析原理。读完后你可以将该插件部署到使用 OpenBSD/NetBSD 系时间服务的服务器上并结合源码理解ntpctl -s all输出是如何被逐行解析成 Telegraf 指标的。插件工作原理该插件通过执行 OpenNTPD 自带的ntpctl命令来采集指标。从源码看openntpd.go实际执行的命令固定为ntpctl -s all其中-s all表示同时输出状态摘要行、peer对等节点段与 sensor硬件/GPS 传感器段。插件随后用bufio.Scanner按行扫描输出根据peer/sensor这两个段标题维护一个 section 状态机把摘要行交给parseStatusLinepeer 双行条目交给parsePeersensor 双行条目交给parseSensorGather 实现。[!NOTE]ntpctl二进制必须存在于系统上并可被 Telegraf 执行。插件支持通过sudo执行见下文权限配置。插件标签server, network平台all自 Telegraf v1.12.0 引入。配置项说明完整配置示例见插件随附的 sample.conf# Get standard NTP query metrics from OpenNTPD. [[inputs.openntpd]] ## Run ntpctl binary with sudo. # use_sudo false ## Location of the ntpctl binary. # binary /usr/sbin/ntpctl ## Maximum time the ntpctl binary is allowed to run. # timeout 5s各配置项与默认值默认值由 插件注册代码 中的init()函数设定配置项类型默认值说明binarystring/usr/sbin/ntpctlntpctl二进制路径OpenBSD 上通常位于此处可按发行版调整use_sudoboolfalse是否以sudo包装执行命令timeoutduration5s允许ntpctl运行的最长时间超时后进程会被终止关于timeout的底层实现插件调用 internal.RunTimeout超时后通过 WaitTimeout 先向进程及其子进程发送SIGTERM再给予 5 秒KillGrace宽限期后SIGKILL并返回ErrTimeout错误避免采集被卡死的命令拖住整个 agent 轮次。插件还支持 Telegraf 全局的插件级配置指标/字段/标签过滤、别名、插件排序等详见 CONFIGURATION.md。权限配置ntpctl通常需要访问 OpenNTPD 的 socket 才能执行成功因此运行 Telegraf 的用户往往需要额外权限。文档推荐两种方式可按环境任选其一。方式一组权限推荐将telegraf用户加入ntpd组$ groups telegraf telegraf : telegraf $ usermod -a -G ntpd telegraf $ groups telegraf telegraf : telegraf ntpd修改组后需重启 Telegraf 服务使新组身份生效。方式二sudo 提权在 Telegraf 配置中启用 sudo[[inputs.openntpd]] use_sudo true从源码看openntpdRunner启用后实际执行的命令为sudo binary -s all。同时更新 sudoers$ visudo追加Cmnd_Alias NTPCTL /usr/sbin/ntpctl telegraf ALL(ALL) NOPASSWD: NTPCTL Defaults!NTPCTL !logfile, !syslog, !pam_session三条 sudoers 规则的作用Cmnd_Alias把ntpctl路径归组NOPASSWD允许免密执行Defaults!NTPCTL !...关闭该命令的日志与 PAM session 开销。两种方式中请选用你认为最合适的方案。指标详解1. openntpd —— 每个对等节点一条指标ntpctl -s all的 peer 段中每个节点占两行第一行为地址/DNS 名如212.129.9.36 from pool 0.debian.pool.ntp.org第二行为统计行wt tl st next poll offset delay jitter。插件按列索引peerTagI/peerFloatI/peerIntI 映射提取字段标签tagsremote远端对等节点地址或主机名stratum远端节点的层stratumstate_prefixntpctl 状态指示符如活跃 peer 前的*不存在时省略字段fieldsdelay到远端 peer 的往返延迟毫秒floatjitter远端 peer 的平均偏差/jitter毫秒floatoffset对远端 peer 的平均相位偏移毫秒floatpoll轮询间隔秒intnext距下次轮询的秒数intwtpeer 权重inttlpeer trust levelint几个值得注意的解析细节均可在 parsePeer 中找到对应逻辑并有测试覆盖无效 peer统计行呈---- peer not valid ----时offset/delay/jitter会被跳过只保留wt/tl/next/pollstratum标签为-DNS 解析失败第一行形如not resolved from pool pool.nl.ntp.org时插件取该行最后一个字段作为remote标签保留原始 DNS 名而非not解析逻辑由 TestParseSimpleOutputServersDNSError 验证单位剥离next/poll的s后缀、offset/delay/jitter的ms后缀都会被TrimSuffix去掉后按数值解析活跃 peer统计行首字段包含*时记入state_prefix标签并整体后移一列保证列索引不错位。2. openntpd_sensors —— 每个硬件/GPS 传感器一条指标传感器段如nmea0 GPS的 GPS 时间源每条同样为双行结构解析逻辑见 parseSensor标签sensor传感器设备名如nmea0refid传感器参考 ID如GPSstate_prefix状态指示符如活跃传感器前的*不存在时省略字段wt传感器权重intgdgood 计数intststratumintnext距下次轮询秒数intpoll轮询间隔秒intoffset传感器偏移毫秒floatcorrection传感器修正量毫秒float3. openntpd_status —— 每次采集的系统级摘要ntpctl -s all的第一行形如12/12 peers valid, 1/1 sensors valid, constraint offset -1s, clock synced, stratum 1parseStatusLine 以,切分后逐项识别每次 gather 产出一条指标peers_valid/peers_total当前有效 / 已配置的 peer 总数由12/12分数解析sensors_valid/sensors_total当前有效 / 已配置的传感器数constraint_offset_s约束偏移秒int可负clock_synced本地时钟已同步为 1否则为 0源码保证该字段恒存在见 clock_synced 兜底逻辑stratum本地时钟 stratumint注意摘要行是可变句式时钟未同步时不会出现clock synced片段甚至缺少stratum段例如0/4 peers valid, constraint offset 0s, clock unsynced对应测试数据 outputNoSync因此解析采用后缀/前缀匹配而非固定位置匹配。示例输出README 给出的典型 Line Protocol 输出openntpd,remote194.57.169.1,stratum2 tl10i,poll1007i,offset2.295,jitter3.896,delay53.766,next266i,wt1i 1514454299000000000 openntpd_sensors,sensornmea0,refidGPS,state_prefix* wt10i,gd1i,st0i,next1i,poll15i,offset-0.673,correction0.6 1514454299000000000 openntpd_status peers_valid12i,peers_total12i,sensors_valid1i,sensors_total1i,constraint_offset_s-1i,clock_synced1i,stratum1i 1514454299000000000测试用例中ntpctl -s all完整输出对应的完整断言见 TestParseFullOutputAll包含 12/12 有效 peer、一个nmea0GPS 传感器state_prefix*以及peers_valid12, peers_total12, sensors_valid1, sensors_total1, constraint_offset_s-1, clock_synced1, stratum1的状态指标可作为端到端解析行为的可执行规格。使用方式小结确认目标机器运行 OpenNTPD 且ntpctl可执行which ntpctl通常为/usr/sbin/ntpctl按上文任选其一解决权限将telegraf用户加入ntpd组推荐或配置use_sudo true sudoers 规则在 Telegraf 配置文件中加入[[inputs.openntpd]]段必要时显式设置binary与timeout重启 Telegraf 后即可在输出端看到openntpd、openntpd_sensors、openntpd_status三类指标。延伸阅读插件源码plugins/inputs/openntpd/openntpd.go解析测试用例含各种边界输出无效 peer、DNS 解析失败、未同步时钟plugins/inputs/openntpd/openntpd_test.go插件注册与构建标签自定义构建时使用inputs.openntpdplugins/inputs/all/openntpd.go带超时的外部命令执行器internal/exec.go、internal/exec_unix.go全局插件配置说明docs/CONFIGURATION.md【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门