Как настроить Celery Worker и Beat для создания отчетов по электронной почте в Apache Superset, работающем в Docker? - PullRequest
2 голосов
/ 20 апреля 2020

Я использую Superset через Docker. Я включил функцию отчета по электронной почте и попробовал ее:

image

Однако я получаю только тестовый отчет по электронной почте. После этого я не получаю никаких писем.

Это мой CeleryConfig в superset_config.py:

class CeleryConfig(object):
    BROKER_URL = 'sqla+postgresql://superset:superset@db:5432/superset'
    CELERY_IMPORTS = (
        'superset.sql_lab',
        'superset.tasks',
    )
    CELERY_RESULT_BACKEND = 'db+postgresql://superset:superset@db:5432/superset'
    CELERYD_LOG_LEVEL = 'DEBUG'
    CELERYD_PREFETCH_MULTIPLIER = 10
    CELERY_ACKS_LATE = True
    CELERY_ANNOTATIONS = {
        'sql_lab.get_sql_results': {
            'rate_limit': '100/s',
        },
        'email_reports.send': {
            'rate_limit': '1/s',
            'time_limit': 120,
            'soft_time_limit': 150,
            'ignore_result': True,
        },
    }
    CELERYBEAT_SCHEDULE = {
        'email_reports.schedule_hourly': {
            'task': 'email_reports.schedule_hourly',
            'schedule': crontab(minute=1, hour='*'),
        },
    }

Документация говорит, что мне нужно запустить работника сельдерея и бить.

celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
celery beat --app=superset.tasks.celery_app:app

Я добавил их в 'docker -compose.yml ':

superset-worker:
    build: *superset-build
    command: >
      sh -c "celery worker --app=superset.tasks.celery_app:app -Ofair -f /app/celery_worker.log &&
             celery beat --app=superset.tasks.celery_app:app -f /app/celery_beat.log"
    env_file: docker/.env
    restart: unless-stopped
    depends_on: *superset-depends-on
    volumes: *superset-volumes

Celery Worker действительно работает при отправке первого электронного письма. Файл журнала также виден. Тем не менее, похоже, что ритм сельдерея не работает. Также не создается celery_beat.log.

Если вы хотите получить более глубокое понимание, - это коммит с полной реализацией функциональности.

Как правильно настроить сельдерей? Как я могу отладить это?

1 Ответ

0 голосов
/ 21 апреля 2020

Я полагаю, что Celery должен работать внутри вашего контейнера надмножества - поэтому вам нужно изменить ваш докер-файл и точку входа.
НО вы действительно должны сначала демонизировать сельдерей, чтобы вам не приходилось отслеживать и перезапускать сельдерей [см. , как обнаружить сбой и автоматически перезапустить работника сельдерея и http://docs.celeryproject.org/en/latest/userguide/daemonizing.html] .
См. Здесь пример того, как запустить процесс daemonized celery в docker: Docker - Celery как демон - не найдено ни одного файла pid

...