如何通过Telegraf聚合器按数据库汇总InfluxDB分片磁盘占用
问题描述
我有一个简单的Telegraf配置文件,用于收集InfluxDB分片占用的磁盘空间(数据来自InfluxDB的端点,符合官方文档推荐):
[agent] hostname = "docker-debian" flush_interval = "10s" interval = "10s" # GET THE DISK USAGE OF THE INFLUXDB DATABASES, FROM INFLUXDB'S OWN INTERNAL MONITORING SYSTEM [[inputs.influxdb]] urls = ["http://influxdb_container:8086/debug/vars"] namepass = ["influxdb_shard"] fieldpass = ["diskBytes"] taginclude = ["database","path"] # SEND ALL THE DATA TO THE REMOTE INFLUXDB INSTANCE [[outputs.influxdb]] database = "telegraf" urls = [ "http://influxdb_container:8086" ]
目前数据库中收到的是每个path、每个database的单独数据:
> select * from influxdb_shard where time>now()-10s name: influxdb_shard time database diskBytes path ---- -------- --------- ---- 1749720160000000000 homeassistant 495041 /var/lib/influxdb/data/homeassistant/autogen/100 1749720160000000000 homeassistant 548397 /var/lib/influxdb/data/homeassistant/autogen/101 1749720160000000000 homeassistant 461434 /var/lib/influxdb/data/homeassistant/autogen/103 1749720160000000000 homeassistant 324464 /var/lib/influxdb/data/homeassistant/autogen/107 1749720160000000000 homeassistant 455053 /var/lib/influxdb/data/homeassistant/autogen/115 1749720160000000000 telegraf 6674052 /var/lib/influxdb/data/telegraf/autogen/160 1749720160000000000 telegraf 6176482 /var/lib/influxdb/data/telegraf/autogen/170 1749720160000000000 telegraf 6614880 /var/lib/influxdb/data/telegraf/autogen/176 1749720160000000000 telegraf 7104037 /var/lib/influxdb/data/telegraf/autogen/184
我希望先汇总每个database下所有path的diskBytes,再将每个database的总占用量发送到InfluxDB,而非发送单个path的数据。请问能否通过Telegraf聚合器/处理器实现该需求?
解决方案
完全可以通过Telegraf的聚合器实现这个需求,具体用[[aggregators.sum]]配置按database标签汇总diskBytes字段,同时清理冗余标签,保证数据简洁。
修改后的完整配置如下:
[agent] hostname = "docker-debian" flush_interval = "10s" interval = "10s" # 收集InfluxDB分片磁盘占用数据 [[inputs.influxdb]] urls = ["http://influxdb_container:8086/debug/vars"] namepass = ["influxdb_shard"] fieldpass = ["diskBytes"] taginclude = ["database","path"] # 按database标签汇总diskBytes总和 [[aggregators.sum]] ## 仅对influxdb_shard指标生效 namepass = ["influxdb_shard"] ## 按database标签分组聚合 tagpass = ["database"] ## 指定需要汇总的字段 fieldpass = ["diskBytes"] ## 聚合后仅保留database标签,移除path taginclude = ["database"] ## 聚合窗口与采集周期保持一致 period = "10s" ## 立即输出聚合结果,无延迟 delay = "0s" # 发送聚合后的数据到InfluxDB [[outputs.influxdb]] database = "telegraf" urls = [ "http://influxdb_container:8086" ]
配置说明
aggregators.sum会在每个10秒采集周期内,将同一database下的所有diskBytes值求和taginclude = ["database"]确保聚合后的数据只保留必要的database标签,去掉冗余的path标签period与agent.interval同步,保证每个周期内的分片数据都被完整汇总
最终效果
聚合后写入InfluxDB的数据会变成每个database一行的总占用量,示例如下:
> select * from influxdb_shard where time>now()-10s name: influxdb_shard time database diskBytes ---- -------- --------- 1749720160000000000 homeassistant 2284389 1749720160000000000 telegraf 26569451
内容的提问来源于stack exchange,提问作者teeeeee
相关产品推荐
相关产品推荐

