gpt4 book ai didi

Airflow - 无法从工作人员获取日志文件。 404 客户端错误 : NOT FOUND for url

转载 作者:行者123 更新时间:2023-12-03 14:43:17 24 4
gpt4 key购买 nike

我正在使用 Celery Executor 运行 Airflowv1.9。我有 5 个 Airflow worker 在 5 台不同的机器上运行。 Airflow 调度程序也在其中一台机器上运行。我在这 5 台机器上复制了相同的 airflow.cfg 文件。
我在不同的队列中设置了日常工作流程,例如 DEV、QA 等(每个工作人员都使用一个单独的队列名称运行),这些队列运行良好。

在其中一个工作程序中安排 DAG(之前没有为此工作程序/机器设置其他 DAG)时,我看到第一个任务中的错误,因此下游任务失败:

*** Log file isn't local.
*** Fetching here: http://<worker hostname>:8793/log/PDI_Incr_20190407_v2/checkBCWatermarkDt/2019-04-07T17:00:00/1.log
*** Failed to fetch log file from worker. 404 Client Error: NOT FOUND for url: http://<worker hostname>:8793/log/PDI_Incr_20190407_v2/checkBCWatermarkDt/2019-04-07T17:00:00/1.log

我已经配置了 MySQL 来存储 DAG 元数据。当我检查 task_instance 表时,我看到针对任务填充了正确的主机名。

我还检查了日志位置,发现正在创建日志。

Airflow .cfg 片段:
base_log_folder = /var/log/airflow
base_url = http://<webserver ip>:8082
worker_log_server_port = 8793
api_client = airflow.api.client.local_client
endpoint_url = http://localhost:8080

我在这里缺少什么?为了解决这个问题,我还需要额外检查哪些配置?

最佳答案

看起来工作人员的主机名没有被正确解析。
添加文件 hostname_resolver.py :

import os
import socket
import requests
def resolve():
"""
Resolves Airflow external hostname for accessing logs on a worker
"""
if 'AWS_REGION' in os.environ:
# Return EC2 instance hostname:
return requests.get(
'http://169.254.169.254/latest/meta-data/local-ipv4').text
# Use DNS request for finding out what's our external IP:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('1.1.1.1', 53))
external_ip = s.getsockname()[0]
s.close()
return external_ip

并导出: AIRFLOW__CORE__HOSTNAME_CALLABLE=airflow.hostname_resolver:resolve

关于 Airflow - 无法从工作人员获取日志文件。 404 客户端错误 : NOT FOUND for url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55588755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com