ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

使用 Telegraf 采集系统指标并写入 TDengine:基于 taosAdapter 的 InfluxDB 兼容接入指南

2026/9/13 4:14:34 拓冰建站 浏览量
使用 Telegraf 采集系统指标并写入 TDengine:基于 taosAdapter 的 InfluxDB 兼容接入指南 使用 Telegraf 采集系统指标并写入 TDengine基于 taosAdapter 的 InfluxDB 兼容接入指南【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengineTelegraf 是最流行的开源指标采集软件之一在数据采集与平台监控场景中它可以免去手工编写周期性采集脚本的负担从各类组件中自动收集运行状态信息。本指南讲解如何通过 taosAdapter 提供的 InfluxDB v1 兼容写入接口把 Telegraf 采集到的系统指标写入 TDengine并利用 TDengine 对时序数据的高效存储、查询性能与集群处理能力。读完本文你将掌握 taosAdapter 与 Telegraf 的完整配置方法、数据流向与字段映射规则、子表命名定制技巧以及使用 TDengine CLI 验证数据落库的实操手段。背景为什么把 Telegraf 数据写入 TDengineTelegraf 本身是一个插件驱动的指标代理默认即可采集 CPU、内存、磁盘、磁盘 IO、内核、进程、Swap、系统负载等主机运行指标。数据采集到位之后关键在于存到哪里、怎么存。直接把 Telegraf 的输出配置指向 taosAdapter 的对应 URL再修改少量配置项即可将 Telegraf 的数据写入 TDengine。这一组合的价值在于Telegraf 负责采TDengine 负责存与查。TDengine 面向时序数据做了列式存储、压缩与分片优化并具备集群扩展能力能够承接大规模、持续增长的监控指标数据为后续的告警分析、容量规划、性能洞察提供数据底座。从数据链路看Telegraf 以 InfluxDB Line Protocol 格式通过 HTTP 把数据推送给 taosAdaptertaosAdapter 内部将其转换为 TDengine 的 schemaless无模式写入请求由 TDengine 自动建库、建超级表与子表——整个过程无需提前执行任何建表 SQL。前提条件将 Telegraf 数据写入 TDengine 需要完成以下准备TDengine 集群已完成部署并正常运行。taosAdapter已安装并正常运行。taosAdapter 是 TDengine 与数据采集代理之间的桥接适配组件详细说明参见 taosAdapter User Manual。Telegraf已安装。Telegraf 默认采集系统运行状态数据通过启用 [input plugins] 可以把其他格式的数据输出到 Telegraf再写入 TDengine。仓库的稳定性测试中即使用了典型的主机指标插件组合cpu、disk、diskio、kernel、mem、processes、swap、system参见 agent 测试用 telegraf.conf。配置步骤整个接入过程只有两步先在 taosAdapter 侧开启 InfluxDB 兼容写入能力再在 Telegraf 侧把 HTTP 输出指向 taosAdapter。第一步配置 taosAdapter编辑 taosAdapter 配置文件默认位置/etc/taos/taosadapter.toml启用以下配置# Automatically create the database when writing data with the schemaless feature if set to true. smlAutoCreateDB true [influxdb] enable true其中smlAutoCreateDB true开启数据库自动创建功能。当设置为 true 时如果收到数据时对应数据库尚不存在taosAdapter 会自动创建该数据库。在本场景中即使尚未手工执行CREATE DATABASE telegraf写入时也会自动完成建库。[influxdb] enable true开启 taosAdapter 的 InfluxDB 兼容写入接口即http://fqdn:6041/influxdb/v1/write端点。修改配置后需要重启 taosAdapter 服务使配置生效。第二步配置 Telegraf 的 outputs.http 输出模块在 Telegraf 配置文件默认位置/etc/telegraf/telegraf.conf中添加outputs.http输出模块的配置[[outputs.http]] url http://taosAdapters host:REST service port/influxdb/v1/write?dbdatabase name ... username TDengines username password TDengines password ...参数说明taosAdapters host运行 taosAdapter 服务的服务器域名或 IP 地址。REST service portREST 服务端口默认是6041。TDengines username、TDengines password按实际运行的 TDengine 用户配置填写。database name希望 Telegraf 数据在 TDengine 中保存到的数据库名。一个可直接复用的完整示例与仓库测试框架中使用的方式一致参见 telegraf.conf[[outputs.http]] url http://127.0.0.1:6041/influxdb/v1/write?dbtelegraf method POST timeout 5s username root password taosdata data_format influx要点data_format influx表示 Telegraf 以 InfluxDB Line Protocol 格式输出这是 taosAdapter 兼容接口识别的协议。可通过 URL 查询参数进一步控制写入行为。taosAdapter 的 InfluxDB v1 写入接口支持以下参数详见 taosAdapter User Manualdb指定 TDengine 使用的数据库名。precision指定 TDengine 使用的时间精度。u/pTDengine 用户名与密码。ttl自动创建的子表的生命周期由子表首条数据的 TTL 参数决定且不可更新。table_name_key子表名的自定义标签键。若设置子表名将使用该标签键对应的值。目前 taosAdapter 的 InfluxDB 兼容接口不支持 token 认证方式仅支持 Basic 认证与查询参数认证。即上面示例中通过username/password字段提交凭据。第三步重启 Telegraf 服务配置完成后重启 Telegraf 使配置生效sudo systemctl restart telegraf验证方法数据是否成功写入 TDengine重启 Telegraf 后使用 TDengine CLI 验证数据是否从 Telegraf 写入 TDengine 并可被正确读取taos show databases; name | information_schema | performance_schema | telegraf | Query OK, 3 rows in database (0.010568s) taos use telegraf; Database changed. taos show stables; name | swap | cpu | system | diskio | kernel | mem | processes | disk | Query OK, 8 row(s) in set (0.000521s) taos select * from telegraf.system limit 10; ts | load1 | load5 | load15 | n_cpus | n_users | uptime | uptime_format | host | 2022-04-20 08:47:50.000000000 | 0.000000000 | 0.050000000 | 0.070000000 | 4 | 1 | 5533 | 1:32 | shuduo-1804 | 2022-04-20 08:48:00.000000000 | 0.000000000 | 0.050000000 | 0.070000000 | 4 | 1 | 5543 | 1:32 | shuduo-1804 | 2022-04-20 08:48:10.000000000 | 0.000000000 | 0.040000000 | 0.070000000 | 4 | 1 | 5553 | 1:32 | shuduo-1804 | Query OK, 3 row(s) in set (0.013269s)上述输出展示了三条关键信息telegraf数据库已被自动创建smlAutoCreateDB生效每个 Telegraf 指标measurement对应一张超级表swap、cpu、system、diskio、kernel、mem、processes、disksystem超级表下已存在子表数据列结构包含时间戳ts、load1、load5、load15、n_cpus、n_users、uptime、uptime_format与标签列host每 10 秒一个采样点。深入原理InfluxDB 行协议到 TDengine 数据模型的映射理解数据如何落库有助于排查问题与定制建表行为。TDengine 的 schemaless 写入行协议兼容 InfluxDB 的 Line Protocol其格式为measurement,tag_set field_set timestampmeasurement表名映射为超级表名与tag_set之间以逗号分隔。tag_set形如tag_keytag_value,tag_keytag_value代表标签列数据多个标签以逗号分隔与field_set之间以空格分隔。field_set形如field_keyfield_value,field_keyfield_value代表普通数据列多个列以逗号分隔与timestamp之间以空格分隔。timestamp本行数据的主键时间戳。映射到 TDengine 的规则为measurement 映射为超级表名tag_set 中的标签名映射为 schema 中的标签field_set 中的名称映射为普通列名。以 schemaless 写入参考文档TDengine Schemaless Writing Reference Guide中的示例数据为例st,t13,t24,t3t3 c13i64,c3passit,c2false,c44f64 1626006833639000000这行数据将创建超级表st包含 3 个 nchar 类型的标签t1、t2、t3以及 5 个数据列tstimestamp、c1bigint、c3binary、c2bool、c4double等价于如下 SQLcreate stable st (_ts timestamp, c1 bigint, c2 bool, c3 binary(6), c4 bigint) tags(t1 nchar(1), t2 nchar(1), t3 nchar(2))对应到 Telegraf 场景system是超级表load1、n_cpus等是数据列host是标签列。值得注意的 schemaless 处理规则还包括字段类型自动扩展对于 BINARY 或 NCHAR 列若数据行提供的值长度超过列类型限制会自动增大该列的最大存储长度只增不减保证数据完整存储。缺失列置空若超级表中已存在某些标签列或普通列但某行数据未指定该行中这些列的值会被置为 NULL。大小写敏感schemaless 写入中的超级表名、子表名区分大小写。底层约束每行数据总长度不能超过 48KB从版本 3.0.5.0 起为 64KB标签值总长度不能超过 16KB。批量写入的非原子性多行批量写入过程中可能出现部分成功、部分失败的情况写入具备幂等性可对之前失败的数据重复调用写入接口。定制子表名smlChildTableName 与表名生成规则默认情况下TDengine 接收 InfluxDB 格式数据时自动生成的子表名是按规则计算出的唯一 ID将 measurement 与标签的键值组合成字符串measurement,tag_key1tag_value1,tag_key2tag_value2标签按标签名升序排序而非用户输入顺序对该字符串计算 MD5 哈希值md5_val再拼接为表名t_md5_val——t_是固定前缀。这种表名虽然唯一但可读性较差。如果希望指定生成的子表名可在taos.cfg中配置smlChildTableName参数并通过控制输入数据格式来指定表名。例如配置smlChildTableNametname插入数据st,tnamecpu1,t14 c13 1626006833639000000则创建的表名为cpu1。注意如果多行数据具有相同的tname但后续的 tag_set 不同则以首行自动建表时指定的 tag_set 为准其余行会被忽略。另一种指定子表名的方式是配置smlAutoChildTableNameDelimiter取值不能包含 # 空格 CR LF tab例如配置smlAutoChildTableNameDelimiter-后插入st,t0cpu1,t14 c13 1626006833639000000创建的表名为cpu1-4。两种方式中smlAutoChildTableNameDelimiter优先级更高。从源码看smlChildTableName是 taos.cfg 的客户端动态配置项定义于 tglobal.c支持客户端动态生效其语义说明见 taosc 配置参考 中的 schemaless 相关小节smlChildTableName为schemaless 中自定义子表名的键smlAutoChildTableNameDelimiter为schemaless 标签拼接为子表名时的分隔符两者均无默认值。仓库中的 schemaless 配置测试test_write_sml_cfg.py也覆盖了通过客户端配置smlChildTableName与smlAutoChildTableNameDelimiter来驱动子表命名的场景。此外需要注意Telegraf 数据落地形成的超级表与子表与通过 SQL 直接创建的没有功能差异仍可直接用 SQL 写入或查询。但官方建议 schemaless 场景下由系统自动建表手工建表可能导致未知错误同时 schemaless 写入不支持带第二复合主键列的表。常见注意事项数据库命名与自动创建URL 中的db参数决定落库位置配合smlAutoCreateDB true可免去手工建库步骤。时间精度InfluxDB Line Protocol 下 Telegraf 默认以纳秒精度输出时间戳可在 URL 中通过precision参数显式指定精度schemaless 写入支持小时、分钟、秒、毫秒、微秒、纳秒等多种时间精度定义。认证方式InfluxDB 兼容接口仅支持 Basic 认证与查询参数认证不支持 token 认证。子表命名可读性默认t_md5_val式命名可读性差监控场景下如需按主机名等维度区分可结合smlChildTableName或smlAutoChildTableNameDelimiter与 Telegraf 的标签构造可读的子表名。重启顺序修改 taosAdapter 配置后需重启 taosAdapter修改 Telegraf 配置后需执行sudo systemctl restart telegraf验证前确保两侧服务均运行正常。完成上述配置后你的 Telegraf 采集链路便已与 TDengine 打通主机监控指标将持续、自动地流入 TDengine供后续查询分析与集群化存储使用。【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考