【问题标题】:Use today date in label values in Prometheus alerting rules在 Prometheus 警报规则的标签值中使用今天的日期
【发布时间】:2020-03-03 05:04:12
【问题描述】:

我是 Prometheus 和警报的新手,我无法通过查看文档来确定我的答案。

我有一些数据将进入弹性搜索集群。每天,该进程都会在 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,但是这种方法的问题是保留时间,如果删除了一个索引,总和的delta可能是负数,而新数据将出现在今日指数中。 你有解决这个问题的方法吗?

提前致谢。

【问题讨论】:

    标签: elasticsearch prometheus prometheus-alertmanager promql elasticsearch-indices


    【解决方案1】:

    问题来自您假设您将根据时间序列的sum()delta() 发出警报,这是 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() 生成一个以今天日期为值的标签,但您可能不想去那里。

    【讨论】:

    • 感谢您的回答。我认为这是有道理的。我认为expr 会是这样的:expr: sum(delta(elasticsearch_index_primary_store_size{index_name=~"my_index-*"}[15m]) &lt;= 0) 如果您认为有道理,请修改答案中的 expr,以便我将其标记为已接受?
    • 非常接近,但条件需要为&gt; 0(或&gt;= 0;或其他一些阈值)。您想要过滤大小增加的索引,而不是过滤掉它们。已编辑。
    • 由于我希望在索引未增长时触发警报,因此我需要将条件设置为&lt;=0。但除此之外,我想我犯了一个错误,条件应该在sum 函数之外。像这样:sum(delta(elasticsearch_index_primary_store_size{index_name=~"^my_index-.*"}[15m])) &lt;= 0
    • 再次编辑。您的警报条件确实需要为&lt;= 0。我添加的&gt;= 0 条件用于计算增长率:您可能希望过滤掉任何尺寸减小的索引(例如,因为它们正在被删除或压缩),以便它们不影响您的计算。
    【解决方案2】:

    可以使用Elasticsearch别名来避免每天指定(动态)索引名的问题,见https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

    也就是说,您可以使用当前索引名称的别名。例如,my_favourite_today_index 可以指向my_favourite_index_2019-11-07 并每天更新(cronjob 或其他方法)。这种方法将允许您在 prometheus 中指定 predefined 索引名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2021-01-01
      • 2021-04-23
      • 1970-01-01
      • 2020-07-12
      相关资源
      最近更新 更多