elasticsearch - 在Prometheus警报规则的标签值中使用“今天”日期

标签 elasticsearch prometheus prometheus-alertmanager promql elasticsearch-indices

我是Prometheus和警报方面的新手,我无法通过查看文档来完善答案。

我有一些数据即将进入Elasticsearch集群。每天,该过程都会在Elasticsearch上创建一个新索引,并将当天的数据写入该索引(例如my_index-2019-10-06my_index-2019-10-05,...)。我想监视今天的索引大小,看看它在增长,如果它没有在定义的时间间隔内增长(例如15分钟),我想在Prometheus中发出警报。为此,我正在考虑警报规则中的此类expr:

expr: delta(elasticsearch_index_primary_store_size{index_name="my_index-TODAY-DATE"}[15m] <= 0)
TODAY-DATE应该是动态的,并且每天生成。但是据我了解,标签值中不能有动态值,而日期中也没有函数。
然后我在考虑比较以my_index开头的所有索引的总和的增量,但是此方法的问题是保留时间,如果删除索引,则总和的增量可能为负,而新数据即将进入今天的指数。
您对此问题有解决方案吗?

提前致谢。

最佳答案

问题来自您的假设,即您将基于时间序列的delta()sum()发出警报,这是Prometheus文档警告的最早内容之一。 (而且,在引入子查询之前,用单个查询是不可能做到的;您需​​要设置记录规则来实现这一点。)

相反,如果您使用的是sum()值的delta()(并且您的导出程序在删除过程中不会产生零或迅速减小的索引大小度量),则一切就绪。删除索引后,其增量只会从delta()产生的结果中静默消失,并且不会以任何方式影响结果总和。前几天的索引可能不会改变大小,因此也不会影响总数。而且如果有进行压缩,导致索引大小突然减小,您可以过滤掉这些值:

expr: sum(delta(elasticsearch_index_primary_store_size{index_name=~"my_index-.*"}[15m]) > 0)) <= 0

话虽如此,您可以使用count_values without() ("year", year(vector(time())))(以及month()day_of_month())加上label_join() / label_replace()生成一个以今天的日期为值的标签,但是您可能不想去那里。

关于elasticsearch - 在Prometheus警报规则的标签值中使用“今天”日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58734793/

相关文章:

apache-spark - Spark : writeStream' can be called only on streaming Dataset/DataFrame

Prometheus:pod 被杀死后如何求和?

Prometheus 抛出 "bad response status 401 Unauthorized"- 即使指定了正确的配置 "basic_auth_users"

kubernetes - Prometheus Operator Alertmanager - 自定义规则 - 在 config.plain 类型中找不到字段组

python - 使用 Prometheus 中的指标监控批处理作业的状态

azure - Helm 不接受 YAML 值

elasticsearch - 在 Elasticsearch 中无法更改 “maxClauseCount”值

python - 从Python使用Elasticsearch API时已删除的文档

java - 如何解决elasticsearch中的AccessDeniedException?

prometheus - Prometheus中有详细的日志吗?