指标配置¶
可以将 Airflow 设置为将指标发送到 StatsD 或 OpenTelemetry。
设置 - StatsD¶
要使用 StatsD,你必须先安装必需的软件包
pip install 'apache-airflow[statsd]'
然后将以下行添加到你的配置文件中,例如 airflow.cfg
[metrics]
statsd_on = True
statsd_host = localhost
statsd_port = 8125
statsd_prefix = airflow
如果你想使用自定义 StatsD 客户端,而不是 Airflow 提供的默认客户端,则必须将以下键添加到配置文件中,以及自定义 StatsD 客户端的模块路径。此模块必须在你的 PYTHONPATH
中可用。
[metrics]
statsd_custom_client_path = x.y.customclient
有关 Python 和 Airflow 如何管理模块的详细信息,请参阅 模块管理。
设置 - OpenTelemetry¶
要使用 OpenTelemetry,你必须首先安装必需的包
pip install 'apache-airflow[otel]'
将以下行添加到你的配置文件中,例如 airflow.cfg
[metrics]
otel_on = False
otel_host = localhost
otel_port = 8889
otel_prefix = airflow
otel_interval_milliseconds = 30000 # The interval between exports, defaults to 60000
otel_ssl_active = False
启用 Https¶
要建立与 OpenTelemetry 收集器的 HTTPS 连接,你需要在 OpenTelemetry 收集器的 config.yml
文件中配置 SSL 证书和密钥。
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
tls:
cert_file: "/path/to/cert/cert.crt"
key_file: "/path/to/key/key.pem"
允许/阻止列表¶
如果你想避免发送所有可用的指标,你可以配置一个允许列表或阻止列表的前缀,以仅发送或阻止以列表元素开头的指标
[metrics]
metrics_allow_list = scheduler,executor,dagrun
[metrics]
metrics_block_list = scheduler,executor,dagrun
重命名指标¶
如果你想将指标重定向到不同的名称,可以在 [metrics]
部分中配置 stat_name_handler
选项。它应该指向一个函数,该函数验证统计名称,必要时对统计名称进行更改,并返回转换后的统计名称。该函数可能如下所示
def my_custom_stat_name_handler(stat_name: str) -> str:
return stat_name.lower()[:32]
指标描述¶
计数器¶
名称 |
描述 |
---|---|
|
已启动的 |
|
已结束的 |
|
对于 |
|
运行 DAG |
|
运行 DAG |
|
操作员 |
|
操作员 |
|
操作员 |
|
操作员 |
|
总体任务实例失败。具有 DAG ID 和任务 ID 标记的指标。 |
|
总体任务实例成功。具有 DAG ID 和任务 ID 标记的指标。 |
|
以前成功的任务实例数。具有 DAG ID 和任务 ID 标记的指标。 |
|
已终止的僵尸任务。具有 DAG ID 和任务 ID 标记的指标。 |
|
调度程序心跳 |
|
当前正在运行的 DAG 解析进程的相对数(即,自上次发送指标以来,进程已完成时,此增量为负)。具有文件路径和操作标记的指标。 |
|
因耗时过长而被杀死的文件处理程序数量。带有 file_path 标记的指标。 |
|
收到的 SLA 回调数量 |
|
收到的非 SLA 回调数量 |
|
扫描文件系统并对所有现有 dag 排队的次数 |
|
(已弃用)与 |
|
已停止的 |
|
加载任何 DAG 文件的失败次数 |
|
外部杀死的任务数量。带有 dag_id 和 task_id 标记的指标。 |
|
调度程序清除的孤立任务数量 |
|
调度程序采用的孤立任务数量 |
|
调度程序进程尝试获取关键部分的锁(需要将任务发送到执行器)并发现它被另一个进程锁定的次数。 |
|
SLA 错过的数量。带有 dag_id 和 task_id 标记的指标。 |
|
SLA 错过回调通知尝试失败的次数。带有 dag_id 和 func_name 标记的指标。 |
|
SLA 错过电子邮件通知尝试失败的次数。带有 dag_id 标记的指标。 |
|
给定 dag 中已启动的任务数量。类似于 <job_name>_start,但针对任务 |
|
给定 dag 中已启动的任务数量。类似于 <job_name>_start,但针对任务。带有 dag_id 和 task_id 标记的指标。 |
|
给定 dag 中已完成的任务数量。类似于 <job_name>_end,但针对任务 |
|
给定 dag 中已完成的任务数量。类似于 <job_name>_end,但针对任务。带有 dag_id 和 task_id 标记的指标。 |
|
从 DAG 回调引发的异常数量。发生这种情况时,表示 DAG 回调不起作用。带有 dag_id 标记的指标 |
|
将任务发布到 Celery Broker 时引发的 |
|
Celery 任务的非零退出代码数量。 |
|
为给定 dag 删除的任务数量(即任务不再存在于 DAG 中)。 |
|
已从给定 DAG 中移除的任务数(即任务不再存在于 DAG 中)。具有 dag_id 和 run_type 标记的指标。 |
|
已为给定 DAG 恢复的任务数(即先前在数据库中处于 REMOVED 状态的任务实例已添加到 DAG 文件中) |
|
已为给定 DAG 恢复的任务数(即先前在数据库中处于 REMOVED 状态的任务实例已添加到 DAG 文件中)。具有 dag_id 和 run_type 标记的指标。 |
|
为给定算子创建的任务实例数 |
|
为给定算子创建的任务实例数。具有 dag_id 和 run_type 标记的指标。 |
|
触发器心跳 |
|
阻塞主线程的触发器数(可能是由于没有完全异步) |
|
在触发事件之前出错的触发器数 |
|
已触发至少一个事件的触发器数 |
|
更新的数据集数 |
|
标记为孤立的数据集数,因为它们不再在 DAG 调度参数或任务出口中被引用 |
|
由数据集更新触发的 DAG 运行数 |
仪表¶
名称 |
描述 |
---|---|
|
当调度程序基于其配置运行扫描时找到的 DAG 数 |
|
尝试解析 DAG 文件时出现的错误数 |
|
扫描和导入 |
|
要考虑用于下次扫描的 DAG 文件数 |
|
自上次处理 |
|
由于池中没有开放槽而无法调度的任务数 |
|
准备执行的任务数量(设置为排队),针对池限制、DAG 并发性、执行程序状态和优先级。 |
|
执行程序上的空闲插槽数量 |
|
执行程序上的排队任务数量 |
|
执行程序上的正在运行的任务数量 |
|
池中的空闲插槽数量 |
|
池中的空闲插槽数量。带有 pool_name 标记的指标。 |
|
池中的排队插槽数量 |
|
池中的排队插槽数量。带有 pool_name 标记的指标。 |
|
池中的正在运行的插槽数量 |
|
池中的正在运行的插槽数量。带有 pool_name 标记的指标。 |
|
池中的延迟插槽数量 |
|
池中的延迟插槽数量。带有 pool_name 标记的指标。 |
|
池中的饥饿任务数量 |
|
池中的饥饿任务数量。带有 pool_name 标记的指标。 |
|
触发器(由主机名描述)当前运行的触发器数量 |
|
触发器(由主机名描述)当前运行的触发器数量。带有主机名标记的指标。 |
计时器¶
名称 |
描述 |
---|---|
|
检查 DAG 依赖项所花费的毫秒数 |
|
检查 DAG 依赖项所花费的毫秒数。带有 dag_id 标记的指标。 |
|
运行任务所花费的秒数 |
|
运行任务所花费的秒数。带有 dag_id 和 task_id 标记的指标。 |
|
任务在排队之前在已计划状态中花费的秒数 |
|
任务在排队之前在已计划状态中花费的秒数。带有 dag_id 和 task_id 标记的指标。 |
|
任务在运行之前在已排队状态中花费的秒数 |
|
任务在运行之前在已排队状态中花费的秒数。带有 dag_id 和 task_id 标记的指标。 |
|
加载给定 DAG 文件所花费的秒数 |
|
加载给定 DAG 文件所花费的秒数。带有 file_name 标记的指标。 |
|
DagRun 达到成功状态所花费的秒数 |
|
DagRun 达到成功状态所花费的秒数。带有 dag_id 和 run_type 标记的指标。 |
|
DagRun 达到失败状态所花费的时间(秒) |
|
DagRun 达到失败状态所花费的时间(秒)。具有 dag_id 和 run_type 标记的指标。 |
|
计划的 DagRun 开始日期和实际 DagRun 开始日期之间的延迟(毫秒) |
|
计划的 DagRun 开始日期和实际 DagRun 开始日期之间的延迟(毫秒)。具有 dag_id 标记的指标。 |
|
在调度器循环的关键部分花费的时间(毫秒)——一次只能有一个调度器进入此循环 |
|
运行关键部分任务实例查询所花费的时间(毫秒) |
|
运行一个调度器循环所花费的时间(毫秒) |
|
第一个任务的 start_date 和 dagrun 预期开始时间之间的间隔(秒) |
|
第一个任务的 start_date 和 dagrun 预期开始时间之间的间隔(秒)。具有 dag_id 和 run_type 标记的指标。 |
|
从数据库中获取所有序列化 Dag 所花费的时间(毫秒) |
|
在 Kubernetes Executor 中清除未启动的已排队任务所花费的时间(毫秒) |
|
在 Kubernetes Executor 中采用任务实例所花费的时间(毫秒) |