Prometheus: как создавать оповещения на основе результата любой базы данных Airflow вместо определенной базы данных Airflow

#airflow #prometheus #prometheus-node-exporter

#поток воздуха #prometheus #prometheus-узел-экспортер

Вопрос:

Я установил airflow [statsd] с помощью «pip install ‘apache-airflow [statsd]» и установил statsd_exporter. Теперь я вижу показатели расхода воздуха из Prometheus. но все метрики, связанные с airflow, имеют dag_id и task_id как часть имен метрик.

Например, для идентификатора базы данных «dag1» с идентификатором задачи «task1» метриками для времени, затраченного на выполнение задачи, являются: airflow_dag_dag1_task1_duration. Для идентификатора базы данных «dag2» с идентификатором задачи «task2» метрикой является: airflow_dag_dag2_task2_duration.

что меня интересует, так это что-то вроде: вызвать оповещение, если какой-либо dag завершается неудачно, или вызвать оповещение, если для завершения dag требуется более XXX секунд. другими словами, я не хочу создавать правило и оповещение для каждой отдельной базы данных или задачи. Я хочу предупредить общую ситуацию.

Как я могу создать правило / предупреждение в Prometheus для общего случая?

Ответ №1:

Вы должны иметь возможность использовать что-то вроде приведенного ниже и основывать свое оповещение на этом:

 {__name__=~"airflow_dag. _duration"}
  

Однако имейте в виду, что если вы используете just {__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'
  

Комментарии:

1. Спасибо Saf. вы имеете в виду, что я могу записать это в файл rules yaml на сервере prometheus, как здесь? prometheus.io/docs/prometheus/latest/configuration / . … ваш код выглядит как python code not rules, поэтому я не уверен, понимаю ли я, что вы имеете в виду. можете ли вы привести мне пример, как реализовать правило оповещения, используя ваше решение?

2. Конечно, я добавил пример оповещения, которое я тестировал на своем экземпляре. Надеюсь, это даст вам что-то, что вы можете изменить для своих нужд.

3. Спасибо, Saf. это для меня в новинку. Я проверю и дам вам знать.

4. Привет, Saf. и вы сказали, что это съест процессор сервера prometheus? Я думаю, что prometheus понятия не имеет, а просто слепо анализирует необработанное слово, которое может быть причиной. но я чувствую, что мой вариант использования очень распространен. Есть ли решение для эффективного выполнения запросов prometheus? метрики airflow, которые я получаю, созданы не мной, поэтому у меня нет возможности переместить dag / task из имени метрики в метку.

5. Я имел в виду больше, если вы просто делаете {__name__=~". "} — потому что это будет список всего, пока вы устанавливаете регулярное выражение для ограничения вашего поиска, у вас все должно быть хорошо