写日志

译者:@ImPerat0R_@ThinkingChen

在本地写日志

用户可以使用在airflow.cfg中的base_log_folder指定日志文件夹。默认情况下,它位于AIRFLOW_HOME目录中。

此外,用户也可以提供远程位置,以便在云存储中存储日志和日志备份。

在Airflow Web UI中,本地日志优先于远程日志。 如果找不到或访问本地日志,将显示远程日志。 请注意,只有在任务完成(包括失败)后才会将日志发送到远程存储。 换句话说,运行任务的远程日志不可用。日志以{dag_id}/{task_id}/{execution_date}/{try_number}.log的路径格式存储在日志文件夹中。

将日志写入Amazon S3

在您开始之前

远程日志记录使用现有的Airflow连接来读取/写入日志。如果没有正确设置连接,则会失败。

启用远程日志记录

要启用此功能,必须按照此示例配置airflow.cfg

  1. [core]
  2. # Airflow可以在AWS S3中远程存储日志。用户必须提供一个远程地址的URL(以's3://...'开始)
  3. # 和一个提供对存储位置访问的Airflow连接id
  4. remote_base_log_folder = s3://my-bucket/path/to/logs
  5. remote_log_conn_id = MyS3Conn
  6. # 对存储在S3中的日志使用服务器端加密
  7. encrypt_s3_logs = False

在上面的例子中,Airflow将尝试使用S3Hook('MyS3Conn')

将日志写入Azure Blob Storage

在Azure Blob Storage中Airflow可以为配置读取和写入任务日志。 可以按照以下步骤启用Azure Blob Storage日志记录。

  1. Airflow的日志记录系统需要将一个自定义的 .py文件 放在PYTHONPATH,以便可以从Airflow导入。首先创建一个存储配置文件的目录。建议使用$AIRFLOW_HOME/config

  2. 创建名为$AIRFLOW_HOME/config/log_config.py$AIRFLOW_HOME/config/__init__.py的空文件。

  3. airflow/config_templates/airflow_local_settings.py的内容复制到刚刚在上面的步骤中创建的log_config.py文件中。

  4. 自定义模板的以下部分:

  1. # wasb buckets应该从“wasb”开始,以帮助Airflow选择正确的处理程序
  2. REMOTE_BASE_LOG_FOLDER = 'wasb-<whatever you want here>'
  3. # 重命名DEFAULT_LOGGING_CONFIG为LOGGING CONFIG
  4. LOGGING_CONFIG = ...
  1. 确保已在Airflow中定义Azure Blob Storage(Wasb)的连接hook。hook应具有在REMOTE_BASE_LOG_FOLDER中定义的Azure Blob Storage bucket的读写访问权限。

  2. 更新$AIRFLOW_HOME/airflow.cfg以包含:

  1. remote_logging = True
  2. logging_config_class = log_config.LOGGING_CONFIG
  3. remote_log_conn_id = <name of the Azure Blob Storage connection>
  1. 重新启动 Airflow webserver 和 scheduler,并触发(或等待)新任务执行。

  2. 验证日志是否显示在您定义的bucket中新执行的任务中。

将日志写入Google Cloud Storage

请按照以下步骤启用Google Cloud Storage日志记录。

要启用此功能,必须按照此示例配置airflow.cfg:

  1. [core]
  2. # Airflow可以在 AWS S3, Google Cloud Storage 或者 Elastic Search 中远程存储日志.
  3. # 用户必须提供可访问存储位置的Airflow连接id。
  4. # 如果 remote_logging 被设置为true,请参见UPDATING.md以查看其他相关配置的要求。
  5. remote_logging = True
  6. remote_base_log_folder = gs://my-bucket/path/to/logs
  7. remote_log_conn_id = MyGCSConn
  1. 首先安装gcp_api安装包,pip install apache-airflow[gcp_api]
  2. 确保已在Airflow中定义了Google Cloud Platform连接hook。该hook应具有对remote_base_log_folder中上面定义的Google Cloud Storage bucket的读写访问权限。
  3. 重新启动Airflow webserver 和 scheduler,并触发(或等待)新任务执行。
  4. 验证日志是否在您定义的 bucket 中显示新执行的任务日志。
  5. 确认Google Cloud Storage查看器在U​​I中正常运行。拉出新执行的任务,并验证您是否看到类似的内容
  1. *** Reading remote log from gs://<bucket where logs should be persisted>/example_bash_operator/run_this_last/2017-10-03T00:00:00/16.log.
  2. [2017-10-03 21:57:50,056] {cli.py:377} INFO - Running on host chrisr-00532
  3. [2017-10-03 21:57:50,093] {base_task_runner.py:115} INFO - Running: ['bash', '-c', u'airflow run example_bash_operator run_this_last 2017-10-03T00:00:00 --job_id 47 --raw -sd DAGS_FOLDER/example_dags/example_bash_operator.py']
  4. [2017-10-03 21:57:51,264] {base_task_runner.py:98} INFO - Subtask: [2017-10-03 21:57:51,263] {__init__.py:45} INFO - Using executor SequentialExecutor
  5. [2017-10-03 21:57:51,306] {base_task_runner.py:98} INFO - Subtask: [2017-10-03 21:57:51,306] {models.py:186} INFO - Filling up the DagBag from /airflow/dags/example_dags/example_bash_operator.py

请注意顶行说明了它是从远程日志文件中读取的。