elasticsearch - 在 Prometheus 警报规则的标签值中使用今天的日期
问题描述
我是 Prometheus 和警报的新手,我无法通过查看文档来完善我的答案。
我有一些数据将进入弹性搜索集群。每天,该进程都会在elasticsearch 上创建一个新索引,并将当天的数据写入该索引(例如,、、my_index-2019-10-06
... my_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 文档首先警告的事情之一。(而在引入子查询之前,单个查询是不可能做到的;您需要设置记录规则来实现这一点。)
相反,如果您使用的是 a sum()
ofdelta()
值(并且您的导出器在删除过程中不会产生零或快速减小的索引大小指标),那么您就一切就绪。当一个索引被删除时,它的增量会默默地从产生的结果中消失,delta()
并且不会以任何方式影响结果总和。前几天的索引可能不会改变大小,因此也不会影响总和。如果发生压缩,导致索引大小突然下降,您可以过滤掉这些值:
expr: sum(delta(elasticsearch_index_primary_store_size{index_name=~"my_index-.*"}[15m]) > 0)) <= 0
count_values without() ("year", year(vector(time())))
话虽如此,您可以使用(and month()
and day_of_month()
) plus label_join()
/生成一个以今天日期为值的标签,label_replace()
但您可能不想去那里。
推荐阅读
- python - setContextProperty() 不会在 qml 文件中创建类实例
- python - 如何创建混淆矩阵来评估模型?
- javascript - 我怎样才能开始 NodeJS 帖子?
- reactjs - Json-server 使用 React js 和 Redux 响应错误 404 not found Post Method
- codeigniter - Codeigniter 完整日历集成
- python - 如何使用 pandas 进行条件选择
- yii2 - Yii2 - 将控制器扩展为现有模块
- javascript - 在 Nuxt.js 中导入单个 Vuetify 组件?
- python - 分块处理字节字符串
- javascript - 反应我想覆盖一个对象的值