Glances 接入 NATS 消息代理:配置导出、数据模型与订阅消费实战指南

📅 发布时间:2026/9/20 0:43:29
Glances 接入 NATS 消息代理:配置导出、数据模型与订阅消费实战指南
指标监控监控大盘CLI告警MCP 服务【免费下载链接】glancesGlances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.项目地址https://gitcode.com/gh_mirrors/gl/glances点击查看免费下载NATS 是一个轻量级、高性能的开源消息代理message brokerGlances 原生支持将系统监控统计数据实时发布到 NATS 服务器供下游消费者微服务、数据管道、自建监控面板异步订阅。本文以 Glances 官方文档 docs/gw/nats.rst 为主体结合仓库内导出模块源码、默认配置与集成测试完整讲解从配置、启动、数据模型到 Python 客户端订阅消费的全过程。NATS 导出功能概述Glances 内置的 NATS 导出模块位于 glances/exports/glances_nats/init.py它属于 Glances 导出框架glances/exports/中的异步AsyncIO实现之一。其工作方式可以概括为Glances 周期性采集各插件的统计数据将每个插件的数据以 JSON 消息的形式发布到 NATS 服务器上以prefix.plugin命名的 subject主题中任何 NATS 客户端都可以通过订阅这些主题实时获取监控数据。从源码看Export类继承自GlancesExportAsyncio定义于 glances/exports/export_asyncio.py后者在后台线程中维护一个持久的事件循环负责 NATS 连接的初始化、数据发布与优雅退出从而让 Glances 主程序在同步采集的同时完成异步的网络 I/O。第一步在配置文件中定义 NATS 连接使用 NATS 导出前需要先在 Glances 配置文件中定义[nats]段。默认配置文件 conf/glances.conf 中已经给出了完整示例位于#L993-L999[nats] # Configuration for the --export nats option # https://nats.io/ # Host is a separated list of NATS nodes hostnats://localhost:4222 # Prefix for the subjects (default is glances) prefixglances配置项说明host必填NATS 服务器的连接地址采用nats://host:port格式默认端口为 4222。根据 glances/exports/glances_nats/init.py 中load_conf的调用方式host是唯一强制项mandatories[host]缺失时会直接以exit(Missing NATS config)终止程序。prefix可选发布主题的前缀默认值为glances。源码中通过self.prefix self.prefix or glances保证未配置时回退到默认值。若配置了多个 NATS 节点请按需保持 prefix 的一致性以便消费者使用统一的主题前缀订阅。此外配置文件注释明确说明 host 可以是一个逗号分隔的 NATS 节点列表Host is a separated list of NATS nodes对应源码中servers[s.strip() for s in self.hosts.split(,)]的处理逻辑——这对搭建 NATS 集群leaf node 或 cluster的高可用场景很有用客户端会按列表尝试连接。第二步启动 Glances 并导出到 NATS配置完成后在命令行中启用 NATS 导出$ glances --export nats此时 Glances 会读取配置文件中的[nats]段并建立连接同时正常显示 TUI 界面。如需在无界面环境下运行如服务器后台导出可以组合其他命令行参数例如集成测试 tests/test_export_nats.sh 中使用的$ python -m glances --config ./conf/glances.conf --export nats --stop-after 10 --quiet其中--config指定配置文件路径--stop-after 10表示采集 10 轮后自动退出便于自动化验证--quiet关闭 TUI 输出。你也可以用--export nats --export ...同时启用多个导出后端。连接与重连机制源码视角NATS 连接的建立发生在_async_init()中源码展示了几个值得关注的细节连接参数reconnect_time_wait2重连间隔 2 秒、max_reconnect_attempts60最多尝试 60 次通过error_cb、disconnected_cb、reconnected_cb三个回调分别记录错误、断线与重连事件并维护_connected状态标志若连接失败_async_init会抛出异常由基类GlancesExportAsyncio捕获并记入日志同时后台线程继续运行以备重试不会导致 Glances 主程序直接崩溃。每次采集周期导出框架glances/exports/export.py 中的update()/build_export()会把各插件统计值整理成columns与points两个列表随后调用 NATS 模块的_async_export(name, columns, points)将dict(zip(columns, points))序列化为 JSON 后发布到主题并调用flush(timeout2.0)确保消息落盘。发布计数由_publish_count维护退出时_async_exit会先drain()再close()保证已发布消息完整送达。第三步理解 NATS 数据模型与主题命名Glances 的 NATS 导出遵循简单一致的数据模型所有统计数据以 JSON 消息发布到如下主题prefix.plugin例如当prefixglances时CPU 统计发布到主题glances.cpu内存统计发布到glances.mem网络统计、磁盘 I/O、进程列表等各插件分别对应glances.network、glances.diskio、glances.processlist等主题。消息体是 JSON 格式的键值对键为字段名小写值为对应的统计值。这一结构由_async_export中的subject_data dict(zip(columns, points))与json_dumps(subject_data)生成每个主题对应 Glances 的一个插件模块便于消费者按需订阅特定维度。第四步用 Python 客户端订阅消费官方文档给出了一个基于nats-pynatsPython 客户端库的最小订阅示例完整代码如下import asyncio import nats async def main(): nc nats.NATS() await nc.connect(servers[nats://localhost:4222]) future asyncio.Future() async def cb(msg): nonlocal future future.set_result(msg) await nc.subscribe(glances.cpu, cbcb) # Wait for message to come in print(Waiting (max 30 seconds) for a message on glances subject...) msg await asyncio.wait_for(future, 30) print(msg.subject, msg.data) if __name__ __main__: asyncio.run(main())运行该脚本后它会连接本地 NATS 服务器nats://localhost:4222、订阅glances.cpu主题并等待最多 30 秒收到第一条 CPU 统计数据后打印主题名与消息数据。代码中await nc.subscribe(glances.cpu, cbcb)即文档所述的单主题订阅方式。使用通配符订阅全部统计NATS 原生支持通配符订阅。要一次性接收 Glances 导出的所有插件数据把订阅主题换成通配符即可await nc.subscribe(glances.*, cbcb)glances.*会匹配glances.cpu、glances.mem等所有一级主题适合需要全量采集或持久化存储的场景例如转发到时序数据库。注意通配符*只匹配一级若要匹配更深层级的主题可结合 NATS 的多级通配符如使用集成测试 tests/test_export_nats.sh 中就用到了glances.来统计全部消息。端到端验证用 Docker 快速跑通 NATS 导出仓库中的 tests/test_export_nats.sh 提供了一个完整、可复现的端到端验证脚本其流程对自建环境极具参考价值启动 NATS 服务器用docker run -d --name nats-for-glances -p 4222:4222 -p 8222:8222 -p 6222:6222 nats:latest启动官方 NATS 容器4222 为客户端端口8222 为监控端口6222 为集群路由端口并等待约 5 秒就绪启动订阅者使用natsio/nats-box容器中的nats sub glances.命令在后台订阅全部 Glances 主题并统计收到的消息数运行 Glances执行python -m glances --config ./conf/glances.conf --export nats --stop-after 10 --quiet采集 10 轮后退出校验结果等待约 2 秒让尾部消息到达若收到的消息数不少于 10 条MIN_MESSAGES10则判定成功否则脚本以非零状态退出。该测试同时验证了--stop-after、--quiet与 NATS 导出的组合用法是排查配置正确但收不到消息问题时的极佳参考。依赖方面NATS 导出模块需要nats-py客户端库版本约定见 all-requirements.txtnats-py2.15.0。常见问题排查启动时报 Missing NATS config说明配置文件中缺少[nats]段或未设置必填的host项请对照上文配置示例补全。glances --export nats无法连接服务器确认 NATS 服务已启动且host地址、端口正确若使用集群检查 host 逗号分隔列表是否完整。连接失败不会阻塞 Glances 主流程可通过日志默认 DEBUG 级别下会输出NATS Connecting to servers: ...与NATS Successfully connected to servers: ...确认连接状态。订阅不到消息核对 prefix 是否一致——发布端[nats]段中的prefix与消费者订阅的主题前缀必须匹配同时确认订阅主题命名符合prefix.plugin模型例如默认配置下 CPU 数据位于glances.cpu而非cpu。小结通过[nats]配置段 --export nats命令行参数Glances 即可将全量系统统计以 JSON 消息实时发布到 NATS 主题形成prefix.plugin的清晰数据模型。配合nats-py客户端与通配符订阅可以低成本地将 Glances 的监控数据接入消息驱动的数据管道实现异步、解耦、可扩展的监控数据分发。相关源码、配置与测试均可在当前仓库中查阅导出模块、官方文档、默认配置、集成测试。赞分享指标监控监控大盘CLI告警MCP 服务【免费下载链接】glancesGlances an Eye on your system. A top/htop alternative for GNU/Linux, BSD, macOS and Windows operating systems.项目地址https://gitcode.com/gh_mirrors/gl/glances点击查看免费下载相关推荐Argo CD Notifications 集成 NATS配置参数、认证与消息订阅实战指南Argo CD Notifications 集成 NATS配置参数、认证与消息订阅实战指南 Argo CD 的 Notifications 系统持续监控 Ap云原生CI/CD容器编排DevOps后端Glances 数据导出到 RabbitMQAMQP 消息队列集成配置与实现原理指南Glances 数据导出到 RabbitMQAMQP 消息队列集成配置与实现原理指南 Glances 是一个跨平台GNU/Linux、BSD、macOS、W指标监控监控大盘CLI告警MCP 服务Telegraf NATS Consumer 输入插件详解从 NATS 与 JetStream 订阅消费指标数据Telegraf NATS Consumer 输入插件详解从 NATS 与 JetStream 订阅消费指标数据 NATS Consumer 是 Telegr可观测性指标监控运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考