Журналы Airflow Live Executor с DaskExecutor - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть установка Airflow (на Kubernetes). Моя настройка использует DaskExecutor. Я также настроил удаленную регистрацию на S3. Однако, когда задача выполняется, я не вижу журнал, и вместо этого я получаю эту ошибку:

*** Log file does not exist: /airflow/logs/dbt/run_dbt/2018-11-01T06:00:00+00:00/3.log
*** Fetching from: http://airflow-worker-74d75ccd98-6g9h5:8793/log/dbt/run_dbt/2018-11-01T06:00:00+00:00/3.log
*** Failed to fetch log file from worker. HTTPConnectionPool(host='airflow-worker-74d75ccd98-6g9h5', port=8793): Max retries exceeded with url: /log/dbt/run_dbt/2018-11-01T06:00:00+00:00/3.log (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f7d0668ae80>: Failed to establish a new connection: [Errno -2] Name or service not known',))

Как только задача выполнена, журнал отображается правильно.

Я считаю, что Airflow делает:

  • для выполненных задач читайте логи с s3
  • для запуска задач, подключитесь к конечной точке сервера журналов исполнителя *1013* и покажите это.

Похоже, что Airflow использует celery.worker_log_server_port для подключения к моему исполнителю dask для получения журналов оттуда.

Как настроить DaskExecutor для предоставления конечной точки сервера журналов ?

моя конфигурация:

core    remote_logging          True 
core    remote_base_log_folder  s3://some-s3-path
core    executor                DaskExecutor    
dask    cluster_address         127.0.0.1:8786
celery  worker_log_server_port  8793    

что я проверил: - проверил, что файл журнала существует и записывается на исполнителя во время выполнения задачи - вызвал netstat -tunlp в контейнере executor, но не обнаружил лишних открытых портов, из которых можно было бы обслуживать журналы.

1 Ответ

0 голосов
/ 06 декабря 2018

UPDATE взгляните на команду serve_logs airflow cli - я считаю, что она делает то же самое.


Мы решили проблему, просто запустив Python-обработчик HTTP на рабочем месте.

Dockerfile:

RUN mkdir -p $AIRFLOW_HOME/serve
RUN ln -s $AIRFLOW_HOME/logs $AIRFLOW_HOME/serve/log

worker.sh (выполняется Docker CMD):

#!/usr/bin/env bash

cd $AIRFLOW_HOME/serve
python3 -m http.server 8793 &

cd -
dask-worker $@
...