1

我们有许多 prometheus 服务器,每个服务器监控自己的区域(实际上每个区域 2 个),还有可以查询多个区域的 thanos 服务器,我们还使用 alertmanager 进行警报。

最近,我们遇到了一个问题,即很少有指标停止报告,我们只在需要指标时才发现它。我们正在尝试找出如何监控可扩展系统中报告的指标数量的变化,这些系统会根据需要增长和缩小。

我会很高兴你的建议。

4

1 回答 1

4

您可以计算头块中的时间序列数(过去 0-2 小时)或摄取样本的速率:

prometheus_tsdb_head_series

或者

rate(prometheus_tsdb_head_samples_appended_total[5m])

然后你在几分钟/几小时前将所述值与自身进行比较,例如

prometheus_tsdb_head_series / prometheus_tsdb_head_series offset 5m

并查看它是否在预期范围内(例如 90-110%),否则发出警报。

或者您可以只查看具有最高基数的指标:

topk(100, count({__name__=~".+"}) by (__name__))

但是请注意,最后一个表达式的计算成本可能非常高,因此您可能希望避免使用它。加上与 5 分钟前的比较不会那么简单:

label_replace(topk(100, count({__name__=~".+"}) by (__name__)), "metric", "$1", "__name__", "(.*)")
  /
label_replace(count({__name__=~".+"} offset 5m) by (__name__), "metric", "$1", "__name__", "(.*)")

您需要label_replace那里,因为除法的匹配是在 以外的标签上完成的__name__。在我的 Prometheus 实例上用 150k 系列计算这个最新的表达式大约需要 10 秒,所以它一点也不快。

最后,无论您选择哪种方法,您都可能会得到很多误报(无论何时开始或取消一项大型工作),以至于它不会那么有用。我个人不会费心去尝试。

于 2019-01-16T09:33:51.520 回答