Apache Airflow官方提供了statsd的指标采集功能,我们可以基于statsd来监控Airflow集群整体的运行情况,结合Prometheus及Grafana对采集的指标进行展示并设置告警功能,保障Airflow集群在出现故障的时候能够及时的处理。
1.Airflow集群指标采集及数据展示整体流程
整个采集流程分为3个大的步骤:
a.在安装statsd并且在airflow.cfg开启statsd后,Airflow集群会推送相关监控的指标到指定的statsd server中
b.我们使用statsd_exporter来代替statsd,以此将statsd采集的指标转化成Prometheus可以识别的格式,在Prometheus的 prometheus.yml 文件中配置 statsd_export服务,即可采集Airflow集群上报的指标
c.再通过Grafana软件连接Prometheus Server,展示采集的指标,达到可视化的一个功能。且可以结合AlertManager配置告警功能,以此保障Airflow集群出现故障能够及时被通知及处理。
2.软件安装及配置
我们使用docker快速的对用到的软件进行安装(实际在生产使用的时候尽可能复用现有的组件)
2.1 statsd_exporter
docker pull prom/statsd-exporter
创建 statsd_exporter目录
mkdir /opt/soft/statsd_export
下载 从statsd格式转成Prometheus格式指标的mapping文件
wget https://raw.githubusercontent.com/databand-ai/airflow-dashboards/main/statsd/statsd.conf
cp statsd.conf statsd_mapping.yml
运行statsd_exporter
docker run -d -p 9102:9102 -p 9125:9125 -p 9125:9125/udp \
-v $PWD/statsd_mapping.yml:/tmp/statsd_mapping.yml \
prom/statsd-exporter --statsd.mapping-config=/tmp/statsd_mapping.yml
在浏览器中输入 statsd_export_host:9102, 出现如下页面说明运行成功
2.2 airflow.cfg配置修改
接着,我们对Airflow的airflow.cfg文件进行配置
[metrics] # 2.0版本在 [metrics] 模块下配置, 1.10 版本在 [core] 模块下配置
# StatsD (https://github.com/etsy/statsd) integration settings.
# Enables sending metrics to StatsD.
statsd_on = True
statsd_host = statsd_exporter_host # statsd_exporter 的 ip 如 192.168.3.15
statsd_port = 9125
statsd_prefix = airflow
配置完后重启Apache Airflow集群,重启正常不报错说明配置是OK的。
我们还可以在 statsd_exporter_host:9102 页面进一步验证, 出现相关指标监控信息了,说明配置是OK的。
2.3 Prometheus
下载promethues镜像
docker pull prom/prometheus
添加statsd_exporter的配置到prometheus.yml文件中
mkdir /opt/soft/prometheus
cd /opt/soft/prometheus
vim prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['127.0.0.1:9090']
- job_name: airflow
static_configs:
- targets: ['statsd_exporter_host:9102'] # 注意将 statsd_exporter_host 进行替换
启动prometheus 服务
docker run -d --name prometheus -p 9090:9090 -v /opt/soft/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml
使用浏览器进行验证
点击Status -> Targets
看到statsd_exporter的state已经变成了UP状态,说明prometheus.yml的配置是OK的。
2.4 Grafana
运行grafana
docker run -d --name grafana -p 3000:3000 grafana/grafana
成功启动后在浏览器中 输入 grafana_host:3030, 初次登陆使用 admin/admin进行验证,后需要更改密码,按照提示走就行。
grafana登陆界面截图:
prometheus 数据源配置
在主页面上选择Configuration -> Data Sources
然后点击Add data source
选择Prometheus数据源
填入Name \ Prometheus 的URL 信息
点击Save & Test, 出现 Data Source is Working说明添加Prometheus数据源是成功的。
3.Airflow Dashboard配置
3.1下载airflow dashboard模板
我们从github下载Databand开源的一个Airflow Dashboard配置文件,其中包含两个Dashboard,一个是整个集群的运行情况,另一个是单个的dag运行的情况。
https://github.com/databand-ai/airflow-dashboards/
3.2将airflow dashboard模板导入到grafana中
下载下来了之后,在主页依次点击 Create -> Import
再点击upload json file,选择cluster-dashboard.json / dag-dashboard.json 文件, 点击确认导入airflow dashboard模板
点击确认后即可看到下面这个Dashboard, 由于没有配置数据源,现在所看到的数据都是Grafana随机生成的
3.3 Airflow Dashboard指标配置实例
在页面上点击edit即可配置Airflow采集的Prometheus数据源,选择与标题相匹配的指标即可正常的对Airflow的指标进行可视化.
我们以Scheduler heartbeat这个指标为例,演示一下如何进行将数据源替换成我们配置的的Promethues数据源.
先选中Scheduler heartbeat,然后会弹出一个对话框,再点击edit进入到指标编辑页面.
选择我们刚刚配置的Prometheus For Airflow数据源
点击Metrics -> af -> af_agg_scheduler_heart_beat,即可展示出这个 scheduler heatbeat这个指标的数据
在选择指标的时候要根据title来选,选择与title相应的metrics, 及下图中的 a 要与 c 相匹配。
下面就是我们所监控的Airflow集群的Scheduler heartbeat这个指标的监控情况,点击Appy可以回到刚刚的Dashboard页面
这样一个指标就配置成功了。
按照上面的步骤可以依次的对其余的指标进行配置。
4.总结
本文对Airflow的指标监控的实施进行了一个讲解,只是起到了一个引路的作用,在实践中更好的对Airflow进行监控还需要参考Airflow Metrics及Grafana的文档。
更多关于Apache Airflow的文章,请查看 Apache Airflow系列文章。
若在实践中遇到什么问题的话,欢迎大家加入Apache Airflow 技术交流群进行讨论.
或者加入QQ群 704721809。
参考资料:
[1] Everyday Data Engineering: Monitoring Airflow with Prometheus, StatsD and Grafana
[2] Monitoring Apache Airflow using Prometheus
https://www.redhat.com/en/blog/monitoring-apache-airflow-using-prometheus
[3] Apache Airflow Metrics Page
https://airflow.apache.org/docs/apache-airflow/stable/logging-monitoring/metrics.html
[4] statsd_export github page
https://github.com/prometheus/statsd_exporter
[5] Configure Prometheus and Grafana in Dockers
https://medium.com/aeturnuminc/configure-prometheus-and-grafana-in-dockers-ff2a2b51aa1d