Airflow与Grafana集成
外观
Airflow与Grafana集成[编辑 | 编辑源代码]
介绍[编辑 | 编辑源代码]
Apache Airflow是一个用于编排、调度和监控工作流的平台,而Grafana是一个开源的指标可视化工具。将两者集成可以实现对Airflow任务的实时监控、日志分析和性能优化。本指南将详细介绍如何配置Airflow与Grafana的集成,帮助用户通过可视化仪表盘监控DAG运行状态、任务延迟、资源使用率等关键指标。
前置条件[编辑 | 编辑源代码]
- 已安装并运行Airflow(建议版本≥2.0)
- 已部署Grafana(建议版本≥7.0)
- 熟悉Airflow基础概念(如DAG、Operator)
配置步骤[编辑 | 编辑源代码]
1. 启用Airflow指标导出[编辑 | 编辑源代码]
Airflow通过Prometheus暴露指标数据。需在`airflow.cfg`中启用以下配置:
[metrics]
statsd_on = True
statsd_host = localhost
statsd_port = 9125
statsd_prefix = airflow
[api]
enable_experimental_api = True
然后安装Prometheus exporter:
pip install 'apache-airflow[statsd]'
2. 配置Prometheus抓取数据[编辑 | 编辑源代码]
在Prometheus的`prometheus.yml`中添加Airflow作业:
scrape_configs:
- job_name: 'airflow'
static_configs:
- targets: ['airflow-webserver:8080']
metrics_path: '/admin/metrics/'
3. Grafana数据源配置[编辑 | 编辑源代码]
1. 登录Grafana,导航到`Configuration > Data Sources` 2. 添加Prometheus数据源,填写URL(如`http://prometheus:9090`)
4. 导入Airflow仪表盘[编辑 | 编辑源代码]
Grafana社区提供现成的Airflow仪表盘模板(ID:11010),通过以下步骤导入: 1. 导航到`Create > Import` 2. 输入模板ID或上传JSON文件
关键指标说明[编辑 | 编辑源代码]
以下为常用监控指标示例:
airflow.dagrun.duration.success
- 成功DAG运行耗时airflow.task_elapsed_time
- 任务执行时间airflow.pool.running_slots
- 资源池使用情况
实际案例[编辑 | 编辑源代码]
场景:监控ETL流水线[编辑 | 编辑源代码]
某电商公司使用Airflow运行每日订单ETL,通过Grafana实现:
1. **延迟告警**:当时触发Slack通知
2. **资源优化**:根据pool.running_slots
调整并发数
示例查询[编辑 | 编辑源代码]
# 查询最近24小时失败任务
sum(airflow_task_failures_total{namespace="prod"}[24h]) by (dag_id, task_id)
高级配置[编辑 | 编辑源代码]
自定义指标[编辑 | 编辑源代码]
通过PythonOperator注入自定义指标:
from airflow.operators.python import PythonOperator
from statsd import StatsClient
def track_custom_metric(**context):
statsd = StatsClient()
statsd.incr('custom.metric')
task = PythonOperator(
task_id='log_metric',
python_callable=track_custom_metric
)
Mermaid可视化[编辑 | 编辑源代码]
故障排除[编辑 | 编辑源代码]
- **指标缺失**:检查Airflow日志确认statsd服务连通性
- **数据延迟**:调整Prometheus的`scrape_interval`
- **权限问题**:确保Grafana有权限读取Prometheus
最佳实践[编辑 | 编辑源代码]
1. 为生产环境配置单独的Prometheus实例 2. 使用标签区分开发/生产环境(如`env=prod`) 3. 定期清理过期指标避免存储压力
延伸阅读[编辑 | 编辑源代码]
- Airflow官方文档:Metrics部分
- Grafana文档:Alert Rules配置
- PromQL语法指南