在 Prometheus 警报规则的标签值中使用今天日期
Use today date in label values in Prometheus alerting rules
我是 Prometheus 和警报的新手,我无法通过查看文档来完善我的答案。
我有一些数据要进入 elasticsearch 集群。每天,该进程都会在 elasticsearch 上创建一个新索引,并将当天的数据写入该索引(例如,my_index-2019-10-06
、my_index-2019-10-05
、...)。我想监控今天索引的大小并查看它是否在增长,如果它没有在定义的时间间隔内增长(例如 15 分钟),我想在 Prometheus 中发出警报。为此,我在考虑这样一个 expr
in alert rule:
expr: delta(elasticsearch_index_primary_store_size{index_name="my_index-TODAY-DATE"}[15m] <= 0)
TODAY-DATE
应该是动态的,每天生成。但据我了解,标签值中不能有动态值,也不能有获取日期的函数。
然后我想比较所有以my_index
开头的索引的size的sum的delta,但是这个方法的问题是保留时间,如果删除一个索引,sum的delta可能是负面的,而新数据将出现在今天的指数中。
你有解决这个问题的方法吗?
提前致谢。
问题来自于您假设您会根据 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()
但你可能不想去那里。
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 索引名称。
我是 Prometheus 和警报的新手,我无法通过查看文档来完善我的答案。
我有一些数据要进入 elasticsearch 集群。每天,该进程都会在 elasticsearch 上创建一个新索引,并将当天的数据写入该索引(例如,my_index-2019-10-06
、my_index-2019-10-05
、...)。我想监控今天索引的大小并查看它是否在增长,如果它没有在定义的时间间隔内增长(例如 15 分钟),我想在 Prometheus 中发出警报。为此,我在考虑这样一个 expr
in alert rule:
expr: delta(elasticsearch_index_primary_store_size{index_name="my_index-TODAY-DATE"}[15m] <= 0)
TODAY-DATE
应该是动态的,每天生成。但据我了解,标签值中不能有动态值,也不能有获取日期的函数。
然后我想比较所有以my_index
开头的索引的size的sum的delta,但是这个方法的问题是保留时间,如果删除一个索引,sum的delta可能是负面的,而新数据将出现在今天的指数中。
你有解决这个问题的方法吗?
提前致谢。
问题来自于您假设您会根据 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()
但你可能不想去那里。
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 索引名称。