TGViewer
Make. Build. Break. Reflect. Make. Build. Break. Reflect. @makebreakreflect · 1.37K subscribers
Post #60 420
Airflow. Алёртинг.

К сожалению я так и не нашёл нормального эспортёра для метрик.
Пробовал около 5 разных, все не ок и пахнут коричневой магией.
В основном метрики "у вас где-то что-то случилось, возможно упал DAG, но я не знаю почему и это не точно".
В худшем варианте экспортёры вообще не сообщали, что падают даги.

Решено использовать нативный способ алёртинга на email.😭
Ниже описание для AirFlow, задеплоенный в кубернетес через helm chart.
---
name: airflow
namespace: airflow
repoURL: https://airflow.apache.org/
targetRevision: 1.11.0
chart: airflow


Порядок действия:
- добавляем новый git репозиторий для хранения файлов
В GIT у нас будут храниться html темплейты(airflow не умеет в хранение этого в переменных).
- пилим GitLab PAT токен service account bot для доступа к git
- в новом гит репозитории создаём файл
/templates/html_content_template.html

https://gist.github.com/kruchkov-alexandr/a5c5387e1ba5cac773d60aa144fa6a90
* в данном примере я напихал в html ВСЁ!!!.
Вы можете сформировать свой формат html файла, который будет приходить к вам на почту.
Можно оставить только кластер и ошибку, можно ссылку на лог упавшего дага. Как вам удобнее.

С гитом мы закончили. переходим к чарту AirFlow и его values.
- добавляем креды для SMTP
config:
smtp:
smtp_host: smtp.sendgrid.net
smtp_starttls: True
smtp_ssl: False
smtp_user: *****
smtp_password: ****
smtp_port: 587
smtp_mail_from: "no-reply@pupupu.ded"

Используя эти креды будут рассылаться письма.
- добавляем сайдкар контейнер, который будет запускаться рядом с AirFlow и запихивать к себе вовнутрь html темплейт (вовнутрь контейнера в директорию /opt/airflow/ )
  extraContainers:
...
- name: git-sync-templates
image: registry.k8s.io/git-sync/git-sync:v4.1.0
volumeMounts:
- name: templates
mountPath: /templates
env:
- name: GITSYNC_REPO
value: https://****/templates-airflow.git
- name: GITSYNC_REF
value: master
- name: GITSYNC_ROOT
value: /templates
- name: GITSYNC_LINK
value: repo
- name: GITSYNC_PERIOD
value: 60s
- name: GITSYNC_ONE_TIME
value: "false"
- name: GITSYNC_USERNAME
value: airflow-git-sync
- name: GITSYNC_PASSWORD
valueFrom:
secretKeyRef:
name: airflow-gitsync-password
key: password

- теперь переходим к переменным, которые будут отвечать за темплейтирование
  env:
- name: AIRFLOW__EMAIL__HTML_CONTENT_TEMPLATE
value: /opt/airflow/templates/repo/templates/html_content_template.html

Тут мы говорим откуда брать html шаблон
- ну и наконец включаем сам алёртинг через переменные
  # email notifications:
- name: ORC_ALERT_ON_FAILURE
value: "True"
- name: ORC_FAILURE_EMAIL
value: "airflow-alerts@pupupu.ded"


Финальная часть не забываем в глобал конфиге(уже в DAG) добавить в global_config.py
ORC_FAILURE_EMAIL = os.getenv("ORC_FAILURE_EMAIL")
ORC_ALERT_ON_FAILURE = os.getenv("ORC_ALERT_ON_FAILURE") in ["True", "true"]

AIRFLOW_DEFAULT_ARGS = {
"owner": "airflow",
"email": ["pupupu@pupupu.ded" if is_development() else ORC_FAILURE_EMAIL],
"email_on_failure": ORC_ALERT_ON_FAILURE,
"email_on_retry": False,
"retries": 0,
"retry_delay": timedelta(seconds=10),
}

* у вас может отличаться, спросите у ваших датасатанистов как настроен alerting!!! и я хз почему исторически там префикс orc.

Как это работает вкратце:
- airflow стартует, сайдкар тянет из гита html шаблон
- падает DAG
- AirFlow берёт свои данные и переменные, генерирует на базе html шаблона ответ и отправляет на почту
- вы получаете сообщение
- профит

Неудобно? Да, мне неудобно.
Я привык к Slack и почта мне неудобна.
Однако этот способ алёртинга пока единственно мне известный способ выводить точную и Детальную(!) информацию.
  • 😁 2
  • 👍 1
More from @makebreakreflect
  1. Sep 25, 2026#пятница Ждём, чо. А вообще да, заебали эти охринительно полезные новости с невероятными д…
  2. Sep 25, 2026#kubernetes - https://laravel-news.com/laravel-health-kubernetes-prometheus Жаль, что тако…
  3. Sep 24, 2026Но стоит взять задачу из смежной области, где общее понимание есть, а глубокой экспертизы…
  4. Sep 23, 2026В удивительнейшее время живём. - https://typesafe.ai/blog/introducing-system-one-models-an…
  5. Sep 22, 2026#aws #elasticache #redis #kubernetes #troubleshooting #devops #sre #longread Ничего не пре…
  6. Sep 18, 2026Вся эта неделя была очень странной. Опус отупел до уровня 3 модели. Фейбл сжигает токены б…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →