Airflow KubernetesExecutor, журналы не отображаются в пользовательском интерфейсе до завершения выполнения модулей исполнителя

Я начал использовать KubernetesExecutor и настроил PV / PVC с AWS EFS для хранения журналов для моих дагов. Я также использую удаленное ведение журнала s3.

Все журналы работают отлично после завершения дага. Однако я хочу иметь возможность видеть журналы моих заданий, поскольку они выполняются в течение длительного времени.

Когда я запускаю свой модуль планировщика, пока работает модуль исполнителя, я могу видеть файла текущего выполняемого задания из-за общего EFS. Однако, когда я создаю файл журнала, я не вижу журналы, пока исполнитель все еще работает. Однако после того, как исполнитель завершит работу, я могу видеть полные журналы как при загрузке файла, так и в пользовательском интерфейсе воздушного потока.

Как ни странно, с другой стороны, когда я запускаю модуль-исполнитель во время его работы и использую тот же файл журнала в общей EFS, я могу видеть правильные журналы до этого момента в задании, и когда я непосредственно из планировщика или проверить пользовательский интерфейс, я также могу просмотреть журналы до этого момента.

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

Вот переменные конфигурации, которые я устанавливаю, обратите внимание, что эти переменные env устанавливаются в моих модулях веб-сервера / планировщика и исполнителя:

      # ----------------------
# For Main Airflow Pod (Webserver & Scheduler)
# ----------------------
export PYTHONPATH=$HOME
export AIRFLOW_HOME=$HOME
export PYTHONUNBUFFERED=1

# Core configs
export AIRFLOW__CORE__LOAD_EXAMPLES=False
export AIRFLOW__CORE__SQL_ALCHEMY_CONN=${AIRFLOW__CORE__SQL_ALCHEMY_CONN:-postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:5432/$DB_NAME}
export AIRFLOW__CORE__FERNET_KEY=$FERNET_KEY
export AIRFLOW__CORE__DAGS_FOLDER=$AIRFLOW_HOME/git/dags/$PROVIDER-$ENV/

# Logging configs
export AIRFLOW__LOGGING__BASE_LOG_FOLDER=$AIRFLOW_HOME/logs/
export AIRFLOW__LOGGING__REMOTE_LOGGING=True
export AIRFLOW__LOGGING__REMOTE_LOG_CONN_ID=aws_default
export AIRFLOW__LOGGING__REMOTE_BASE_LOG_FOLDER=s3://path-to-bucket/airflow_logs
export AIRFLOW__LOGGING__TASK_LOG_READER=s3.task
export AIRFLOW__LOGGING__LOGGING_CONFIG_CLASS=config.logging_config.LOGGING_CONFIG

# Webserver configs
export AIRFLOW__WEBSERVER__COOKIE_SAMESITE=None

Моя конфигурация ведения журнала выглядит так, как в вопросе здесь

Я думал, что это может быть проблема с буферизацией Python, поэтому добавил , но это не помогло. Это происходит независимо от того, использую ли я или BashOperator

Неужели журналы K8sExecutors просто не будут доступны во время их выполнения? Только после? Или мне не хватает какой-то конфигурации?

2 ответа

У меня была такая же проблема, и это то, что мне помогло - стоит проверить их на своей стороне

  • PYTHONUNBUFFERED=1недостаточно, но необходимо просматривать логи в реальном времени. Пожалуйста, сохраните это
  • смонтировать EFS в сети, в планировщике и в шаблоне pod_template (исполнитель).
  • Ваш опыт с завершением файла журнала после завершения задачи заставляет меня задаться вопросом, есть ли у PVC, который вы используете для журналов, ReadWriteMany accessMode
  • Идентичны ли пути в разных капсулах? Включают ли они полный формат задачи, например efs/logs/dag_that_executes_via_KubernetesPodOperator/task1/2021-09-21T19\:00\:21.894859+00\:00/1.log? Спрашиваю, потому что до того, как я подключил EFS во всех местах (планировщик, веб, pod_template), я мог получить доступ только к журналам исполнителей, которые не включают имя задачи и время задачи
  • есть папка журналов EFS, принадлежащая воздушному потоку (для меня uid 50000, потому что, возможно, придется подготовить это из другого места), корень группы, режим 755
  • не настроен AIRFLOW__LOGGING__LOGGING_CONFIG_CLASS. Прежде чем вводить настраиваемую конфигурацию ведения журнала, постарайтесь, чтобы все работало как можно более ванильно.

Если у вас настроено удаленное ведение журнала, я понимаю, что после завершения задачи в первой строке пользовательского интерфейса будет указано Reading remote log from, но что вам говорит первая строка, когда задача выполняется? reading remote или упоминание об использовании локального файла журнала?

  • Если там написано об удаленном доступе, это будет означать, что у вас не везде подключена EFS.
  • Если он говорит о локальном, я бы проверил ваши настройки EFS (readwritemany), а также владение каталогом и режим

В этом случае воздушный поток указано работает, какв документации :

Журналы появляются в вашей DFS только после завершения задачи.

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