【问题标题】:Airflow fails to write logs to s3 (v1.10.9)Airflow 无法将日志写入 s3 (v1.10.9)
【发布时间】:2020-05-28 15:35:19
【问题描述】:

我正在尝试在 v1.10.9 上的 Airflow stable/airflow helm 图表中设置远程日志记录,我正在使用 Kubernetes 执行程序puckel/docker-airflow 图像。这是我的values.yaml 文件。

airflow:
  image:
     repository: airflow-docker-local
     tag: 1.10.9
  executor: Kubernetes
  service:
    type: LoadBalancer
  config:
    AIRFLOW__KUBERNETES__WORKER_CONTAINER_REPOSITORY: airflow-docker-local
    AIRFLOW__KUBERNETES__WORKER_CONTAINER_TAG: 1.10.9
    AIRFLOW__KUBERNETES__WORKER_CONTAINER_IMAGE_PULL_POLICY: Never
    AIRFLOW__KUBERNETES__WORKER_SERVICE_ACCOUNT_NAME: airflow
    AIRFLOW__KUBERNETES__DAGS_VOLUME_CLAIM: airflow
    AIRFLOW__KUBERNETES__NAMESPACE: airflow
    AIRFLOW__CORE__REMOTE_LOGGING: True
    AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER: "s3://xxx"
    AIRFLOW__CORE__REMOTE_LOG_CONN_ID: "s3://aws_access_key_id:aws_secret_access_key@bucket"
    AIRFLOW__CORE__ENCRYPT_S3_LOGS: False
persistence:
  enabled: true
  existingClaim: ''
postgresql:
  enabled: true
workers:
  enabled: false
redis:
  enabled: false
flower:
  enabled: false

但我的日志没有导出到 S3,我在 UI 上得到的只是

*** Log file does not exist: /usr/local/airflow/logs/icp_job_dag/icp-kube-job/2019-02-13T00:00:00+00:00/1.log
*** Fetching from: http://icpjobdagicpkubejob-f4144a374f7a4ac9b18c94f058bc7672:8793/log/icp_job_dag/icp-kube-job/2019-02-13T00:00:00+00:00/1.log
*** Failed to fetch log file from worker. HTTPConnectionPool(host='icpjobdagicpkubejob-f4144a374f7a4ac9b18c94f058bc7672', port=8793): Max retries exceeded with url: /log/icp_job_dag/icp-kube-job/2019-02-13T00:00:00+00:00/1.log (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f511c883710>: Failed to establish a new connection: [Errno -2] Name or service not known'))

任何人有更多的见解我可能会错过什么?

编辑:来自@trejas 下面的建议。我创建了一个单独的连接并使用它。这是我在values.yaml 中的气流配置的样子

airflow:
  image:
     repository: airflow-docker-local
     tag: 1.10.9
  executor: Kubernetes
  service:
    type: LoadBalancer
  connections:
  - id: my_aws
    type: aws
    extra: '{"aws_access_key_id": "xxxx", "aws_secret_access_key": "xxxx", "region_name":"us-west-2"}'
  config:
    AIRFLOW__KUBERNETES__WORKER_CONTAINER_REPOSITORY: airflow-docker-local
    AIRFLOW__KUBERNETES__WORKER_CONTAINER_TAG: 1.10.9
    AIRFLOW__KUBERNETES__WORKER_CONTAINER_IMAGE_PULL_POLICY: Never
    AIRFLOW__KUBERNETES__WORKER_SERVICE_ACCOUNT_NAME: airflow
    AIRFLOW__KUBERNETES__DAGS_VOLUME_CLAIM: airflow
    AIRFLOW__KUBERNETES__NAMESPACE: airflow

    AIRFLOW__CORE__REMOTE_LOGGING: True
    AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER: s3://airflow.logs
    AIRFLOW__CORE__REMOTE_LOG_CONN_ID: my_aws
    AIRFLOW__CORE__ENCRYPT_S3_LOGS: False

我还是有同样的问题。

【问题讨论】:

    标签: kubernetes airflow kubernetes-helm


    【解决方案1】:

    您的远程日志连接 ID 需要是连接表单/列表中的连接 ID。不是连接字符串。

    https://airflow.apache.org/docs/stable/howto/write-logs.html

    https://airflow.apache.org/docs/stable/howto/connection/index.html

    【讨论】:

    • 顺便说一句,我首先在 values.yaml 中指定了连接 ID,然后从 UI 创建了连接。有什么不同吗?
    • 任何一种方式都可以创建连接。我更喜欢用户界面。绝对需要一个 s3 Conn Id 才能正常工作。
    • 我用更多细节更新了我的问题。我也尝试使用连接,仍然是同样的问题
    • airflow.logs 存储桶在您的 AWS 账户中吗? S3 存储桶名称是普遍唯一的,所以我怀疑您是否拥有 airflow.logs。您是否在 AWS 账户中为这些日志创建了存储桶?
    • 这不是我的实际存储桶名称。我已对其进行编辑以将其发布在问题中
    【解决方案2】:

    我遇到了同样的问题,并认为我会跟进最终对我有用的方法。连接正确,但您需要确保工作 pod 具有相同的环境变量:

    airflow:
      image:
         repository: airflow-docker-local
         tag: 1.10.9
      executor: Kubernetes
      service:
        type: LoadBalancer
      connections:
      - id: my_aws
        type: aws
        extra: '{"aws_access_key_id": "xxxx", "aws_secret_access_key": "xxxx", "region_name":"us-west-2"}'
      config:
        AIRFLOW__KUBERNETES__WORKER_CONTAINER_REPOSITORY: airflow-docker-local
        AIRFLOW__KUBERNETES__WORKER_CONTAINER_TAG: 1.10.9
        AIRFLOW__KUBERNETES__WORKER_CONTAINER_IMAGE_PULL_POLICY: Never
        AIRFLOW__KUBERNETES__WORKER_SERVICE_ACCOUNT_NAME: airflow
        AIRFLOW__KUBERNETES__DAGS_VOLUME_CLAIM: airflow
        AIRFLOW__KUBERNETES__NAMESPACE: airflow
    
        AIRFLOW__CORE__REMOTE_LOGGING: True
        AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER: s3://airflow.logs
        AIRFLOW__CORE__REMOTE_LOG_CONN_ID: my_aws
        AIRFLOW__CORE__ENCRYPT_S3_LOGS: False
        AIRFLOW__KUBERNETES_ENVIRONMENT_VARIABLES__AIRFLOW__CORE__REMOTE_LOGGING: True
        AIRFLOW__KUBERNETES_ENVIRONMENT_VARIABLES__AIRFLOW__CORE__REMOTE_LOG_CONN_ID: my_aws
        AIRFLOW__KUBERNETES_ENVIRONMENT_VARIABLES__AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER: s3://airflow.logs
        AIRFLOW__KUBERNETES_ENVIRONMENT_VARIABLES__AIRFLOW__CORE__ENCRYPT_S3_LOGS: False
    
    

    我还必须为工作人员(以及一般情况下)设置 fernet 密钥,否则我会收到无效令牌错误:

    airflow:
      fernet_key: "abcdefghijkl1234567890zxcvbnmasdfghyrewsdsddfd="
    
      config:
        AIRFLOW__KUBERNETES_ENVIRONMENT_VARIABLES__AIRFLOW__CORE__FERNET_KEY: "abcdefghijkl1234567890zxcvbnmasdfghyrewsdsddfd="
    

    【讨论】:

    • 我现在已经离开 Airflow(太麻烦了),如果其他人可以确认这确实解决了问题,我很乐意接受这个作为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多