Telegraf RethinkDB 输入插件:配置方式、采集指标与源码实现解析

发布时间:2026/9/14 3:59:36
Telegraf RethinkDB 输入插件:配置方式、采集指标与源码实现解析 Telegraf RethinkDB 输入插件配置方式、采集指标与源码实现解析【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf本文围绕 Telegraf 的 RethinkDB 输入插件inputs.rethinkdb展开介绍其完整的 TOML 配置写法含 auth_key 与用户名/密码两种鉴权方式、可采集的全部指标清单并结合 rethinkdb.go、rethinkdb_server.go 等源码深入剖析其连接握手、版本校验与三级统计采集的实现机制帮助你正确部署该插件并理解每类指标的产生来源。插件定位与适用场景RethinkDB 输入插件用于从一台或多台 RethinkDB 服务器采集运维监控指标。根据 README 标注的信息该插件自 Telegraf v0.1.3 起提供插件标签为server面向服务器类监控场景支持所有平台all platforms。插件通过 RethinkDB 官方的 Go 驱动gopkg.in/gorethink/gorethink.v3见 go.mod 依赖清单 中登记的 Apache 2.0 许可条目建立连接读取 RethinkDB 内置系统表rethinkdb.stats、rethinkdb.server_status、rethinkdb.table_status中的统计文档转换为 Telegraf 指标后输出。配置说明基本配置插件唯一的配置项是servers一个存放服务器地址的数组。以下为 README 与 sample.conf 中给出的完整示例# Read metrics from one or many RethinkDB servers [[inputs.rethinkdb]] ## An array of URI to gather stats about. Specify an ip or hostname ## with optional port add password. ie, ## rethinkdb://user:auth_key10.10.3.30:28105, ## rethinkdb://10.10.3.33:18832, ## For rethinkdb v2.3.0 with username/password authorization you should use ## rethinkdb2://username:password127.0.0.1:28015 servers [127.0.0.1:28015]servers数组中每个元素支持三种写法写法说明127.0.0.1:28015不带 scheme 的纯地址等价于无鉴权连接默认驱动端口为 28015rethinkdb://user:auth_key10.10.3.30:28105使用 auth_key 鉴权URL 中 user 部分为账号名password 部分为 auth_keyrethinkdb2://username:password127.0.0.1:28015RethinkDB v2.3.0 的用户名/密码鉴权必须使用rethinkdb2scheme此外插件还支持所有输入插件通用的全局配置选项如namepass、name_override、tags、interval、jitter、precision等详见 全局插件配置文档。缺省行为与多实例并发从 Gather 函数实现 可以看到若未配置servers数组为空插件默认采集本机127.0.0.1:28015对应源码中的localhost缺省变量若配置了多个地址插件会为每个地址各启动一个 goroutine 并行采集用sync.WaitGroup等待全部完成单个地址解析失败或连接失败时错误通过acc.AddError记录后continue不会中断其他地址的采集即“一坏不坏全”的容错语义。两种鉴权协议与握手版本gatherServer 函数 展示了 scheme 与握手协议的对应关系这是配置鉴权时最关键的实现细节rethinkdb://scheme从 URL 的 password 部分提取 auth_key设置ConnectOpts.AuthKey并指定gorethink.HandshakeV0_4握手协议rethinkdb2://scheme同时提取用户名和密码设置ConnectOpts.Username/ConnectOpts.Password并指定gorethink.HandshakeV1_0握手协议即 v2.3.0 的 username/password authorization。两个分支均显式禁用DiscoverHosts不从服务器自动发现集群其他节点即插件每次只与你配置的单台节点直连。连接在使用完毕后立即关闭defer server.session.Close()下一次采集间隔会重新建连。数据采集流程每台服务器连接成功后gatherData 方法 按固定顺序执行五步getServerStatus源码查询rethinkdb.server_status系统表用配置地址中的 host 与驱动端口reql_port字段逐行匹配定位本机的服务器记录得到服务器 ID 与主机名。若表中找不到匹配项则报错validateVersion源码校验服务器版本。要求process.version键存在且能解析出x.y.z形式的版本号主版本号必须 ≥ 2否则拒绝采集。这解释了为什么该插件只适用于 RethinkDB 2.x 及以上版本addClusterStats源码查询rethinkdb.stats表中键为[cluster]的文档打上typecluster标签输出集群级引擎统计addMemberStats源码查询键为[server, 服务器ID]的文档打上typemember标签输出本机成员级统计包含累计计数 total_queries / total_reads / total_writesaddTablesStats源码遍历rethinkdb.table_status系统表中的每一张表查询键为[table_server, 表ID, 服务器ID]的统计文档打上typedata与nsdb.table标签同时输出引擎统计与存储统计。任何一步返回错误都会使该服务器的本次采集整体失败并向上层报告。采集的指标清单插件产生两个数据点measurement字段定义见 README 的 Metrics 章节rethinkdb存储层指标tagstypensrethinkdb_hostrethinkdb_hostnamefieldscache_bytes_in_use(integer, bytes)disk_read_bytes_per_sec(integer, reads)disk_read_bytes_total(integer, bytes)disk_written_bytes_per_sec(integer, bytes)disk_written_bytes_total(integer, bytes)disk_usage_data_bytes(integer, bytes)disk_usage_garbage_bytes(integer, bytes)disk_usage_metadata_bytes(integer, bytes)disk_usage_preallocated_bytes(integer, bytes)rethinkdb_engine查询引擎指标tagstypensrethinkdb_hostrethinkdb_hostnamefieldsactive_clients(integer, clients)clients(integer, clients)queries_per_sec(integer, queries)total_queries(integer, queries)read_docs_per_sec(integer, reads)total_reads(integer, reads)written_docs_per_sec(integer, writes)total_writes(integer, writes)结合源码可以进一步说明各标签与字段的实际语义rethinkdb_host取配置中解析出的host:portrethinkdb_hostname取自server_status表中该节点自报的network.hostname见 getDefaultTagstype有三种取值cluster全集群引擎统计只含速率/活跃类字段、member本节点统计额外含 total_queries / total_reads / total_writes 三个累计字段、data表级统计ns仅出现在表级统计中取值为数据库名.表名字段映射由 engineStats 映射表 驱动例如 RethinkDB 原始字段queries_total被重命名为total_queriesclient_connections被重命名为clientsaddEngineStats 方法 按传入的字段白名单选择性输出——这解释了为什么 cluster 级指标没有total_*字段而 member 级有存储层字段则来自 storage.addStats其中磁盘空间细分数据/垃圾/元数据/预分配对应 RethinkDB 的space_usage子结构。测试与验证仓库为插件提供了两级测试单元测试rethinkdb_data_test.go不依赖真实服务器直接构造engine/storage结构体验证字段映射。其中TestAddEngineStatsPartial验证了字段白名单机制——只传 5 个速率类字段时累计类字段total_queries等不会出现在输出中TestAddStorageStats验证了全部 9 个存储字段均能正确落入rethinkdb数据点集成测试rethinkdb_test.go、rethinkdb_server_test.go带//go:build integration构建标签需要真实的 RethinkDB 实例通过环境变量RETHINKDB_URL缺省127.0.0.1:28015、RETHINKDB_AUTHKEY、RETHINKDB_USERNAME、RETHINKDB_PASSWORD建立连接验证版本校验、默认标签以及 cluster / member / table 三级统计的完整性。使用注意事项版本要求源码中的validateVersion硬性要求主版本号 ≥ 2不支持 RethinkDB 2.x 以下的旧版本端口约定默认驱动端口为 28015reql_port配置中的 28105 / 18832 等端口是官方示例写法以实际部署为准scheme 决定鉴权协议auth_key 鉴权必须用rethinkdb://用户名密码鉴权必须用rethinkdb2://两者不可混用见 gatherServer 实现采集粒度total_queries、total_reads、total_writes等累计类字段仅出现在typemember的数据点中做 InfluxQL/Flux 查询时需注意按type标签区分避免与 cluster / data 级指标混淆错误隔离多服务器配置下单点故障只会产生告警级错误不影响其余节点的指标采集。【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考