ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Telegraf NATS Input 插件:通过监控端点采集 NATS Server 运行指标

Telegraf NATS Input 插件:通过监控端点采集 NATS Server 运行指标 Telegraf NATS Input 插件通过监控端点采集 NATS Server 运行指标【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf导读inputs.nats是 Telegraf 内置的输入插件Input Plugin用于通过 NATS Server 自带的 HTTP 监控端点/varz采集服务器实例的运行状态指标包括内存占用、连接数、订阅数、消息吞吐、CPU 与路由信息等。本文将围绕 plugins/inputs/nats/README.md 展开从配置参数、指标字段到源码级实现原理逐层剖析并借助 nats.go 与其单元测试 nats_test.go 验证字段来源与采集流程帮助读者在真实环境中正确部署、验证并深入理解该插件。适用版本与平台该插件自Telegraf v1.6.0引入官方标注不支持 FreeBSD源码通过构建标签限定支持的输入分类为 server适用平台为 all。插件工作原理与采集链路inputs.nats本质上是一个基于 HTTP 轮询的轻量级采集器。它不依赖 NATS 客户端库与服务器建立连接而是直接请求 NATS Server 内置的监控接口/varzVariable Runtime Status 的缩写该接口返回一个描述服务器运行状况的 JSON 文档。从源码看采集链路非常清晰见 nats.go解析配置中的server地址url.Parse在路径上追加/varzpath.Join(address.Path, varz)首次调用时惰性创建 HTTP 客户端createHTTPClient发起GET请求并读取响应体将 JSON 响应反序列化为gnatsd.Varz结构体来自 go.mod 中依赖的github.com/nats-io/nats-server/v2v2.14.6 包将Varz中的字段映射为 Telegraf 指标字段连同server标签一并写入 Accumulator。值得注意的是插件完全复用了 NATS 官方服务器代码中的Varz结构体作为反序列化目标这意味着字段语义与 NATS Server 自身定义完全一致避免了字段名映射偏差。配置参数详解插件完整的配置模板位于 sample.conf在 nats.go 中通过//go:embed嵌入并作为SampleConfig()的返回值因此执行telegraf --usage nats即可查看。完整配置如下# Provides metrics about the state of a NATS server # This plugin does NOT support FreeBSD [[inputs.nats]] ## The address of the monitoring endpoint of the NATS server server http://localhost:8222 ## Maximum time to receive response # response_timeout 5sserver类型string默认值http://localhost:8222说明NATS Server 监控端点Monitoring Endpoint的地址。NATS Server 默认不开启监控端口需要在服务器启动时指定-m 8222或配置文件中设置http_port/monitor_port才能暴露该端点。源码中该默认值定义在 nats.go 的init()注册函数中对应 TOML 字段为Server string \toml:servernats.go。response_timeout类型config.DurationGo time.Duration 字符串形式如5s、1m默认值5s当配置为 0 时生效说明等待监控端点响应的最大时间。从 createHTTPClient 的实现可见若该值未设置或为 0则自动回退到 5 秒同时该值也被用作http.Client的整体Timeout即覆盖连接建立、TLS 握手与响应体读取的全过程。全局配置选项与所有 Telegraf 插件一样inputs.nats还支持插件级的通用配置例如通过name_prefix、name_suffix、name_override修改指标名通过tags添加额外标签通过fieldpass/fielddrop过滤字段以及通过alias与interval调整插件行为。具体用法见 docs/CONFIGURATION.md。注意这些全局选项是插件配置块内的顶层键而非本插件的私有参数。指标Metrics字段全解析插件在每次采集周期输出一条名为nats的指标其 tags 与 fields 定义于 nats.go与 README 中的字段列表一一对应tagsserver监控端点地址即配置中的server值原样写入。fields字段类型单位/含义uptimeinteger纳秒服务器自启动以来的运行时长由now - start计算meminteger字节进程占用内存subscriptionsinteger当前订阅数out_bytesinteger字节累计发送字节数connectionsinteger当前客户端连接数in_msgsinteger累计接收消息数README 注释为 bytes实际语义为消息计数total_connectionsinteger累计建立过的连接总数coresintegerCPU 核心数cpuintegerCPU 使用百分比NATS 采样值slow_consumersinteger慢消费者数量routesinteger集群路由连接数remotesinteger远端路由数out_msgsinteger累计发送消息数in_bytesinteger字节累计接收字节数关于字段来源需要特别注意两点实现细节uptime并非直接读取。NATS 的Varz同时包含start启动时间与now当前时间插件通过stats.Now.Sub(stats.Start).Nanoseconds()计算运行时长见 nats.go。测试用例 nats_test.go 使用了一组跨世纪的时间戳1861 年启动、2011 年采样验证了纳秒级差值计算的正确性。字段类型随 NATS 版本浮动。Varz结构体中in_msgs、out_msgs、connections、subscriptions等字段的类型int64、uint64、int、uint32 等由所依赖的 nats-server 版本决定测试中的断言nats_test.go精确对应了当前依赖版本下的实际类型这说明在升级 NATS 依赖后指标字段的类型理论上可能发生变化。示例输出README 给出的真实输出示例如下时间为纳秒级 Unix 时间戳nats,serverhttp://localhost:8222 uptime117158348682i,mem6647808i,subscriptions0i,out_bytes0i,connections0i,in_msgs0i,total_connections0i,cores2i,cpu0,slow_consumers0i,routes0i,remotes0i,out_msgs0i,in_bytes0i 1517015107000000000字段名与标签名均可直接用于 InfluxDB 查询、Prometheus 转换或 Grafana 面板绑定。由于in_msgs/out_msgs为单调递增的累计值推荐在时序查询中配合差函数如 InfluxDB 的derivative()观察吞吐速率。平台支持与构建约束官方文档明确标注“This plugin does NOT support FreeBSD”。这一限制在源码层面通过构建标签build tags实现nats.go 的构建约束为!freebsd || (freebsd cgo)即非 FreeBSD 平台或启用了 cgo 的 FreeBSD 平台可以编译nats_freebsd.go 的构建约束为freebsd !cgo该文件为空包用于在“FreeBSD 且未启用 cgo”时提供占位从而让该平台编译通过但不具备采集能力。可以推断这一限制源自底层 NATS 依赖在纯 Go无 cgo的 FreeBSD 环境下的构建兼容性问题而非插件本身的功能缺陷。插件注册与引入方式inputs.nats通过 init() 调用inputs.Add(nats, ...)完成自注册。默认构建的 Telegraf 二进制通过 plugins/inputs/all/nats.go 中的空导入自动引入该插件//go:build !custom || inputs || inputs.nats package all import _ github.com/influxdata/telegraf/plugins/inputs/nats // register plugin在自定义构建-tagscustom模式下可通过inputs或inputs.nats构建标签选择是否打包该插件这与 Telegraf 的 custom builder 机制见 tools/custom_builder配合使用。测试验证与指标正确性单元测试 nats_test.go 通过httptest.NewServer模拟了一个返回完整varzJSON 的监控端点并断言请求路径必须是/varznats_test.go验证了路径拼接逻辑Gather产生的nats指标包含 14 个字段及server标签且字段值逐项与样例 JSON 对应nats_test.go。样例 JSONnats_test.go覆盖了http_req_stats等额外字段插件只提取自己关心的 14 个字段其余 JSON 内容被忽略说明该插件对 NATS 监控接口的返回结构兼容性良好——即使服务器返回更多信息也不会影响解析。部署与验证清单以下步骤可帮助你在真实环境中快速验证本插件启动带监控端点的 NATS Server示例端口 8222nats-server -m 8222或通过 NATS 配置文件设置http_port: 8222。验证监控端点可访问curl http://localhost:8222/varz在 Telegraf 配置中启用插件使用 sample.conf 模板[[inputs.nats]] server http://localhost:8222 response_timeout 5s查看插件内置配置模板telegraf --usage nats以测试模式运行并观察输出telegraf --test --config telegraf.conf若输出形如nats,serverhttp://localhost:8222 uptime...i,mem...i,...则表明采集链路正常。小结inputs.nats是 Telegraf 生态中接入 NATS 监控最轻量的方式一条 HTTP 请求、一个varzJSON、一次字段映射即可将 NATS Server 的核心运行状态纳入统一的可观测性管道。通过 nats.go 源码与 nats_test.go 测试我们确认了字段语义直接继承自官方gnatsd.Varz结构体、uptime由起止时间差值计算、以及 FreeBSD 平台限制的构建实现。部署时只需牢记“先开启 NATS 的监控端点”本插件即可开箱即用地完成采集。【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表