tsdb: 没有指标来表示实际删除多少个过时系列
建议
我读过那些僵硬的系列收缩码 我觉得它的报告有漏洞
现在有6个度量 用于 Stale 和 选定系列收缩:
- " prometheus tsdb stale series compactions triggers-total " ;
- `prometheus tsdb stale series compactions failed total' "
- “prometheus tsdb stale series compaction durt seconds”
- 和所选系列紧凑的同三种
他们都告诉你 紧身衣跑掉了 没有人告诉你它是否真正释放了任何东西。
这很重要,因为驱逐是故意保守的。 `truncateStaleSeries'跳过一个序列,如果它从顺序数据中取出,得到一个新的样本,或者在块被写入时其指纹被改变. 因此,跑步可以通过50克候选人 并驱逐0他们, 从外部看,它看起来像一个跑跑 驱逐所有他们。 触发计数器上升,故障计数器保持平平,持续时间被记录,完成.
日志线也没有帮助:
开始 db.logger.Info("结束 stale系列收缩","num series",len(saleSeries Refers.sortedBy Ref),"期限",已通.
`num sers'是候选人的计数,而不是被逐出的人数。 因此,一个没有释放任何内容的跑步仍然记录着`num series=50000',它读起来像它成功了。
略为奇异的部分是数字已经存在. " truncateSeries " 返回 " len(已删除) " ,两个呼叫者将其丢弃:
开始
func (h *head) 截取StaleSeries (.) 错误{
, 错误 := h.truncateSeries(系列参考文献, maxt, func(s *emSeries) bol {
同样的事情在"TruncateSelectSeries"。
我检查了`Prometheus tsdb head series removed total'是否覆盖它,而它没有。 一个从四个不同的地方(WAL重放,普通头部gc,这个路径,和"去除SeriesByID")得到递增,所以你无法从中拉出Stale收缩.
为什么我认为它值得补充:`stele series compaction thersbold'是选择加入的,并且仍然是实验性的,所以运行它的人正是需要知道它是否有帮助的人. 在#18379中,有人打开了它,打出问题,并且正在调试一个记忆图,因为没有任何更好的东西可以看.
我自己在写一个对照这个代码的测试时, 打了一个较小的版本。 我花了一段时间 假设驱逐正在发生 当它实际上不是, 并且只是通过读 " 头. 度量. 系列 Removed " 直接。 接线员不能这么做
我的建议是:
- 候选人的计数器和按压缩类型被逐出的计数器,因此,“prometheus tsdb stale series compaction series condiates total”和“prometheus tsdb starle series compaction series evicted total”等,加上选定的系列版本。
- 在两个对数行中加上
num evicted',只留下num s系列',因此不解析对数断开
这两个数字都是有用的,因为被赶出来的人 才是你真正注意的问题, 你无法用今天的事物来区分。 如果4个新指标 感觉太多,只是被逐出的 . . . . . . .
内容来源: prometheus/prometheus