# ============================================================================= # 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