Как осуществить ротацию логов GCP Composer/Airflow?

Вопрос или проблема

Моя папка с логами в бакете Composer становится огромной. Согласно документации, в Composer нет встроенного способа ротации логов: https://cloud.google.com/composer/docs/concepts/logs#:~:text=Viewing%20audit%20logs.-,Logs%20in%20Cloud%20Storage,logs%20folder%20in%20the%20bucket.

Существует ли настройка airflow, поддерживаемая Composer для ротации логов?

Ответ или решение

К сожалению, в Google Cloud Composer и Apache Airflow нет встроенной возможности для автоматической ротации логов, как это возможно в некоторых других системах. Тем не менее, вы можете решить вашу проблему с хранением файлов логов в бакете Cloud Storage, используя несколько подходов.

1. Использование Cloud Functions или Cloud Run

Вы можете настроить триггер на основе Cloud Storage, который будет вызываться при добавлении новых файлов в ваш бакет с логами. Эта функция может выполнять проверку и удалять или архивировать старые файлы логов.

Примерный процесс:

  1. Создайте функцию (например, на Python), которая будет проверять дату создания файла и удалять или перемещать файлы, которые старше определенного порога.
  2. Настройте триггер, чтобы эта функция запускалась при каждом добавлении нового файла.

Пример кода на Python для функции Cloud Function:

import os
import datetime
from google.cloud import storage

def rotate_logs(data, context):
    # Укажите ваш бакет
    bucket_name = 'your-composer-bucket-logs'
    retention_days = 30  # Укажите, сколько дней вы хотите хранить логи

    client = storage.Client()
    bucket = client.get_bucket(bucket_name)

    # Получаем список объектов в бакете
    blobs = bucket.list_blobs()

    for blob in blobs:
        if blob.time_created < datetime.datetime.utcnow() - datetime.timedelta(days=retention_days):
            blob.delete()  # Удаляем старый лог файл
            print(f'Deleted log file: {blob.name}')

2. Использование Cron Jobs

Если вы предпочитаете управлять ротацией логов вручную, вы можете использовать Compute Engine и настроить Cron Job для периодической работы скрипта, который будет проверять и удалять старые логи.

3. Архивирование логов

Вместо того чтобы просто удалять логи, вы можете настроить их архивирование. Вы можете переместить логи в другой бакет (например, для долгосрочного хранения) по достижении определенного возраста.

4. Логи активности Airflow

Также следует рассмотреть возможность понижения уровня автозаписи логов в Apache Airflow. Если ваши задачи генерируют логи, можно установить уровень логирования на более высокий для снижения объема записываемой информации. Это делается в файле конфигурации Airflow (airflow.cfg). Найдите параметр logging_level и измените его на значение, например, WARNING, если у вас это возможно.

Заключение

Несмотря на отсутствие нативных средств для ротации логов в Google Cloud Composer, вы можете использовать вышеуказанные методы для управления логами и поддержания вашего бакета в чистоте. Убедитесь, что вы протестировали все механизмы ротации и удаляете только те логи, которые вам действительно не нужны, чтобы избежать потери важной информации.

Оцените материал
Добавить комментарий

Капча загружается...