Исключение файла журнала воздушного потока

Я использую воздушный поток apache для запуска своих дагов.

Я получаю исключение:


*** Log file does not exist: /opt/airflow/logs/download2/download2/2020-07-26T15:00:00+00:00/1.log
*** Fetching from: http://fb3393f5f01e:8793/log/download2/download2/2020-07-26T15:00:00+00:00/1.log
*** Failed to fetch log file from worker. HTTPConnectionPool(host='fb3393f5f01e', port=8793): Max retries exceeded with url: /log/download2/download2/2020-07-26T15:00:00+00:00/1.log (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f8ba66d7b70>: Failed to establish a new connection: [Errno 111] Connection refused',))

Мой файл docker для веб-сервера, планировщика и postgres:

version: "2.1"
services:
  postgres_airflow:
    image: postgres:12
    environment:
        - POSTGRES_USER=airflow
        - POSTGRES_PASSWORD=airflow
        - POSTGRES_DB=airflow
    ports:
        - "5432:5432"

  postgres_Service:
    image: postgres:12
    environment:
        - POSTGRES_USER=developer
        - POSTGRES_PASSWORD=secret
        - POSTGRES_DB=service_db
    ports:
        - "5433:5432"
 
  scheduler:
    image: apache/airflow
    restart: always
    depends_on:
      - postgres_airflow
      - postgres_Service
      - webserver
    env_file:
      - .env
    volumes:
        - ./dags:/opt/airflow/dags
    command: scheduler
    healthcheck:
        test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
        interval: 30s
        timeout: 30s
        retries: 3

  webserver:
    image: apache/airflow
    restart: always
    depends_on:
        - pg_airflow
        - pg_metadata
        - tenants-registry-api
        - metadata-api
    env_file:
      - .env
    volumes:
        - ./dags:/opt/airflow/dags
        - ./scripts:/opt/airflow/scripts
    ports:
        - "8080:8080"
    entrypoint: ./scripts/airflow-entrypoint.sh
    healthcheck:
        test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
        interval: 30s
        timeout: 30s
        retries: 3

Я получаю это исключение при использовании PythonVirtualenvOperator.

Мой файл DAG:

from datetime import datetime

from airflow import DAG

from airflow.operators.python_operator import PythonOperator

default_args = {'owner': 'airflow',
                'start_date': datetime(2018, 1, 1)
                }

dag = DAG('download2',
          schedule_interval='0 * * * *',
          default_args=default_args,
          catchup=False)


def hello_world_py():
    return "data"


with dag:
    t1 = PythonOperator(
        task_id='download2',
        python_callable=hello_world_py,
        op_kwargs=None,
        provide_context=True,
        dag=dag
    )


env файл:

AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql://airflow:airflow@postgres_airflow:5432/airflow
AIRFLOW__CORE__FERNET_KEY=XXXX
AIRFLOW_CONN_METADATA_DB=postgres://developer:secret@postgres_Service:5432/service_db
AIRFLOW__VAR__METADATA_DB_SCHEMA=service_db
AIRFLOW__WEBSERVER__BASE_URL=http://0.0.0.0:8080/

Я также явно установил AIRFLOW__CORE__REMOTE_LOGGING=False, чтобы отключить удаленные журналы, но по-прежнему получаю исключение. Также попробовал разместить все внутри мостовой сети. У меня ничего не работало, правда DAG проходит.

Также пробовал добавить:

    image: apache/airflow
    restart: always
    depends_on:
      - scheduler
    volumes:
      - ./dags:/opt/airflow/dags
    env_file:
      - .env
    ports:
    - 8793:8793
    command: worker

У меня не сработало

2 ответа

Вам нужно открыть порт рабочего журнала сервера (настройка worker_log_server_port в airflow.cfg, по умолчанию 8793) в docker-compose, например:

worker:
  image: apache/airflow
  ...
  ports:
    - 8793:8793

Вот немного другой подход, который я видел, как несколько человек использовали при запуске и в своих собственных контейнерах и использовании (что, как я предполагаю, здесь имеет место):

  1. Смонтируйте каталог журнала хоста как том в обоих schedulerа также webserverконтейнеры:
          volumes:
        - /location/on/host/airflow/logs:/opt/airflow/logs
  1. Убедитесь, что пользователь находится в контейнерах воздушного потока (обычно airflow) имеет права на чтение и запись в этот каталог. Если разрешения неверны, вы увидите ошибку, подобную той, что в вашем сообщении.

Это, вероятно, не будет масштабироваться дальше LocalExecutorхотя использование.

Другие вопросы по тегам