TDengine 接入 icinga2 监控指标通过 taosAdapter OpenTSDB Telnet 接口实现监控数据入库【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine本文讲解如何把开源监控软件 icinga2 采集到的主机与服务监控指标检查结果、性能数据无缝写入 TDengine。核心方案是在 taosAdapter 中启用 OpenTSDB Telnet 协议监听并让 icinga2 的opentsdb-writer特性将数据发往 taosAdapter 对应的端口默认为 6048。读完全文你将掌握完整的 taosAdapter 与 icinga2 两侧配置步骤、opentsdb_telnet各参数的取值与端口/数据库映射关系以及入库结果的验证方法。方案背景icinga2 为什么可以直接对接 TDengineicinga2 是一款开源主机、网络监控软件最初由 Nagios 网络监控应用发展而来目前遵从 GNU GPL v2 许可协议发行。它内置了opentsdb-writer特性可以在监控检查结果产生后将指标和性能数据以 OpenTSDB 的 telnet 协议put语义推送到远端接收端。taosAdapter 是 TDengine 集群和应用程序之间的桥梁除 WebSocket、InfluxDB v1、Prometheus 等接口外还提供兼容 OpenTSDB JSON 和 telnet 格式的数据写入能力并明确支持 icinga2 OpenTSDB writer 数据写入见 taosAdapter 参考手册 的功能列表。因此只需把 icinga2 的 OpenTSDB writer 指向 taosAdapter 的服务器和相应端口即可利用 TDengine 对时序数据的高效存储查询性能和集群处理能力来长期保存 icinga2 的监控数据整体数据链路为icinga2 (opentsdb-writer, telnet 协议) │ put icinga.xxx timestamp value tag... ▼ taosAdapter [opentsdb_telnet] 监听 6046~6049 │ 按端口区分来源schemaless 无模式写入 ▼ TDengine 数据库 icinga2自动创建超级表 规则生成的子表前置条件要将 icinga2 数据写入 TDengine需要完成以下几方面准备工作TDengine 集群已经部署并正常运行taosAdapter 已经安装并正常运行taosAdapter 随 TDengine server 一同安装安装完成后可用systemctl start taosadapter启动具体细节请参考 taosAdapter 参考手册icinga2 已经安装安装方式请参考 icinga2 官方安装文档。配置步骤一配置 taosAdapter 接收 icinga2 数据在 taosAdapter 配置文件默认位置/etc/taos/taosadapter.toml中使能opentsdb_telnet相关配置# 写入 Schemaless 数据时自动创建数据库 smlAutoCreateDB true [opentsdb_telnet] enable true maxTCPConnections 250 tcpKeepAlive false dbs [opentsdb_telnet, collectd, icinga2, tcollector] ports [6046, 6047, 6048, 6049] user root password taosdata各配置项说明如下默认值与 taosAdapter 参考手册 中 OpenTSDB 配置参数一节一致enable启用 OpenTSDB Telnet 协议支持默认值为false此处必须显式打开。注意该接口本身没有认证机制生产环境建议通过网络层控制访问来源portsOpenTSDB Telnet 监听端口默认值为[6046, 6047, 6048, 6049]。四个端口分别对应不同的数据来源6046 对应 OpenTSDB 客户端、6047 对应 collectd、6048 对应 icinga2、6049 对应 tcollectordbs指定各端口写入的目标数据库与ports按位置一一对应6046 → opentsdb_telnet、6047 → collectd、6048 → icinga2、6049 → tcollector。也就是说icinga2 数据默认写入名为icinga2的数据库如果希望改用其他库名例如手册中另一套默认命名icinga2_tsdb只需修改dbs中第 3 个元素即可。user 和 password 需填写实际 TDengine 配置的用户名密码maxTCPConnections最大 TCP 连接数默认值250tcpKeepAlive是否启用 TCP KeepAlive默认值falsesmlAutoCreateDB这是全局配置项用于控制在 schemaless无模式协议写入时是否自动创建数据库。设置为true时taosAdapter 会在接收到数据时自动创建对应的数据库如果不存在如果保持默认false则必须手动创建icinga2数据库否则写入会失败。配置完成后需要重启 taosAdapter 使配置生效sudo systemctl restart taosadapter配置步骤二配置 icinga2 的 OpenTSDB writer使能 icinga2 的opentsdb-writer特性例如执行icinga2 feature enable opentsdb特性启用后会在features-enabled目录下生成对应配置文件修改配置文件/etc/icinga2/features-enabled/opentsdb.conf填写 taosAdapter 所在服务器的域名或 IP 地址以及 taosAdapter 接收 icinga2 数据的端口默认为 6048object OpenTsdbWriter opentsdb { host taosAdapters host port port for icinga2 }本机部署 taosAdapter 与 icinga2 时的完整示例object OpenTsdbWriter opentsdb { host 127.0.0.1 port 6048 }修改后重启 icinga2 使配置生效sudo systemctl restart icinga2验证方法等待 10 秒左右后使用taos客户端 shell 查询 TDengine验证是否创建了相应数据库并写入数据taos show databases; name | information_schema | performance_schema | icinga2 | Query OK, 3 row(s) in set (0.001867s) taos use icinga2; Database changed. taos show stables; name | icinga.service.users.state_... | icinga.service.users.acknow... | icinga.service.procs.downti... | icinga.service.users.users | icinga.service.procs.procs_min | icinga.service.users.users_min | icinga.check.max_check_atte... | icinga.service.procs.state_... | icinga.service.procs.procs_... | icinga.service.users.users_... | icinga.check.latency | icinga.service.procs.procs_... | icinga.service.users.downti... | icinga.service.users.users_... | icinga.service.users.reachable | icinga.service.procs.procs | icinga.service.procs.acknow... | icinga.service.procs.state | icinga.service.procs.reachable | icinga.check.current_attempt | icinga.check.execution_time | icinga.service.users.state | Query OK, 22 row(s) in set (0.002317s)从查询结果可以看到taosAdapter 按照 icinga2 指标的命名把不同指标自动组织成了超级表stables例如icinga.check.latency、icinga.check.current_attempt、icinga.check.execution_time、icinga.check.max_check_attempt检查check流程相关的性能指标icinga.service.users.*、icinga.service.procs.*icinga2 服务自身的运行状态指标users、procs 状态以及_min、downtime、acknowledgement、reachable等派生序列。注意TDengine 中默认生成的子表名是根据规则生成的唯一 ID 值而不是人为可读的名称这是 schemaless 写入的默认行为。仓库中的实现佐证自动化测试如何复刻这条链路本仓库的稳定性测试框架内置了一个专门用于验证该链路的 icinga2 容器环境与上文的手动配置一一对应可以当作一份可参考的部署样板容器构建脚本 icinga2/Dockerfile基于 Ubuntu 20.04 安装icinga2、monitoring-plugins与systemctl执行icinga2 feature enable opentsdb启用 opentsdb 特性然后通过环境变量TaosadapterIp默认127.0.0.1、TaosadapterPort默认6048声明 taosAdapter 的地址与端口并用Icinga2Interval默认10s控制检查模板的间隔特性配置文件模板 opentsdb.confobject OpenTsdbWriter opentsdb { host TaosadapterIp port TaosadapterPort }与官方文档中的配置结构完全一致仅把地址与端口留作占位符容器入口脚本 entrypoint.sh在容器启动时用sed将占位符替换为实际注入的TaosadapterIp/TaosadapterPort值随后执行systemctl restart icinga2——这与本文修改配置后重启 icinga2的步骤一致测试框架的工具脚本 taosadapter.py 中维护了 taosAdapter 的默认 TOML 配置字典其中包含opentsdb_telnet: {enable: True}即测试环境同样通过开启opentsdb_telnet监听来接收 telnet 协议的 OpenTSDB 数据印证了 taosAdapter 侧的使能方式是opentsdb_telnet.enable true。常见问题与注意事项端口与库名的映射dbs与ports是按顺序对应的icinga2 固定使用第 3 个端口默认 6048对应的库名是dbs数组第 3 个元素。若要调整库名只改dbs不改ports即可无需改动 icinga2 侧配置自动建库保持smlAutoCreateDB true可以让 taosAdapter 在首条数据到达时自动创建icinga2数据库省去手工CREATE DATABASE若关闭该选项写入前必须先建库接口无认证OpenTSDB Telnet 接口没有认证机制user/password是 taosAdapter 与 TDengine 之间的连接凭据而不是 icinga2 侧的登录信息。生产环境建议在防火墙或安全组层面限制 6046~6049 端口的访问来源生效方式taosAdapter 与 icinga2 两侧配置修改后都需要重启对应服务systemctl restart taosadapter/systemctl restart icinga2命名说明入库后的子表名为 TDengine 按规则生成的唯一 ID查询时建议以超级表show stables中列出的指标名为入口聚合查询。完整步骤与验证结果参见 icinga2 写入taosAdapter 侧参数详解参见 taosAdapter 参考手册。【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考