python – 为气流中的日志设置s3

我正在使用docker-compose来设置可扩展的气流群集.我基于这个Dockerfile https://hub.docker.com/r/puckel/docker-airflow/的方法

我的问题是将日志设置为从s3写入/读取.当一个dag完成后,我得到这样的错误

*** Log file isn't local.
*** Fetching here: http://ea43d4d49f35:8793/log/xxxxxxx/2017-06-26T11:00:00
*** Failed to fetch log file from worker.

*** Reading remote logs...
Could not read logs from s3://buckets/xxxxxxx/airflow/logs/xxxxxxx/2017-06-
26T11:00:00

我像这样在airflow.cfg文件中设置了一个新的部分

[MyS3Conn]
aws_access_key_id = xxxxxxx
aws_secret_access_key = xxxxxxx
aws_default_region = xxxxxxx

然后在airflow.cfg中的远程日志部分中指定s3路径

remote_base_log_folder = s3://buckets/xxxx/airflow/logs
remote_log_conn_id = MyS3Conn

我是否正确设置了这个并且有错误?这里有成功的秘诀吗?

– 更新

我尝试以URI和JSON格式导出,似乎都不起作用.然后我导出了aws_access_key_id和aws_secret_access_key,然后气流开始捡起它.现在我在工作日志中得到了他的错误

6/30/2017 6:05:59 PMINFO:root:Using connection to: s3
6/30/2017 6:06:00 PMERROR:root:Could not read logs from s3://buckets/xxxxxx/airflow/logs/xxxxx/2017-06-30T23:45:00
6/30/2017 6:06:00 PMERROR:root:Could not write logs to s3://buckets/xxxxxx/airflow/logs/xxxxx/2017-06-30T23:45:00
6/30/2017 6:06:00 PMLogging into: /usr/local/airflow/logs/xxxxx/2017-06-30T23:45:00

– 更新

我也发现了这个链接
https://www.mail-archive.com/dev@airflow.incubator.apache.org/msg00462.html

然后我进入我的一个工作机器(与Web服务器和调度程序分开)并在python中运行这段代码

import airflow
s3 = airflow.hooks.S3Hook('s3_conn')
s3.load_string('test', airflow.conf.get('core', 'remote_base_log_folder'))

我收到此错误.

boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden

我尝试导出几种不同类型的AIRFLOW_CONN_ envs,如连接部分https://airflow.incubator.apache.org/concepts.html中所述,以及此问题的其他答案.

s3://<AWS_ACCESS_KEY_ID>:<AWS_SECRET_ACCESS_KEY>@S3

{"aws_account_id":"<xxxxx>","role_arn":"arn:aws:iam::<xxxx>:role/<xxxxx>"}

{"aws_access_key_id":"<xxxxx>","aws_secret_access_key":"<xxxxx>"}

我还导出了AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY但没有成功.

这些凭据存储在数据库中,因此一旦我在UI中添加它们,它们就应该被工作人员选中,但由于某些原因它们无法写入/读取日志.

解决方法:

您需要通过气流UI设置s3连接.为此,您需要转到管理员 – >气流UI上的“连接”选项卡,并为S3连接创建新行.

一个示例配置是:

Conn Id: my_conn_S3

Conn Type: S3

Extra: {“aws_access_key_id”:”your_aws_key_id”, “aws_secret_access_key”: “your_aws_secret_key”}

上一篇:7款HTML5的精美应用教程让你立即爱上HTML5


下一篇:如何在Airflow上重新启动失败的任务