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

Telegraf采集CSV导入Prometheus仅显示最后一条数据的排查求助

问题排查与解决

核心原因

  1. Prometheus Client输出未保留原始时间戳:Telegraf的[[outputs.prometheus_client]]默认会把所有metric的时间戳替换成当前收集时间,导致同一标签组合的多条数据(比如room=room1,device=device1的不同时间温度)在每次拉取时互相覆盖,最终Prometheus只显示最后一条。
  2. 重复读取文件加剧覆盖:inputs.file每10秒读取整个CSV文件,每次读取都会生成一批同标签但时间戳被统一替换的metrics,进一步导致旧数据被新读取的同标签数据覆盖。

解决步骤

1. 修改Telegraf配置,保留原始CSV时间戳

在[[outputs.prometheus_client]]段添加配置,开启原始时间戳发送:

[[outputs.prometheus_client]]
  listen = ":9273"
  metric_version = 2  # 使用支持自定义时间戳的Prometheus输出格式v2
  send_timestamps = true  # 保留CSV中的原始时间戳

2. 调整文件读取策略(可选)

如果CSV是静态文件(不会新增内容),可以拉长读取间隔避免重复发送历史数据:

[[inputs.file]]
  files = ["/usr/temperature.csv"]
  data_format = "csv"
  csv_header_row_count=1
  csv_timestamp_column = "timestamp"
  csv_timestamp_format = "2006-01-02T15:04:05Z07:00"
  interval = "3600s"  # 每小时读取一次即可

如果CSV是增量写入的,可配置只读取新增内容:

[[inputs.file]]
  files = ["/usr/temperature.csv"]
  data_format = "csv"
  csv_header_row_count=1
  csv_timestamp_column = "timestamp"
  csv_timestamp_format = "2006-01-02T15:04:05Z07:00"
  from_beginning = false  # 不从头读取,仅处理新增行
  watch_method = "poll"  # 轮询检测文件变化

3. 验证与生效

  • 重启Telegraf:systemctl restart telegraf
  • 访问http://localhost:9273/metrics,检查是否能看到带有room、device标签,且时间戳对应CSV原始值的file_temperature指标
  • 等待Prometheus完成一次拉取(默认15秒),在Prometheus UI中查询file_temperature即可看到完整时间序列

额外注意事项

  • Prometheus仅存储最近保留期内的历史时间戳(默认30天,可通过storage.tsdb.retention.time调整),早于保留期的时间戳数据会被丢弃
  • 确保Telegraf有CSV文件读取权限:chown telegraf:telegraf /usr/temperature.csv

内容的提问来源于stack exchange,提问作者Yuvi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:54:56