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

Monitor the status of batch jobs using metrics in Prometheus

我们的几个应用程序都有每晚聚合数据的批处理作业。这些批处理作业是 Python 脚本,使用 Prometheus Pushgateway 将指标值推送到 Prometheus,并且我们有规则在这些指标变得无效(例如超过某个阈值)时触发警报(在 Alertmanager 中)。

我们现在还想使用 Prometheus 指标来仔细检查批处理作业本身 运行 是否正确:例如,作业是否准时开始?有没有发生错误?作业 运行 完成了吗?为此,我们想更改 Python 脚本以在脚本开始和结束时以及发生任何错误时推送指标。但这确实引发了一些问题:我们有相当多的批处理作业,每个批处理作业有 3 个指标,需要为 rules/alerts 创建大量手动配置;我们还想在 Grafana 中以图形方式显示状态,但不确定正确的视觉效果是什么样的。

有没有其他人试图解决类似的问题以使用 Prometheus 指标来监视多个批处理作业的状态?您记录了哪些指标,您的 alerts/rules 是什么样子的?您是否找到了一种直观的方式来以图形方式显示每个批处理作业的状态?

您可以为每个名为 last_run_at 的批处理作业公开一个指标。 然后您可以根据作业是否 运行 超过 24 小时(或任何您的阈值)发出警报。

一个简单的警报是:last_run_at{env="prod"} < scalar(time()) - 60 * 60 * 24

Prometheus 中的 time() 函数对此很有用。 文档:https://prometheus.io/docs/prometheus/latest/querying/functions/#time

您不必为每个作业都发出警报。您可以对过去 24 小时内没有 运行 的任何作业发出警报。或者您可以按环境或任何其他标签进行过滤。

重点是它不必是 1:1 的作业才能发出警报。 您也应该能够在 Grafana 中相当轻松地绘制图表。

你也可以使用https://prometheus.io/docs/prometheus/latest/querying/functions/#absent or https://prometheus.io/docs/prometheus/latest/querying/functions/#absent_over_time 示例:缺席(max_over_time(some_metric[1h]))