恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Glances 导出监控数据到 Kafka:配置详解、数据格式与源码实现解析
首页
资讯中心
/
Glances 导出监控数据到 Kafka:配置详解、数据格式与源码实现解析
Glances 导出监控数据到 Kafka:配置详解、数据格式与源码实现解析
发布时间:2026/9/20 0:29:38
指标监控监控大盘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点击查看免费下载导读Kafka 是 Glances 众多导出export目标中的一员用于把本地或远程主机的实时监控统计以 JSON 形式持续写入 Kafka topic供下游流处理、日志采集或实时告警系统消费。本文以 docs/gw/kafka.rst 为核心完整讲解[kafka]配置段、--export kafka启动方式、消息的 key/value 结构与消费端写法并结合仓库中的导出模块源码与配置文件剖析其底层实现原理帮助读者在实际环境中快速落地「Glances → Kafka」数据管道。Kafka 导出配置配置文件中的[kafka]段Kafka 导出的连接信息需要在 Glances 配置文件中定义。在默认配置文件 conf/glances.conf 中[kafka]段如下与官方文档 docs/gw/kafka.rst 保持一致[kafka] # Configuration for the --export kafka option # http://kafka.apache.org/ hostlocalhost port9092 topicglances #compressiongzip # Tags will be added for all events #tagsfoo:bar,spam:eggs # You can also use dynamic values #tagshostname:hostname -f各配置项的含义与说明如下配置项默认值/示例是否必填说明hostlocalhost必填Kafka broker 的主机地址可为主机名或 IPport9092必填Kafka broker 的监听端口Kafka 默认端口为 9092topicglances必填统计数据写入的 Kafka topic 名称compression注释状态如gzip可选消息压缩类型示例为gzip启用压缩会占用主机 CPUtagsfoo:bar,spam:eggs可选附加到每条导出记录上的标签key:value 对逗号分隔从源码实现看必填与可选配置项的划分与上述表格完全对应。glances/exports/glances_kafka/init.py 中通过基类的load_conf加载配置self.export_enable self.load_conf( kafka, mandatories[host, port, topic], options[compression, tags] ) if not self.export_enable: exit(Missing KAFKA config)也就是说host、port、topic三个键缺失时load_conf返回FalseGlances 会直接以Missing KAFKA config退出compression与tags缺失则不影响启用仅以None处理。tags 的静态与动态写法tags支持两种写法静态标签直接写出key:value对多个标签用逗号分隔例如tagsfoo:bar,spam:eggs最终每条记录都会带上foo: bar、spam: eggs这两个字段。动态标签值部分可以引用 shell 命令用反引号包裹例如tagshostname:hostname -f这样会动态执行hostname -f并把结果作为hostname标签的值便于在多主机场景下区分数据来源。底层解析由基类 glances/exports/export.py 的parse_tags完成先按逗号切分为多个key:value对再对每个对按第一个冒号切分拼装成字典若某个对缺少冒号ValueError会记一条 info 日志并整体返回空字典d_tags dict(x.split(:, 1) for x in tags.split(,))关于 compression 的注意点原文档明确指出可以启用压缩例如gzip但压缩会消耗主机 CPU。因此对于 CPU 敏感或监控数据量不大的场景建议保持注释状态仅在网络带宽成为瓶颈时再开启并需要权衡压缩带来的 CPU 开销。启动 Kafka 导出glances --export kafka完成配置后以如下命令启动 Glances 即可把统计写入 Kafka$ glances --export kafka命令行层面的处理流程如下参数解析glances/main.py 定义--export参数支持逗号分隔的导出模块列表例如--export kafka,influxdb可同时导出到多个目标。参数映射glances/main.py 会把每个导出项映射为对应的布尔属性if args.export is not None: for p in args.export.split(,): setattr(args, export_ p, True)动态加载glances/stats.py 启动时会扫描glances/exports/目录下的所有glances_*子目录把glances_kafka规约为导出器名kafka当export_kafka为真时通过import_module导入该模块并实例化Export类注册到活动导出器字典中。需要说明的依赖前提Kafka 导出模块依赖kafka-python库见 pyproject.toml 的kafka-python依赖项。使用前需确保该库已安装例如通过pip install glances[kafka]或手动安装kafka-python否则模块导入会失败。消息格式key 为插件名value 为 JSON 字典统计数据以原生 JSON 格式发送到指定 topic每条消息的结构约定为key插件名称plugin name例如mem、cpu、network等valueJSON 字典包含该插件的各项统计字段。原文档给出的内存memory插件消息示例Pythonkafka客户端打印的ConsumerRecord如下ConsumerRecord(topicuglances, partition0, offset1305, timestamp1490460592248, timestamp_type0, keymem, valueu{available: 2094710784, used: 5777428480, cached: 2513543168, mem_careful: 50.0, percent: 73.4, free: 2094710784, mem_critical: 90.0, inactive: 2361626624, shared: 475504640, history_size: 28800.0, mem_warning: 70.0, total: 7872139264, active: 4834361344, buffers: 160112640}, checksum214895201, serialized_key_size3, serialized_value_size303)可以看到value 中不仅包含total、used、free、available、cached、buffers、active、inactive、shared、percent等基础内存指标还带有mem_warning、mem_careful、mem_critical这些阈值字段以及history_size历史窗口字段。这是 Glances 导出流程的通用行为基类 glances/exports/export.py 的update方法会同时取插件的统计与阈值limits把两者合并后再逐插件调用各导出器。发送逻辑的源码实现glances/exports/glances_kafka/init.py 中的export方法完成实际发送def export(self, name, columns, points): Write the points to the kafka server. logger.debug(fExport {name} stats to Kafka) # Create DB input data dict(zip(columns, points)) if self.tags is not None: data.update(self.parse_tags(self.tags)) # Send stats to the kafka topic # keyplugin name # valueJSON dict try: self.client.send( self.topic, # Kafka key name needs to be bytes #1593 keyname.encode(utf-8), valuedata, ) except Exception as e: logger.error(fCannot export {name} stats to Kafka ({e}))几个关键细节columns与points由基类 glances/exports/export.py 的build_export递归展开得到字典的键统一转为小写字符串布尔值转成 JSON 字符串列表值以空格拼接嵌套字典递归拍平并支持通过[export]段的exclude_fields正则过滤不需要的字段。data由「字段名-字段值」交叉配对得到若配置了tags还会合并进标签字段。消息key使用name.encode(utf-8)转为字节串——这是 Kafka key 的格式要求对应源码注释中提到的 issue #1593。value直接以 dict 形式交给KafkaProducer由构造时注册的value_serializer序列化为 JSON见下文init实现。单条发送失败不会导致程序退出只会记录 error 日志符合监控类导出的容错设计。生产端连接的初始化glances/exports/glances_kafka/init.py 的init方法负责建立 KafkaProducer 连接server_uri f{self.host}:{self.port} try: s KafkaProducer( bootstrap_serversserver_uri, value_serializerlambda v: json_dumps(v), compression_typeself.compression, ) except Exception as e: logger.critical(fCannot connect to Kafka server {server_uri} ({e})) sys.exit(2) else: logger.info(fConnected to the Kafka server {server_uri})broker 地址由host:port拼接而成value_serializer使用 Glances 的json_dumps把 Python 字典序列化为 JSON 字节串compression_type直接透传配置中的压缩类型如gzip为None时不启用压缩连接失败会记录 critical 日志并以退出码 2 终止进程成功则记录一条 info 日志。从源码结构看当前init方法仅传递了bootstrap_servers、value_serializer与compression_type未在代码中显式配置 SASL/SSL 等安全认证参数若 Kafka broker 开启了认证需要读者在 fork 或扩展该模块时自行补充或优先使用支持安全协议的转发组件。消费端示例用 Python 读取 Glances 数据原文档提供了基于kafka-python的消费端示例用于验证 topic 中收到的 Glances 记录from kafka import KafkaConsumer import json consumer KafkaConsumer(glances, value_deserializerjson.loads) for s in consumer: print(s)KafkaConsumer(glances, ...)订阅glancestopicvalue_deserializerjson.loads把接收到的 JSON 字节串自动反序列化为 Python dict与生产端value_serializer的 JSON 序列化正好配对循环中逐条打印ConsumerRecord即可看到类似上文 memory 插件的完整记录含 key、value、partition、offset、timestamp 等信息。消费端打印结果与文档中的ConsumerRecord示例一致说明「生产端 JSON 序列化 → topic → 消费端 JSON 反序列化」整条链路是闭合的。实际工程中也可基于该模式对接 Logstash、Kafka Connect、Spark Streaming 或自研消费程序做进一步的数据清洗、入库与告警。收尾与资源释放exit 方法Glances 退出时glances/exports/glances_kafka/init.py 的exit方法会先flush()确保未发送的消息全部送达再close()关闭生产者连接最后调用基类exit()完成统一收尾。这在长时间运行的监控导出场景中很重要可避免进程退出时消息丢失或连接泄漏。适用边界与注意事项仅支持导出到 topic不涉及消费Glances 的 Kafka 模块只实现生产端KafkaProducer消费端需自行搭建如上文的KafkaConsumer示例。压缩的取舍compressiongzip能减少网络传输量但会占用主机 CPU原文档明确提示建议按实际负载权衡。配置缺失即退出[kafka]段缺少host/port/topic任一必填项时Glances 会打印Missing KAFKA config并退出配置前请核对键名。连接失败即退出broker 不可达时进程以退出码 2 终止因此建议先确认 broker 监听与网络连通性再启动--export kafka。动态标签依赖 shelltagshostname:hostname -f 这类写法会执行反引号中的命令需确保目标命令在运行 Glances 的主机上可用。依赖安装需要kafka-python库见 pyproject.toml可通过pip install glances[kafka]一并安装。更多导出目标Kafka 只是 Glances 导出体系的一员--export支持逗号分隔的多个目标组合完整的导出器清单见 glances/exports/ 目录及 docs/gw/index.rst 中的网关gateway文档索引。小结通过[kafka]配置段、glances --export kafka命令以及 topic 中「key插件名、valueJSON dict」的消息约定Glances 可以稳定地把 CPU、内存、网络等插件统计持续推送给 Kafka为实时监控数据的中转、归档与分析提供了标准化的入口。本文结合 glances/exports/glances_kafka/init.py 的Export类实现、glances/exports/export.py 的基类导出流程以及 conf/glances.conf 的默认配置从配置、命令、消息结构与源码四个层面完整还原了该功能读者可按上文步骤直接搭建一套可运行的「Glances → Kafka → 消费者」监控数据管道。赞分享指标监控监控大盘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点击查看免费下载相关推荐Glances 监控数据导出至 MQTT配置详解与源码实现剖析Glances 监控数据导出至 MQTT配置详解与源码实现剖析 导读 MQTT 是一种轻量级发布/订阅消息协议广泛用于物联网IoT、智能家居如 Hom指标监控监控大盘CLI告警MCP 服务Glances 导出监控数据到 Cassandra / Scylla 实战指南配置、数据模型与源码解析Glances 导出监控数据到 Cassandra / Scylla 实战指南配置、数据模型与源码解析 Glances 除了在终端、Web 界面展示系统状态指标监控监控大盘CLI告警MCP 服务Glances 数据导出到 CouchDB配置、JSON 文档结构与源码实现解析Glances 数据导出到 CouchDB配置、JSON 文档结构与源码实现解析 导读 本文介绍 Glances 的 CouchDB 导出模块 export指标监控监控大盘CLI告警MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考