Glances 数据导出到 CouchDB:配置、JSON 文档结构与源码实现解析
2026/9/20 1:20:53 网站建设 项目流程

Glances 数据导出到 CouchDB:配置、JSON 文档结构与源码实现解析

【免费下载链接】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 的 CouchDB 导出模块(--export couchdb):如何通过配置文件[couchdb]段建立与 CouchDB 服务器的连接、以原生 JSON 文档形式存储各插件统计信息,并结合仓库源码讲解type/time字段注入、数据库自动创建、字段扁平化等底层实现细节。读完本文,你将能够独立完成 Glances → CouchDB 的监控数据落库配置,并理解每一条文档字段的来源。

1. 概述:Glances 的 CouchDB 导出能力

CouchDB 是 Glances 官方支持的多种后端导出目标之一(其余还包括 InfluxDB、Graphite、Elasticsearch、Prometheus、Kafka 等,参见 docs/gw/index.rst)。它的定位很明确:把 Glances 各插件采集到的实时统计(CPU、内存、负载、网络……)周期性地写入 CouchDB 数据库,便于后续通过 CouchDB 的 REST API 或 Fauxton Web 界面做历史查询与可视化。

从源码结构看,CouchDB 导出功能由一个独立模块承载:glances/exports/glances_couchdb/init.py,它继承自所有导出模块共用的基类GlancesExport(glances/exports/export.py)。基类负责统计数据的收集、字段扁平化与公共配置读取,而 CouchDB 模块只关心"如何连上服务器、如何写文档"这两件事。

依赖说明:该模块使用pycouchdb客户端库与 CouchDB 交互,这是该导出功能生效的前提条件,需要在安装 Glances 时一并提供。

2. 配置文件:[couchdb]段详解

2.1 标准配置示例

连接信息定义在 Glances 配置文件的[couchdb]段中(文档示例):

[couchdb] host=localhost port=5984 db=glances user=root password=example

仓库自带的完整示例配置位于 conf/glances.conf:

[couchdb] # Configuration for the --export couchdb option # https://www.couchdb.org host=localhost port=5984 db=glances user=admin password=admin

2.2 参数语义与源码解读

各参数的含义与在源码中的用法如下:

参数默认值(示例配置)含义是否必填
hostlocalhostCouchDB 服务器主机名或 IP必填
port5984CouchDB HTTP 端口(官方默认 5984)必填
dbglances目标数据库名称,不存在时会自动创建必填
useradmin认证用户名必填
passwordadmin认证密码必填

源码依据:在 glances/exports/glances_couchdb/init.py 中,load_conf('couchdb', mandatories=['host', 'port', 'db', 'user', 'password'])将这五个参数全部列为强制性配置项——只要缺任意一个,load_conf返回失败,模块随即以退出码2终止进程(sys.exit(2))。

特别值得注意的一点:源码注释明确指出 "User and Password are mandatory with CouchDB 3.0 and higher"——即CouchDB 3.0 及以上版本强制要求认证,因此即使你使用本地开发服务器,也必须显式配置userpassword。这也是示例配置中保留这两个字段、而不是像某些旧版导出器那样可省略的原因。

其余参数缺失时会怎样?基类GlancesExport.load_conf(glances/exports/export.py)对非必填参数采用"有则读取、无则跳过并记录 DEBUG 日志"的宽容策略,而[couchdb]段恰好没有可选参数,五个字段全部走 mandatory 分支——任一缺失都会在日志中输出Error in the couchdb configuration (...)并导致导出功能不可用。

2.3 配置文件位置提示

上述[couchdb]段需要放置在你实际使用的配置文件中。Glances 的配置目录结构可参考 docs/config.rst:配置文件的全局说明与各模块分节规则均在此文档中描述。仓库中 conf/glances.conf 是完整参考配置,conf/empty.conf 是空模板,均可用作起点。

3. 启动导出:命令行操作

配置完成后,以如下命令启动 Glances 并启用 CouchDB 导出(命令参数详见 docs/cmds.rst):

$ glances --export couchdb

--export参数支持逗号分隔的模块列表,因此可以同时向多个后端导出,例如:

$ glances --export couchdb,influxdb

指定自定义配置文件时:

$ glances -C ./conf/glances.conf --export couchdb

模块源码头部自带一份可复现的本地联调指南(glances/exports/glances_couchdb/init.py),适合用来快速验证整个链路:

# 1) 用 Docker 启动一个带认证的 CouchDB 实例 $ docker run -d -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=admin \ -p 5984:5984 --name my-couchdb couchdb # 2) 以安静模式运行 Glances 并导出到 CouchDB $ .venv/bin/python -m glances -C ./conf/glances.conf --export couchdb --quiet # 3) 在浏览器打开 CouchDB 管理界面查看结果 $ http://127.0.0.1:5984/_utils

4. 连接与写入流程:源码级调用链

4.1 连接初始化

模块初始化时,源码通过如下流程建立连接(glances/exports/glances_couchdb/init.py):

  1. 拼接 URI:http://{user}:{password}@{host}:{port}/(基础认证凭据直接内嵌在 URI 中;源码以# @TODO: https标注了尚未支持的 HTTPS 场景);
  2. 创建pycouchdb.Server客户端;连接失败时记录 CRITICAL 日志并以退出码2终止;
  3. 检查目标数据库是否存在:不存在则调用s.create(self.db)自动创建数据库,存在则复用——这一行为解释了为什么db参数不必预先在 CouchDB 中手工建好;
  4. 返回数据库句柄s.database(self.db)供后续写入使用。

4.2 数据写入与字段注入

