首页 > 解决方案 > Prometheus:如何根据任何 Airflow Dag 而不是特定 Airflow Dag 的结果创建警报

问题描述

我使用“pip install 'apache-airflow[statsd]' 安装了气流 [statsd] 并安装了 statsd_exporter。现在我可以看到来自 Prometheus 的气流指标。但所有与气流相关的指标都有 dag_id 和 task_id 作为指标名称的一部分。

例如,对于任务 ID 为“task1”的 dag id“dag1”,完成任务所用时间的指标是:airflow_dag_dag1_task1_duration。对于任务 ID 为“task2”的 dag id“dag2”,指标为:airflow_dag_dag2_task2_duration。

我感兴趣的是:如果任何 dag 失败,则触发警报,或者如果 dag 完成时间超过 XXX 秒,则触发警报。换句话说,我不想为每个单独的 dag 或任务创建规则和警报。我想提醒一般情况。

如何在 Prometheus 中为通用案例创建规则/警报?

标签: airflowprometheusprometheus-node-exporter

解决方案


您应该能够使用类似下面的内容并以此为基础发出警报:

{__name__=~"airflow_dag.+_duration"}

但是请注意,如果您只使用{__name__=~".+"}它是一个昂贵的查询,并且可能会破坏需要重新启动 Prometheus 服务的实例。

更新以包括示例警报:

- alert: Saf_Test
  expr: ({__name__=~"windows_cpu.+_total"} > 5.8281319e+07)
  for: 5m
  labels:
    severity: warning
  annotations:
    description: 'Alert text here'
    summary: 'Summary here'

推荐阅读