气流log_id格式错误 [英] Airflow wrong log_id format
本文介绍了气流log_id格式错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是在Kubernetes中运行的Airflow v2.2.3和apache-airflow-providers-elasticsearch==2.1.0
。
我们的日志会自动发送到Elasticsearch v7.6.2。
我在气流中设置了以下配置:
AIRFLOW__LOGGING__REMOTE_LOGGING=True
AIRFLOW__ELASTICSEARCH__HOST=<my-elasticsearch-host>:9200
AIRFLOW__ELASTICSEARCH__WRITE_STDOUT=True
AIRFLOW__ELASTICSEARCH__JSON_FORMAT=True
AIRFLOW__ELASTICSEARCH__LOG_ID_TEMPLATE={dag_id}-{task_id}-{execution_date}-{try_number}
我看到stdout中的日志为json:
{
"asctime": "2022-01-20 12:13:52,292",
"filename": "taskinstance.py",
"lineno": 1032,
"levelname": "INFO",
"message": "Dependencies all met for <TaskInstance: spark_jobs_8765280.check_rawevents_output scheduled__2022-01-19T07:00:00+00:00 [queued]>",
"offset": 1642680832292384000,
"dag_id": "spark_jobs_8765280",
"task_id": "check_raweven ts_output",
"execution_date": "2022_01_19T07_00_00_000000",
"try_number": "1",
"log_id": "spark_jobs_8765280-check_rawevents_output-2022_01_19T07_00_00_000000-1"
}
我在Elasticsearch中也看到了这些字段-到目前为止还不错。 现在,我希望通过Airflow的Web服务器UI查看这些日志,但没有发生任何情况(Airflow检索日志失败)。
当我尝试手动更新日志文档并将";log_id";的格式从:
更改时"log_id": "spark_jobs_8765280-check_rawevents_output-2022_01_19T07_00_00_000000-1"
至
"log_id": "spark_jobs_8765280-check_rawevents_output-2022-01-19T07:00:00+00:00-1"
我是否查看UI中的日志!
为什么Airflow的UI尝试使用非转义的log_id
而不是正确的log_id
获取log_id
?
P.S-以下是Airflow Web服务器的日志:
[2022-01-20 14:08:21,170] {base.py:270} INFO - POST http://<my-elasticsearch-host>:9200/_count [status:200 request:0.008s]
10.1.19.65 - - [20/Jan/2022:14:08:21 +0000] "GET /get_logs_with_metadata?dag_id=spark_jobs_8765280&task_id=check_rawevents_output&execution_date=2022-01-19T07%3A00%3A00%2B00%3A00&try_number=1&metadata=%7B%22end_of_log%22%3Afalse%2C%22last_log_timestamp%22%3A%222022-01-20T14%3A05%3A55.439492%2B00%3A00%22%2C%22offset%22%3A%221691%22%7D HTTP/1.1" 200 119 "https://<my-airflow-webserver-host>/log?dag_id=spark_jobs_8765280&task_id=check_rawevents_output&execution_date=2022-01-19T07%3A00%3A00%2B00%3A00" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36"
推荐答案
我找到了问题。我有一个单独的Pod用于气流调度器和气流Webserver。
我仅将AIRFLOW__ELASTICSEARCH__JSON_FORMAT=True
添加到Airflow-Scheduler+Worker,而没有添加到Airflow-Web服务器。
我挖洞的源代码,我发现网页服务器checks对于AIRFLOW__ELASTICSEARCH__JSON_FORMAT
也是为了transform的log_id
才能把日期清理成正确的格式:
if self.json_format:
data_interval_start = self._clean_date(dag_run.data_interval_start)
data_interval_end = self._clean_date(dag_run.data_interval_end)
execution_date = self._clean_date(dag_run.execution_date)
else:
data_interval_start = dag_run.data_interval_start.isoformat()
data_interval_end = dag_run.data_interval_end.isoformat()
execution_date = dag_run.execution_date.isoformat()
这篇关于气流log_id格式错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文