写入动作由export(name, columns, points)方法完成(glances/exports/glances_couchdb/init.py):

  1. 基类传来的columns(字段名列表)与points(值列表)先被zip成字典data
  2. 注入两个元数据字段:
    • data['type'] = name——插件名(如loadcpumem);
    • data['time'] = datetime.now().isoformat()[:-3] + 'Z'——UTC 时间戳,格式为2026-09-19T02:25:25.524Z(毫秒精度、Z后缀表示 UTC,与文档中的"2016-09-24T16:39:08.524Z"示例完全一致);
  3. 调用self.client.save(data)将整个字典作为一条CouchDB JSON 文档写入。

上游数据从何而来?GlancesExport.update()(glances/exports/export.py)是通用导出编排入口:它调用stats.getAllExportsAsDict()stats.getAllLimitsAsDict()获取所有可导出插件的统计值和阈值(limits),将二者合并后交给build_export()做字段扁平化,最后逐个插件回调export()。这也是为什么 CouchDB 文档里会同时出现统计值(min1min5cpucore)和阈值字段(load_carefulload_warningload_critical)的原因。

4.3 插件过滤规则

并非所有插件都会导出。基类定义了一份不可导出插件黑名单(glances/exports/export.py):

non_exportable_plugins = [ "alert", "help", "plugin", "psutilversion", "quicklook", "version", ]

这些属于内部辅助型插件(帮助页、版本信息、告警等),不产生有意义的时序数据,因此在plugins_to_export()中被过滤掉。可导出插件列表会作为_last_exported_list缓存,供init_fields等场景复用。

5. 文档格式:原生 JSON 与字段示例

CouchDB 本身以 JSON 文档为存储单位,Glances 无需做任何序列化转换,直接把扁平化后的统计字典存成文档。每篇文档的字段构成如下:

  • Glances 注入字段type(插件名)、time(ISO-8601 UTC 时间戳);
  • 插件统计字段:由build_export()递归扁平化产生——嵌套字典会按父字段.子字段的方式展开为扁平键名(glances/exports/export.py);
  • CouchDB 系统字段_id(文档唯一 ID)与_rev(修订号),由 CouchDB 服务端自动生成。

文档官方示例——load 插件的统计文档(摘自 docs/gw/couchdb.rst):

{ "_id": "36cbbad81453c53ef08804cb2612d5b6", "_rev": "1-382400899bec5615cabb99aa34df49fb", "min15": 0.33, "time": "2016-09-24T16:39:08.524Z", "min5": 0.4, "cpucore": 4, "load_warning": 1, "min1": 0.5, "history_size": 28800, "load_critical": 5, "type": "load", "load_careful": 0.7 }

字段解读:

字段来源含义
typeGlances 注入插件名,本例为load,可用于按插件类型过滤/分区查询
timeGlances 注入采集时刻(UTC,毫秒精度),用于时序查询
min1/min5/min15load 插件统计1/5/15 分钟平均负载
cpucoreload 插件统计逻辑 CPU 核数(负载归一化参考值)
history_sizeload 插件统计历史数据保留点数(此处 28800 与 Glances 默认的历史窗口相关)
load_careful/load_warning/load_critical阈值合并负载分级告警阈值,由update()中的 limits 合并逻辑带入文档
_id/_revCouchDB 服务端文档唯一标识与修订号,属于数据库系统字段

注意:文档中type与 CouchDB 的_id/_rev是两套完全不同的机制——type是业务语义上的插件标识,_id/_rev是存储层标识,不要混淆。

6. 查看与验证结果

CouchDB 自带 Web 管理界面(Fauxton),可直接在浏览器中查看落库结果,URL 格式如下:

http://127.0.0.1:5984/_utils/database.html?glances

其中glances即配置中的db数据库名。如果数据库被自动创建、且文档随时间持续增长,说明导出链路工作正常。也可以使用 CouchDB 的 REST API 直接验证,例如列出数据库中的文档:

$ curl -u admin:admin "http://127.0.0.1:5984/glances/_all_docs?limit=5"

7. 常见问题与注意事项

  • CouchDB 3.0+ 认证必填userpassword是强制性配置项(源码mandatories列表),缺一不可;3.0 之前版本虽然支持无认证,但示例配置一律要求填写。
  • 数据库无需预先创建:目标库不存在时,模块会自动调用s.create(self.db)创建(glances/exports/glances_couchdb/init.py)。
  • HTTPS 暂不支持:源码以# @TODO: https注释标明当前仅支持http://连接,生产环境如使用 TLS 终结的反向代理可自行处理。
  • 连接失败即退出:服务器不可达或认证失败时,模块记录 CRITICAL 日志并以退出码2终止,便于在脚本/容器编排中及时发现。
  • 写入失败仅告警不退出:单条文档写入失败只记录 ERROR 日志(Cannot export {name} stats to CouchDB),不会中断 Glances 主循环。
  • 导出内容范围:仅plugins_to_export()返回的插件参与导出,alerthelpquicklookversion等内部插件被排除(glances/exports/export.py)。

8. 总结

Glances 的 CouchDB 导出是一条"配置即用"的成熟链路:在[couchdb]段填好 5 个必填参数、以--export couchdb启动,Glances 就会周期性地把每个可导出插件的统计值连同阈值一起,以原生 JSON 文档(含type插件标识与timeUTC 时间戳)写入指定数据库。其核心实现集中在 glances/exports/glances_couchdb/init.py(连接、建库、写入)与 glances/exports/export.py(数据收集、字段扁平化、插件过滤)两个文件中,理解这两处代码,即可完全掌握该导出器的行为边界与可扩展点。

【免费下载链接】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

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询