К сожалению я так и не нашёл нормального эспортёра для метрик.
Пробовал около 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 не умеет в хранение этого в переменных).
- пилим
- в новом гит репозитории создаём файл
/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.pyORC_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 и почта мне неудобна.
Однако этот способ алёртинга пока единственно мне известный способ выводить точную и Детальную(!) информацию.