Study/django

celery 팁 정리

bluebamus 2024. 7. 13. 00:03

1. django의 logger에서 celery의 log를 출력하는 방법

   - 보통 Celery를 k8s에서 각각의 worker pod으로 사용하고, Splunk나 다른 Log fowarder를 사용하는 방법이 있다.

   - CELERYD_HIJACK_ROOT_LOGGER를 False로 설정하면 Celery가 기본 logger를 가져가서 사용하지 않는다. 이를 통해 Django의 기본 로거 설정을 유지할 수 있다.

      - 만약, 이 설정이 없으면 Celery가 root logger를 가로채서 Celery 자체의 로거로 사용하게 된다.

# settings.py
CELERYD_HIJACK_ROOT_LOGGER = False

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'django_celery.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'celery': {
            'handlers': ['console', 'file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

# celery.py
import logging.config
from django.conf import settings

logging.config.dictConfig(settings.LOGGING)

app = Celery('your_project_name')

# your existing Celery settings

# Ensure the logging configuration is used by Celery
app.conf.update(
    worker_hijack_root_logger=False,
)

 

2. celery의 메모리 누스 및 좀비 프로세스 방지 방법

   - Celery 워커의 maxtasksperchild 옵션을 설정하여 각 워커가 일정 수의 작업을 처리한 후 종료되고 새롭게 시작되도록 만들 수 있는데, 이는 메모리 누수와 좀비 프로세스를 방지하는 데 유용할 수 있다.

      - https://celery.school/the-prefork-worker-pool#heading-maximum-number-of-tasks-per-child

 

The Prefork Worker Pool

The question of scaling - concurrency in Cerlery jargon - generally comes as an afterthought. And the pool choice is an afterthought of the afterthought. Why do I start with the scaling question when I write about Celery's prefork pool? Because the p...

celery.school

 

3. celery의 Deduplication 방법

   - 보통 Downstream에서 Apache Spark를 사용해서 중복 이벤트 아이디 자료들을 제거할 수 있다.

   - celery의 이벤트 id를 lock과 같이 사용하는 방법이 있을 수 있다.