45

I am using docker-compose to set up a scalable airflow cluster. I based my approach off of this Dockerfile https://hub.docker.com/r/puckel/docker-airflow/

My problem is getting the logs set up to write/read from s3. When a dag has completed I get an error like this

*** 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

I set up a new section in the airflow.cfg file like this

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

And then specified the s3 path in the remote logs section in airflow.cfg

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

Did I set this up properly and there is a bug? Is there a recipe for success here that I am missing?

-- Update

I tried exporting in URI and JSON formats and neither seemed to work. I then exported the aws_access_key_id and aws_secret_access_key and then airflow started picking it up. Now I get his error in the worker logs

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

-- Update

I found this link as well https://www.mail-archive.com/dev@airflow.incubator.apache.org/msg00462.html

I then shelled into one of my worker machines (separate from the webserver and scheduler) and ran this bit of code in python

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

I receive this error.

boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden

I tried exporting several different types of AIRFLOW_CONN_ envs as explained here in the connections section https://airflow.incubator.apache.org/concepts.html and by other answers to this question.

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>"}

I have also exported AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY with no success.

These credentials are being stored in a database so once I add them in the UI they should be picked up by the workers but they are not able to write/read logs for some reason.

JackStat
  • 1,593
  • 1
  • 11
  • 17
  • At this point I will take any strategy to get logging to work. I can't get them locally, on s3, or using rfs – JackStat Jul 07 '17 at 14:04
  • Does the folder 'logs' exist at the path? At least the local logs should work without any problems if the folder exists. If they don't work even locally, the only other reason I can think of is incorrect permissions on the airflow folder. – Him Jul 08 '17 at 09:14
  • We might have something here.https://github.com/puckel/docker-airflow/pull/100 – JackStat Jul 09 '17 at 15:15

8 Answers8

40

UPDATE Airflow 1.10 makes logging a lot easier.

For s3 logging, set up the connection hook as per the above answer

and then simply add the following to airflow.cfg

    [core]
    # Airflow can store logs remotely in AWS S3. Users must supply a remote
    # location URL (starting with either 's3://...') and an Airflow connection
    # id that provides access to the storage location.
    remote_base_log_folder = s3://my-bucket/path/to/logs
    remote_log_conn_id = MyS3Conn
    # Use server-side encryption for logs stored in S3
    encrypt_s3_logs = False

For gcs logging,

  1. Install the gcp_api package first, like so: pip install apache-airflow[gcp_api].

  2. Set up the connection hook as per the above answer

  3. Add the following to airflow.cfg

     [core]
     # Airflow can store logs remotely in AWS S3. Users must supply a remote
     # location URL (starting with either 's3://...') and an Airflow connection
     # id that provides access to the storage location.
     remote_logging = True
     remote_base_log_folder = gs://my-bucket/path/to/logs
     remote_log_conn_id = MyGCSConn
    

NOTE: As of Airflow 1.9 remote logging has been significantly altered. If you are using 1.9, read on.

Reference here

