Prometheus监控文件数量:avg_over_time结果异常问题排查
问题分析与解决方案
你的指标计算确实存在错误
直接对累计计数器指标txt_files_data__total使用avg_over_time是错误的,原因如下:
txt_files_data__total是单调递增的累计计数器,它的值是服务启动以来的总文件数,会随时间持续增长。avg_over_time(txt_files_data__total{instance="localhost:9999",job="python"}[24h:1m])计算的是过去24小时内,每1分钟采样点上的累计文件数平均值,这和你需要的「每分钟生成文件数的平均值」完全不是同一个概念,必然会得到远大于预期的异常数值。
正确的计算方式
要得到过去24小时内每分钟生成文件数的平均值,需要先计算每个1分钟窗口的文件增量,再对这些增量求平均:
avg_over_time( increase(txt_files_data__total{instance="localhost:9999",job="python"}[1m])[24h:1m] )
逻辑拆解:
- 内层的
increase(...)计算每个1分钟窗口内的文件增量(即该分钟生成的文件数),和你已实现的「每分钟生成文件数」逻辑一致。 - 外层的
avg_over_time(...)会把过去24小时内所有1分钟窗口的增量值取平均,得到你需要的「过去24小时每分钟平均生成数」。
预期值匹配说明
按你的服务逻辑,每30秒生成2个文件,正常情况下每分钟生成4个文件。加上偶尔手动上传的文件,整体平均值会略高于4,和你预期的4.777左右的数值匹配。
内容的提问来源于stack exchange,提问作者tech_data
相关产品推荐
相关产品推荐

