升级 Airflow 版本后远程日志记录不起作用

remote logging doesn't work after upgrading Airflow version

我们将 Airflow v2.1.4 与 Kubernetes 执行器一起使用。

我们的 k8s 集群 pods stdout 通过 filebeat -> logstash -> Elasticsearch (ELK) 自动传输。

在 logstash 中,我们正在创建 log_id 字段:

 mutate {
    copy => { "[log][offset]" => "offset" }
    # change format from "2020-04-13T17_50_00_plus_00_00" to "2020-04-13T17:50:00+00:00"
    gsub => [ "[kubernetes][labels][execution_date]", "_plus_", "+" ]
    gsub => [ "[kubernetes][labels][execution_date]", "_", ":" ]
    add_field => [ "log_id", "%{[kubernetes][labels][dag_id]}-%{[kubernetes][labels][task_id]}-%{[kubernetes][labels][execution_date]}-%{[kubernetes][labels][try_number]}" ]
 }

现在,日志可通过 airflow 网络服务器获得 - 到目前为止。

现在我们将 Airflow 升级到最新版本 v2.2.3,我们失去了远程日志功能。 仔细研究,我们发现 execution_date 标签在最新版本中被删除(替换为 run_id)。我们在发行说明和以下 PR 中看到了一些迹象: https://github.com/apache/airflow/pull/19593/files, https://github.com/apache/airflow/pull/16666.

似乎 dag_id 值不够准确,无法提取确切的执行日期(示例:scheduled__2022-01-09T0020000000-8c05ec558)。

如何让我的日志恢复为最新版本?有什么解决方法的建议吗?另一种检索日志的方法?

编辑: 文档似乎已更新(但 cfg 示例未更新)为:

log_id_template = {dag_id}-{task_id}-{run_id}-{try_number}

我会尝试并更新

我决定采用不同的方法,改用 json 日志。 这样我就不必处理所有转换并准备好 log_id

在以下答案中查看更多相关信息: