多客户服务器独立Airflow实例监控方案求建议
多独立Airflow实例监控整合方案
方案一:用Airflow内置Prometheus Exporter替代StatsD,简化配置
Airflow 1.10及以上版本自带Prometheus指标导出功能,无需额外部署StatsD,配置步骤更直接:
- 每台客户服务器的Airflow实例,修改
airflow.cfg开启内置导出器:[metrics] statsd_on = False prometheus_on = True prometheus_port = 9102 # 自定义端口,确保服务器防火墙开放该端口 - 重启Airflow的webserver和scheduler,验证指标可访问:执行
curl http://<服务器IP>:9102/metrics,能看到Airflow相关指标即为正常 - 在你的监控服务器上配置Prometheus,添加所有Airflow实例的采集目标:
scrape_configs: - job_name: 'airflow_clusters' static_configs: - targets: ['server1:9102', 'server2:9102', 'server3:9102'] # 替换为实际服务器IP和端口 # 若服务器是动态新增的,可改用file_sd_configs(从文件读取目标)或服务发现(如DNS、Consul) - Grafana中直接导入官方Airflow仪表板(在Grafana仪表板市场搜索Airflow,选择高评分的比如ID 10991),将数据源切换为你的Prometheus,就能统一查看所有实例的DAG成功率、任务延迟、资源占用等指标。
方案二:代理采集适配隔离环境(客户服务器无法被直接访问)
如果客户服务器处于隔离网络,无法被你的Prometheus直接拉取指标,可采用推送式采集:
- 每台客户服务器部署
node_exporter(采集服务器CPU、内存等基础指标)+ Airflow内置Prometheus Exporter,再部署prometheus-pushgateway作为本地代理 - 编写简单脚本,定期将Airflow和服务器指标推送到本地pushgateway,再通过SFTP/内部API将指标同步到监控服务器的中心pushgateway
- 监控服务器的Prometheus配置采集中心pushgateway,统一收集所有实例的指标
- Grafana配置同上,实现聚合可视化
方案三:基于Airflow REST API批量拉取指标
如果监控组件部署受限,可直接通过API方式整合数据:
- 每台Airflow实例开启REST API:修改
airflow.cfg设置api_auth_backend = airflow.api.auth.backend.default,重启webserver - 编写Python/Shell脚本,定期调用各实例的API接口:
GET http://<服务器IP>:8080/api/v1/dags获取所有DAG状态GET http://<服务器IP>:8080/api/v1/dags/<dag_id>/dagRuns获取DAG运行记录
- 将脚本收集到的数据存入时序数据库(如InfluxDB、TimescaleDB)
- Grafana连接该数据库,自定义仪表板展示所有实例的聚合统计数据
你之前StatsD方案失败的常见排查点
- 检查StatsD Exporter是否接收到Airflow指标:查看exporter日志,或访问
http://<服务器IP>:9102/metrics,确认存在airflow_前缀的指标 - 验证Prometheus采集配置:确保目标服务器IP/端口可达,监控服务器和客户服务器之间的防火墙允许对应端口的流量
- 核对Grafana指标名称:StatsD会给指标添加前缀(比如
statsd.airflow_dag_run_success),需和仪表板中的查询语句匹配
内容的提问来源于stack exchange,提问作者Litesh Garg
相关产品推荐
相关产品推荐

