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
3. celery의 Deduplication 방법
- 보통 Downstream에서 Apache Spark를 사용해서 중복 이벤트 아이디 자료들을 제거할 수 있다.
- celery의 이벤트 id를 lock과 같이 사용하는 방법이 있을 수 있다.