如何检查气流测试的输出?

时间:2018-09-10 13:45:50

标签: airflow

我尝试了气流教程DAG,它可与调度程序一起使用,我可以看到调度运行生成的日志。但是,如果我使用命令行测试,则看不到输出:

airflow test my_tutorial_2 templated 2018-09-08
[2018-09-10 15:41:43,121] {__init__.py:51} INFO - Using executor SequentialExecutor
[2018-09-10 15:41:43,281] {models.py:258} INFO - Filling up the DagBag from /Users/xiang/Documents/BigData/airflow/dags
[2018-09-10 15:41:43,338] {example_kubernetes_operator.py:54} WARNING - Could not import KubernetesPodOperator: No module named 'kubernetes'
[2018-09-10 15:41:43,339] {example_kubernetes_operator.py:55} WARNING - Install kubernetes dependencies with:     pip install airflow['kubernetes']

这就是全部输出,而我的输出不存在。

气流版本为:

▶ pip list
Package          Version
---------------- ---------
alembic          0.8.10
apache-airflow   1.10.0

3 个答案:

答案 0 :(得分:3)

如果使用Ariflow v1.10,可以将taskinstance logger的传播属性设置为True,则日志记录将传播到使用控制台处理程序的root logger,并打印到sys.stdout。

添加ti.log.propagate = True 在第589行到 site-packages / airflow / bin / cli.py 之后可以做到这一点。

答案 1 :(得分:2)

自那以后,我发现在将“控制台”设置为airflow.task记录器时,您可以看到“ airflow test”命令的输出,这似乎也导致“ airflow run”命令进入无限循环并耗尽内存。因此,我只会在只想运行“气流测试”命令的环境中这样做

我尚不知道为什么这样做,对于我来说,是否有办法在不中断“气流运行”的情况下完成此问题尚不清楚

Airflow 1.10.0的默认日志记录配置具有以下可用的记录器:

'loggers': {
    'airflow.processor': {
        'handlers': ['processor'],
        'level': LOG_LEVEL,
        'propagate': False,
    },
    'airflow.task': {
        'handlers': ['task'],
        'level': LOG_LEVEL,
        'propagate': False,
    },
    'flask_appbuilder': {
        'handler': ['console'],
        'level': FAB_LOG_LEVEL,
        'propagate': True,
    }
},

airflow.task 记录器(运行任务时使用的记录器)使用'task'处理程序:

'handlers': {
    'console': {
        'class': 'airflow.utils.log.logging_mixin.RedirectStdHandler',
        'formatter': 'airflow',
        'stream': 'sys.stdout'
    },
    'task': {
        'class': 'airflow.utils.log.file_task_handler.FileTaskHandler',
        'formatter': 'airflow',
        'base_log_folder': os.path.expanduser(BASE_LOG_FOLDER),
        'filename_template': FILENAME_TEMPLATE,
    },
    'processor': {
        'class': 'airflow.utils.log.file_processor_handler.FileProcessorHandler',
        'formatter': 'airflow',
        'base_log_folder': os.path.expanduser(PROCESSOR_LOG_FOLDER),
        'filename_template': PROCESSOR_FILENAME_TEMPLATE,
    },
},

(除非更改),否则只会将任务的输出写入日志文件。如果还要在stdout中查看输出,则需要将 console 处理程序添加到 airflow.task 记录器使用的处理程序列表中:

'airflow.task': {
    'handlers': ['task', 'console'],
    'level': LOG_LEVEL,
    'propagate': False,
},

这可以通过设置覆盖默认配置的自定义日志记录配置类或通过编辑默认设置文件来完成

every_you_installed_airflow / site-packages / airflow / config_templates / airflow_local_settings.py

答案 2 :(得分:1)

我也遇到了AirFlow 1.10.0的问题。正如Louis Genasi所提到的,airflow run将会陷入默认设置和控制台处理程序的死循环。我怀疑1.10.0中的默认日志记录类可能存在错误。

我通过将日志处理程序更改为Python的logging.StreamHandler(在Airflow <1.10.0中似乎是默认设置)解决了这个问题:

'handlers': {
    'console': {
        'class': 'logging.StreamHandler',
        'formatter': 'airflow',
        'stream': 'ext://sys.stdout'
},
'loggers': {
    'airflow.processor': {
        'handlers': ['console'],
        'level': LOG_LEVEL,
        'propagate': False,
    },
    'airflow.task': {
        'handlers': ['console'],
        'level': LOG_LEVEL,
        'propagate': False,
    },
    'flask_appbuilder': {
        'handler': ['console'],
        'level': FAB_LOG_LEVEL,
        'propagate': True,
    }
},
'root': {
    'handlers': ['console'],
    'level': LOG_LEVEL,
}