У меня есть установка 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, но не обнаружил лишних открытых портов, из которых можно было бы обслуживать журналы.