ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Glances 导出 Graphite 时序数据库完全指南:配置、命令与源码实现解析

Glances 导出 Graphite 时序数据库完全指南:配置、命令与源码实现解析 指标监控监控大盘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 内置的 Graphite 导出模块可以把 CPU、内存、磁盘、网络等系统监控统计实时推送到 Graphite 时序数据库服务器供 Graphite/Grafana 等前端做长期趋势分析与可视化。本文以docs/gw/graphite.rst为骨架结合conf/glances.conf配置文件与 Graphite 导出模块源码完整讲解连接配置、启动命令、指标命名规则、数值类型约束与底层实现原理帮助你从零搭建一套可运行的 Glances → Graphite 监控数据链路。Graphite 导出功能是什么Graphite 是一套开源的时序数据库Time Series Server以「路径树 数值点」的方式存储指标非常适合存放系统监控数据。Glances 作为系统监控工具其内置的众多导出器Exporter之一就是 Graphite只要在配置文件中声明 Graphite 连接参数再以--export graphite启动 Glances统计信息就会按刷新周期持续写入 Graphite 服务器形成一条可持续查询的指标时间线。在 Glances 的导出体系中Graphite 属于「网关Gateway到外部服务」这一类的典型成员。完整的导出器清单可以在 docs/gw/index.rst 中看到除 Graphite 外还包括 CSV、InfluxDB、Prometheus、Kafka、MQTT、TimescaleDB 等二十余种目标每个导出器都在配置文件中有自己独立的配置段。在 glances.conf 中配置 [graphite] 段与 Graphite 服务器的连接信息定义在 Glances 配置文件默认glances.conf的[graphite]段中。以下是官方文档给出的最小可用配置[graphite] hostlocalhost port2003 # Prefix will be added for all measurement name # Ex: prefixfoo # foo.cpu # foo.mem # You can also use dynamic values #prefixhostname prefixglances这段配置同样出现在仓库自带的 conf/glances.conf 中实际文件里还多了一个可选项[graphite] # Configuration for the --export graphite option # https://graphiteapp.org/ hostlocalhost port2003 # Prefix will be added for all measurement name prefixglances # System name added between the prefix and the stats # By default, system_name FQDN #system_namemycomputer各参数含义如下参数必填默认值说明host是无Graphite 服务器的主机名或 IP 地址如localhostport是无Graphite 监听plain-text 协议请求的 TCP 端口通常为2003prefix否glances所有指标名称的公共前缀。静态写法如prefixglances会产生glances.cpu、glances.mem也支持反引号包裹的动态值如prefixhostname会把实际主机名作为前缀system_name否主机的 FQDN插在前缀与具体指标之间的系统标识用于区分多台被监控主机的数据关于必填项的校验逻辑从源码可以看出load_conf(graphite, mandatories[host, port], options[prefix, system_name])会强制要求host与port两个键存在缺失时export_enable为假并直接以退出码 2 结束进程prefix与system_name则是可选项见 glances/exports/glances_graphite/init.py。prefix未配置时源码会补上默认值glancesport则会被强制转换为整数类型。启动命令glances --export graphite配置完成后用以下命令启动导出$ glances --export graphite--export是 Glances 统一的导出开关在 glances/main.py 中定义为接收「逗号分隔列表」因此可以同时启用多个导出器例如$ glances --export graphite,statsd如果想要调低导出频率例如 5 秒一次可以配合刷新率参数$ glances -t 5 --export graphite其中-t/--time设置最小刷新周期默认值为 2 秒定义在 glances/main.py。注意 Glances 是按刷新周期统一收集统计并分发给所有激活的导出器所以该值同样决定了写入 Graphite 的数据粒度。导出链路是如何被驱动的从源码结构看整个导出动作的触发点位于 glances/standalone.py 的主循环中每次刷新时调用self.stats.export(self.stats)。而 glances/stats.py 的实现会为每个激活的导出器各起一个独立线程执行update保证慢速网络目标不会阻塞主监控循环。首次迭代时Glances 会先调用init_fields让各导出器了解将要导出的字段清单这一轮不实际发送数据因为部分指标如 rate 需要时间窗口计算。从第二个刷新周期起才开始向 Graphite 逐批写入指标。写入 Graphite 前的数据加工指标命名与类型过滤Graphite 的数据模型是「点分路径」Glances 在真正发送前会对指标做两层加工这两层逻辑都在 glances/exports/glances_graphite/init.py 的export方法与normalize函数中实现名称规范化normalize把原始字段名中的空格替换为下划线形成 Graphite 约定风格的路径名。例如某个字段名含空格时cpu user会被写成cpu_user。数值类型过滤构造name.column - value的字典后仅保留值为Number类型即整数与浮点数的条目其余一律丢弃。这正是官方文档 Note 2 所说的「与多数时序数据库一致Graphite 数据模型只支持 integer 与 float」。export最终通过graphitesend库的send_dict()一次性把整批{指标路径: 数值}发送到服务器失败时会记录Can not export stats to Graphite (...)错误并返回 False成功则记录 DEBUG 级日志。连接建立阶段还会打印一条 INFO 日志Stats will be exported to Graphite server: host:port可据此判断导出器是否初始化成功。底层使用的 Graphite 客户端官方文档 Note 3 明确指出Glances 底层使用GraphiteSenderPython 库pip 包名为graphitesender。在源码中对应from graphitesend import GraphiteClient这一行导入见 glances/exports/glances_graphite/init.py。初始化客户端时init 方法Glances 会传入graphite_server、graphite_port、prefix并固定开启lowercase_metric_namesTrue指标名统一转小写同时根据是否配置了system_name走两条略有不同的构造分支配置了则把system_name传给客户端未配置则使用库默认的主机 FQDN。这样最终发送到 Graphite 的完整路径形如glances.system_name.cpu glances.system_name.mem glances.system_name.fs这与官方文档注释中的示例prefixfoo→foo.cpu、foo.mem一脉相承prefix出现在路径最前面之后是系统名然后是具体指标。依赖安装graphitesender属于可选的 export 依赖并不会随 Glances 基础安装自动带上。仓库在 pyproject.toml 的export依赖组中列出了graphitesender在 all-requirements.txt 中固定版本为graphitesender0.11.2README.rst 同样标注「graphitesenderFor the Graphite export module」。如果你的环境中没有该库首次以--export graphite启动时会因为 import 失败而无法启用此导出器需要先安装$ pip install graphitesender通用导出配置[export] 段的 exclude_fields除 Graphite 专属配置外所有导出器还共享一个[export]公共段位于 docs/gw/index.rst 与配置文件中[export] # Common section for all exporters # Do not export following fields (comma separated list of regex) exclude_fields.*_critical,.*_careful,.*_warning,.*\.key$exclude_fields是逗号分隔的正则表达式列表命中字段将不会被导出。该选项由基类 glances/exports/export.py 的load_common_conf统一加载并在build_export组装字段时通过is_excludedexport.py逐字段匹配过滤。例如.*_critical会剔除所有_critical结尾的告警阈值字段.*\.key$会剔除以.key结尾的键字段从而避免把阈值、状态类非监控数值写入 Graphite。从源码看build_export还会把布尔值序列化为 JSON、把列表值用空格拼接、递归展开嵌套字典并为带key的字段生成key.value形式的前缀路径见 glances/exports/export.py这些都会直接影响最终写入 Graphite 的指标路径形态。注意事项与排障要点汇总官方文档的三条 Note 并结合源码使用时有几点需要特别留意端口语义port配置的是 Graphite 接收 plain-text 协议2003默认端口的 TCP 端口不是 Graphite-Web 的 HTTP 端口通常为8080或 carbon-cache 的 pickle 端口2004。填错端口会导致连接失败日志中会出现Can not write data to Graphite server: host:port。仅支持数值类型Graphite 数据模型只接受整数与浮点数。字符串型字段如部分状态描述会在发送前被过滤掉这是设计如此而非缺陷如需保留字符串类标签应改用 InfluxDB、Prometheus 等原生支持标签的导出器。依赖库导出模块依赖graphitesenderGraphiteSender Python 库需按上文安装后才可使用。指标命名规范化指标名会被转小写、空格转下划线且始终带prefix前缀规划 Graphite 仪表盘路径时应按prefix.system_name.plugin.field的结构来检索数据。首轮无数据由于首轮刷新用于初始化字段信息实际写入 Graphite 的数据从第二个刷新周期才开始刚启动的几十秒内查询不到最新点是正常现象。排查时可以先用glances --export graphite --debug运行并观察日志中的Stats will be exported to Graphite server: ...与Export plugin stats to GraphiteDEBUG 级输出确认连接建立与逐插件发送是否成功也可以用glances --export graphite配合netcat监听2003端口直接观察是否有 plain-text 格式的指标行到达。赞分享指标监控监控大盘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 导出 Elasticsearch 指标配置、数据模型与源码实现解析Glances 导出 Elasticsearch 指标配置、数据模型与源码实现解析 Glances 内置了面向时序数据平台的多路导出export机制其中指标监控监控大盘CLI告警MCP 服务Glances 实时监控数据导出 MongoDB 完整指南配置、文档模型与源码实现剖析Glances 实时监控数据导出 MongoDB 完整指南配置、文档模型与源码实现剖析 MongoDB 是 Glances 官方支持的时间序列监控数据落库后端指标监控监控大盘CLI告警MCP 服务Glances 监控数据导出至 MQTT配置详解与源码实现剖析Glances 监控数据导出至 MQTT配置详解与源码实现剖析 导读 MQTT 是一种轻量级发布/订阅消息协议广泛用于物联网IoT、智能家居如 Hom指标监控监控大盘CLI告警MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表