Complete Instructions:

  1. Create a directory to store configs and place this so that it can be found in PYTHONPATH. One example is $AIRFLOW_HOME/config

  2. Create empty files called $AIRFLOW_HOME/config/log_config.py and $AIRFLOW_HOME/config/__init__.py

  3. Copy the contents of airflow/config_templates/airflow_local_settings.py into the log_config.py file that was just created in the step above.

  4. Customize the following portions of the template:

     #Add this variable to the top of the file. Note the trailing slash.
     S3_LOG_FOLDER = 's3://<bucket where logs should be persisted>/'
    
     Rename DEFAULT_LOGGING_CONFIG to LOGGING CONFIG
     LOGGING_CONFIG = ...
    
     Add a S3TaskHandler to the 'handlers' block of the LOGGING_CONFIG variable
     's3.task': {
         'class': 'airflow.utils.log.s3_task_handler.S3TaskHandler',
         'formatter': 'airflow.task',
         'base_log_folder': os.path.expanduser(BASE_LOG_FOLDER),
         's3_log_folder': S3_LOG_FOLDER,
         'filename_template': FILENAME_TEMPLATE,
     },
    
      Update the airflow.task and airflow.task_runner blocks to be 's3.task' instead >of 'file.task'.
     'loggers': {
         'airflow.task': {
             'handlers': ['s3.task'],
             ...
         },
         'airflow.task_runner': {
             'handlers': ['s3.task'],
             ...
         },
         'airflow': {
             'handlers': ['console'],
             ...
         },
     }
    
  5. Make sure a s3 connection hook has been defined in Airflow, as per the above answer. The hook should have read and write access to the s3 bucket defined above in S3_LOG_FOLDER.

  6. Update $AIRFLOW_HOME/airflow.cfg to contain:

     task_log_reader = s3.task
     logging_config_class = log_config.LOGGING_CONFIG
     remote_log_conn_id = <name of the s3 platform hook>
    
  7. Restart the Airflow webserver and scheduler, and trigger (or wait for) a new task execution.

  8. Verify that logs are showing up for newly executed tasks in the bucket you’ve defined.

  9. Verify that the s3 storage viewer is working in the UI. Pull up a newly executed task, and verify that you see something like:

     *** Reading remote log from gs://<bucket where logs should be persisted>/example_bash_operator/run_this_last/2017-10-03T00:00:00/16.log.
     [2017-10-03 21:57:50,056] {cli.py:377} INFO - Running on host chrisr-00532
     [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']
     [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
     [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
    

Airflow 2.4.2

Follow the steps above but paste this into log_config.py

# -*- coding: utf-8 -*-
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os
from airflow.config_templates.airflow_local_settings import DEFAULT_LOGGING_CONFIG
from airflow import configuration as conf
from copy import deepcopy


S3_LOG_FOLDER = 's3://your/s3/log/folder'

LOG_LEVEL = conf.get('logging', 'LOGGING_LEVEL').upper()
LOG_FORMAT = conf.get('logging', 'log_format')

BASE_LOG_FOLDER = conf.get('logging', 'BASE_LOG_FOLDER')
PROCESSOR_LOG_FOLDER = conf.get('scheduler', 'child_process_log_directory')

FILENAME_TEMPLATE = '{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts }}/{{ try_number }}.log'
PROCESSOR_FILENAME_TEMPLATE = '{{ filename }}.log'


LOGGING_CONFIG = deepcopy(DEFAULT_LOGGING_CONFIG)


# Attach formatters to loggers (airflow.task, airflow.processor)
LOGGING_CONFIG['formatters']['airflow.task'] = { 'format': LOG_FORMAT }
LOGGING_CONFIG['formatters']['airflow.processor'] = { 'format': LOG_FORMAT }

# Add an S3 task handler
LOGGING_CONFIG['handlers']['s3.task'] = {
    'class': 'airflow.providers.amazon.aws.log.s3_task_handler.S3TaskHandler',
    'formatter': 'airflow.task',
    'base_log_folder': os.path.expanduser(BASE_LOG_FOLDER),
    's3_log_folder': S3_LOG_FOLDER,
    'filename_template': FILENAME_TEMPLATE
}

# Specify handler for airflow.task
LOGGING_CONFIG['loggers']['airflow.task']['handlers'] = ['task', 's3.task']

Arne Huang
  • 634
  • 6
  • 11
  • 1
    Shouldn't it be `$AIRFLOW_HOME/config/__init__.py.`? – andresp Jan 17 '18 at 21:36
  • whoops, markdown formatting got me. I've eddited it, thanks! – Arne Huang Jan 18 '18 at 23:22
  • 1
    There's another typo `s3TaskHandler` should be `S3TaskHandler` – pyCthon Feb 25 '18 at 19:29
  • 2
    This was super helpful! If you want to upload to a "sub folder" in s3, make sure that the these two vars are set in your airflow.cfg`remote_log_conn_id = s3://$AWS_ACCESS_KEY:$AWS_SECRET_KEY@$REMOTE_BASE_LOG_FOLDER` and set `remote_base_log_folder = "s3://$REMOTE_BASE_LOG_FOLDER"` In this case: REMOTE_BASE_LOG_FOLDER = top-level-bucket/airflow/logs – sebradloff Mar 04 '18 at 05:17
  • Is there a way to set the S3/GCS hook programatically and not through the UI? – Paymahn Moghadasian Mar 19 '18 at 19:59
  • 3
    I am getting ImportError: Unable to load custom logging from log_config.LOGGING_CONFIG even though I added path into python path. – Kush Patel Mar 20 '18 at 19:36
  • @PaymahnMoghadasian I haven't had the use case myself but perhaps something like this might help https://gist.github.com/syvineckruyk/d2c96b418ed509a174e0e718cb62b20a – Arne Huang Mar 21 '18 at 11:32
  • Thanks @ArneHuang! I ended up running something similar to https://stackoverflow.com/a/47556604/1489726 after running `initdb` but before starting my webserver/scheduler in the startup script. – Paymahn Moghadasian Mar 21 '18 at 19:53
  • 2
    The template you are pointing to is at HEAD and no longer works. You need to copy it from the 1.9.0 version: https://github.com/apache/incubator-airflow/blob/1.9.0/airflow/config_templates/airflow_local_settings.py – nbarraille Jun 26 '18 at 17:43
  • I am using airflow 1.10 facing the same issue, will this work for me? – hadooper Oct 08 '18 at 20:48
  • @hadooper updated for airflow 1.10 - it's a lot easier now – Arne Huang Oct 10 '18 at 18:47
  • hi @ArneHuang I followed all the steps, & got an import error, but I then moved the config folder to my project dir instead of `$AIRFLOW_HOME` & there was no import error anymore BUT, I am still unable to see logs on my S3. – saadi Aug 21 '20 at 05:42
31

You need to set up the S3 connection through Airflow UI. For this, you need to go to the Admin -> Connections tab on airflow UI and create a new row for your S3 connection.

An example configuration would be:

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"}
jps
  • 20,041
  • 15
  • 75
  • 79
Him
  • 1,609
  • 12
  • 20
  • 3
    Ok I will try that as well. The issue with it is that we have everything dockerized so every time we upgraded the image we would have a manual step – JackStat Jun 28 '17 at 12:03
  • 2
    You can export an environment variable through dockerfile, which is picked up by airflow as connection parameter https://stackoverflow.com/a/44708691/2879084 – Him Jun 28 '17 at 12:06
  • 1
    Did these settings work from UI? If yes, I can add more details on automatically configuring it. – Him Jul 03 '17 at 13:05
  • I added more edits to the question. Let me know if that provides more clarity. This is a frustrating one haha – JackStat Jul 03 '17 at 16:19
  • 3
    It feels a bit wrong that the connection requires entering a key id and secret key. I suppose it makes it more portable that way. Another option is that the boto3 library is able to create an S3Client without specifying the keyid & secret on a machine that has had the `aws configure` setup performed. Getting that to work would involve changing the s3 hook though, probably not worth it. http://boto3.readthedocs.io/en/latest/guide/quickstart.html#configuration – Davos Aug 24 '17 at 08:00
  • Following this I'm getting an error: `Failed to create record. Incorrect padding` – pyCthon Feb 25 '18 at 00:00
  • @Him: As far as i understand setting up the S3 connection via the environment variable does not work for S3 logging in 1.9.0. – DanT Mar 06 '18 at 23:16
  • As per airflow 1.10.3 you can create a new S3 connection and store "aws_access_key_id" as the `login` and "aws_secret_access_key" as the `password` of the connection, so it gets encrypted using your Fernet key. – Mia Jun 04 '19 at 21:21
13

(Updated as of Airflow 1.10.2)

Here's a solution if you don't use the admin UI.

My Airflow doesn't run on a persistent server ... (It gets launched afresh every day in a Docker container, on Heroku.) I know I'm missing out on a lot of great features, but in my minimal setup, I never touch the admin UI or the cfg file. Instead, I have to set Airflow-specific environment variables in a bash script, which overrides the .cfg file.

apache-airflow[s3]

First of all, you need the s3 subpackage installed to write your Airflow logs to S3. (boto3 works fine for the Python jobs within your DAGs, but the S3Hook depends on the s3 subpackage.)

One more side note: conda install doesn't handle this yet, so I have to do pip install apache-airflow[s3].

Environment variables

In a bash script, I set these core variables. Starting from these instructions but using the naming convention AIRFLOW__{SECTION}__{KEY} for environment variables, I do:

export AIRFLOW__CORE__REMOTE_LOGGING=True
export AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER=s3://bucket/key
export AIRFLOW__CORE__REMOTE_LOG_CONN_ID=s3_uri
export AIRFLOW__CORE__ENCRYPT_S3_LOGS=False

S3 connection ID

The s3_uri above is a connection ID that I made up. In Airflow, it corresponds to another environment variable, AIRFLOW_CONN_S3_URI. The value of that is your S3 path, which has to be in URI form. That's

s3://access_key:secret_key@bucket/key

Store this however you handle other sensitive environment variables.

With this configuration, Airflow will be able to write your logs to S3. They will follow the path of s3://bucket/key/dag/task_id/timestamp/1.log.


Appendix on upgrading from Airflow 1.8 to Airflow 1.10

I recently upgraded my production pipeline from Airflow 1.8 to 1.9, and then 1.10. Good news is that the changes are pretty tiny; the rest of the work was just figuring out nuances with the package installations (unrelated to the original question about S3 logs).

(1) First of all, I needed to upgrade to Python 3.6 with Airflow 1.9.

(2) The package name changed from airflow to apache-airflow with 1.9. You also might run into this in your pip install.

(3) The package psutil has to be in a specific version range for Airflow. You might encounter this when you're doing pip install apache-airflow.

(4) python3-dev headers are needed with Airflow 1.9+.

(5) Here are the substantive changes: export AIRFLOW__CORE__REMOTE_LOGGING=True is now required. And

(6) The logs have a slightly different path in S3, which I updated in the answer: s3://bucket/key/dag/task_id/timestamp/1.log.

But that's it! The logs did not work in 1.9, so I recommend just going straight to 1.10, now that it's available.

Niels Joaquin
  • 1,205
  • 1
  • 12
  • 14
  • @Alex Check out my fully updated answer for Airflow 1.10! – Niels Joaquin Feb 25 '19 at 20:38
  • I'm trying this on 1.10.3 - and when I try to add the account/secret to the ```S3://account:secret_key_redacted@bucket/key``` uri, the parser fails - seemingly trying to parse my secret into a port: ```ValueError: invalid literal for int() with base 10: 'secret_key_redacted'``` My secret has a '/' in it - which is where it seems to break the parser... – Penumbra Jun 26 '19 at 19:26
  • Ok- this is a known issue with AWS -- but my container is running in a Fargate ECS manner.. I have other boto3 code running that is able to read/write to S3 without passing keys -- since it's an IAM role giving the access. Using a key/secret like this is actually an anti-pattern when running INSIDE AWS (EC2/ECS/etc). SO - how do we solve for this case? Am I left re-implementing S3Hook's auth mechanism to 1st try to get a session and a client without auth?! – Penumbra Jun 26 '19 at 21:36
  • @NielsJoaquin I'm using a similar setup but i'm having some problem, could you please take a look on my stackoverflow question? https://stackoverflow.com/questions/59868745/airflow-writes-and-reads-from-s3-successfully-but-wont-load-s3-logs-on-docker-c – Eduardo Fernando Jan 22 '20 at 21:50
2

To complete Arne's answer with the recent Airflow updates, you do not need to set task_log_reader to another value than the default one : task

As if you follow the default logging template airflow/config_templates/airflow_local_settings.py you can see since this commit (note the handler's name changed to's3': {'task'... instead of s3.task) that's the value on the remote folder(REMOTE_BASE_LOG_FOLDER) will replace the handler with the right one:

REMOTE_LOGGING = conf.get('core', 'remote_logging')

if REMOTE_LOGGING and REMOTE_BASE_LOG_FOLDER.startswith('s3://'):
        DEFAULT_LOGGING_CONFIG['handlers'].update(REMOTE_HANDLERS['s3'])
elif REMOTE_LOGGING and REMOTE_BASE_LOG_FOLDER.startswith('gs://'):
        DEFAULT_LOGGING_CONFIG['handlers'].update(REMOTE_HANDLERS['gcs'])
elif REMOTE_LOGGING and REMOTE_BASE_LOG_FOLDER.startswith('wasb'):
        DEFAULT_LOGGING_CONFIG['handlers'].update(REMOTE_HANDLERS['wasb'])
elif REMOTE_LOGGING and ELASTICSEARCH_HOST:
        DEFAULT_LOGGING_CONFIG['handlers'].update(REMOTE_HANDLERS['elasticsearch'])

More details on how to log to/read from S3 : https://github.com/apache/incubator-airflow/blob/master/docs/howto/write-logs.rst#writing-logs-to-amazon-s3

Paul Leclercq
  • 989
  • 2
  • 15
  • 26
2

Phew! Motivation to keep nipping the airflow bugs in the bud is to confront this as a bunch of python files XD here's my experience on this with apache-airflow==1.9.0.

First of all, there's simply no need trying airflow connections .......... --conn_extra etc, etc.

Just set your airflow.cfg as:

remote_logging = True
remote_base_log_folder = s3://dev-s3-main-ew2-dmg-immutable-potns/logs/airflow-logs/
encrypt_s3_logs = False

# Logging level
logging_level = INFO
fab_logging_level = WARN

# Logging class
# Specify the class that will specify the logging configuration
# This class has to be on the python classpath
# logging_config_class = my.path.default_local_settings.LOGGING_CONFIG
logging_config_class = log_config.LOGGING_CONFIG
remote_log_conn_id = s3://<ACCESS-KEY>:<SECRET-ID>@<MY-S3-BUCKET>/<MY>/<SUB>/<FOLDER>/

keep the $AIRFLOW_HOME/config/__ init __.py and $AIRFLOW_HOME/config/log_config.py file as above.

The problem with me as a missing "boto3" package, which I could get to by:

vi /usr/lib/python3.6/site-packages/airflow/utils/log/s3_task_handler.py
then >> import traceback

and in the line containing:

Could not create an S3Hook with connection id "%s". ' 'Please make sure that airflow[s3] is installed and ' 'the S3 connection exists.

doing a traceback.print_exc() and well it started cribbing about missing boto3!

Installed it and Life was beautiful back again!

Andrzej Sydor
  • 1,373
  • 4
  • 13
  • 28
khanna
  • 718
  • 10
  • 24
  • I found a solution there : https://kernelv5.medium.com/sending-apache-airflow-logs-to-s3-86f2c0c82ef5 – Kernelv5 Nov 14 '20 at 08:53
1

Just a side note to anyone following the very useful instructions in the above answer: If you stumble upon this issue: "ModuleNotFoundError: No module named 'airflow.utils.log.logging_mixin.RedirectStdHandler'" as referenced here (which happens when using airflow 1.9), the fix is simple - use rather this base template: https://github.com/apache/incubator-airflow/blob/v1-9-stable/airflow/config_templates/airflow_local_settings.py (and follow all other instructions in the above answer)

The current template incubator-airflow/airflow/config_templates/airflow_local_settings.py present in master branch contains a reference to the class "airflow.utils.log.s3_task_handler.S3TaskHandler", which is not present in apache-airflow==1.9.0 python package. Hope this helps!

diogoa
  • 21
  • 1
  • 4
1

Have it working with Airflow 1.10 in kube. I have the following env var sets:

AIRFLOW_CONN_LOGS_S3=s3://id:secret_uri_encoded@S3
AIRFLOW__CORE__REMOTE_LOGGING=True
AIRFLOW__CORE__REMOTE_BASE_LOG_FOLDER=s3://xxxx/logs
AIRFLOW__CORE__REMOTE_LOG_CONN_ID=logs_s3
Andrzej Sydor
  • 1,373
  • 4
  • 13
  • 28
1

For airflow 2.3.4, using Docker, I also faced issues with logging to s3.

Initially I faced some permission errors (although my IAM Role was set fine), then after changing the config a bit I was able to write the files in the correct location, but could not read (falling back to local log).

Anyway, after many efforts, debugging, trial and error attempts, here is what worked for me:

Define a connection for s3 (assuming your region is also eu-west-1):

Either via the UI, in which case you need to set:

  • Connection Id: my-conn (or whatever name you prefer),
  • Connection Type: Amazon Web Services (this is one change that I did, s3 did not work for me),
  • Extra: {"region_name": "eu-west-1", "endpoint_url": "https://s3.eu-west-1.amazonaws.com"}

Or via the CLI:

airflow connections add my-conn --conn-type aws --conn-extra '{"region_name": "eu-west-1", "endpoint_url": "https://s3.eu-west-1.amazonaws.com"}'

As for airflow config, I have set those in all processes:

...
export AIRFLOW__LOGGING__REMOTE_LOGGING=True
export AIRFLOW__LOGGING__REMOTE_BASE_LOG_FOLDER=s3://my-bucket/path/to/log/folder
export AIRFLOW__LOGGING__REMOTE_LOG_CONN_ID=my-conn
...

After deploying, I was still getting errors like Falling back to local log..., but eventually the file was loaded and displayed (after a few refreshes).

It seems to work OK now though :)

babis21
  • 1,515
  • 1
  • 16
  • 29
  • Hey, thank you for posting a comment. I followed your guide and it uploads logs to s3 bucket, however it has problems reading them. I always get `Falling back to local log...` no matter how many times I refresh – rudald Oct 04 '22 at 12:57
  • happens to me too sometimes, not always though. I'd check scheduler / websrver / worker logs for errors, perhaps check your IAM permissions too - maybe you are not allowed to write to the bucket? Also I tried to connect to s3 from docker using airflow's functions (ssh, docker exec, then python console, a bit hardcode and tough but may give you some insight on what is happening actually) – babis21 Oct 05 '22 at 07:06
  • After some testing I noticed that logs are uploaded to s3 bucket when the task is finished on a pod. That explains why they are not available during runtime. (Airflow 2.4.1, amazon provider 6.0.0). Check this out as well: https://medium.com/localize-city/handling-airflow-logs-with-kubernetes-executor-25c11ea831e4 – rudald Oct 06 '22 at 14:49