AirflowDAGMonitor/zabbix/airflow-monitor.conf
Maksim Totmin bc437cbf8c feat: добавил систему мониторинга Airflow DAG-ов с интеграцией в Zabbix
- автообнаружение Docker Airflow через docker inspect и .env
- мониторинг failed и long-running DAG-запусков с автоматическим retry
- экспорт данных в файлы для Zabbix Agent через UserParameter
- офлайн-сборка ZIP-архива для закрытых контуров
- Zabbix шаблоны для 5.x (XML) и 6.x+ (YAML)
- systemd сервис с graceful shutdown и lock file
2026-04-08 17:23:03 +07:00

33 lines
2.2 KiB
Plaintext

# =============================================================================
# Zabbix Agent UserParameter — Airflow DAG Monitor
#
# Устанавливается в /etc/zabbix/zabbix_agentd.conf.d/airflow-monitor.conf
# Zabbix agent читает файлы, записанные сервисом airflow-monitor,
# и передаёт данные на Zabbix Server/Proxy через стандартный канал агента.
#
# Файлы данных:
# /var/lib/airflow-monitor/problems.json — JSON массив проблемных DAG-ов
# /var/lib/airflow-monitor/heartbeat — epoch timestamp последнего цикла
# /var/lib/airflow-monitor/status.json — статус монитора (JSON)
# =============================================================================
# Список проблемных DAG-ов (JSON text)
# Zabbix item: type=Zabbix agent, key=airflow.dag.problems, type of info=Text
UserParameter=airflow.dag.problems,cat /var/lib/airflow-monitor/problems.json 2>/dev/null || echo '[]'
# Количество проблемных DAG-ов (для простых триггеров)
# Zabbix item: type=Zabbix agent, key=airflow.dag.problems.count, type of info=Numeric (unsigned)
UserParameter=airflow.dag.problems.count,python3 -c "import json,sys; print(len(json.load(open('/var/lib/airflow-monitor/problems.json'))))" 2>/dev/null || echo 0
# Heartbeat — epoch timestamp последнего успешного цикла
# Zabbix item: type=Zabbix agent, key=airflow.monitor.heartbeat, type of info=Numeric (unsigned)
UserParameter=airflow.monitor.heartbeat,cat /var/lib/airflow-monitor/heartbeat 2>/dev/null || echo 0
# Статус монитора (JSON: cycle_count, dag_count, issue_count, cycle_time)
# Zabbix item: type=Zabbix agent, key=airflow.monitor.status, type of info=Text
UserParameter=airflow.monitor.status,cat /var/lib/airflow-monitor/status.json 2>/dev/null || echo '{}'
# Проверка что сервис запущен (1 = работает, 0 = остановлен)
# Zabbix item: type=Zabbix agent, key=airflow.monitor.alive, type of info=Numeric (unsigned)
UserParameter=airflow.monitor.alive,systemctl is-active airflow-monitor >/dev/null 2>&1 && echo 1 || echo 0