You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:07:03