web-dev-qa-db-fra.com

Comment configurer Celery Worker et Beat pour la création de rapports par e-mail dans Apache Superset s'exécutant sur Docker?

J'exécute Superset via Docker. J'ai activé la fonction de rapport par e-mail et l'ai essayé:

image

Cependant, je ne reçois que le rapport de test par e-mail. Je ne reçois aucun e-mail après.

Voici mon CeleryConfig dans 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='*'),
        },
    }

Le documentation dit que je dois exécuter le céleri et battre.

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

Je les ai ajoutés au ' 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 travaille en effet lors de l'envoi du premier mail. Le fichier journal est également visible. Cependant, le battement de céleri semble ne pas fonctionner. Il n'y a pas non plus de 'celery_beat.log' créé.

Si vous souhaitez un aperçu plus approfondi, voici le commit avec l'implémentation complète de la fonctionnalité.

Comment configurer correctement le battement de céleri? Comment puis-je déboguer cela?

6
Snow

vous pouvez également ajouter -B drapeau à la commande du céleri pour exécuter le battement

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

Je pense que Celery doit fonctionner à l'intérieur de votre conteneur de sur-ensemble - vous devrez donc modifier votre fichier docker et votre point d'entrée.
MAIS vous devriez vraiment démoniser d'abord le céleri pour ne pas avoir à surveiller et redémarrer le céleri [voir comment détecter l'échec et redémarrer automatiquement le céleri ouvrier et http: // docs.celleryproject.org/en/latest/userguide/daemonizing.html circular .
Voir un exemple ici pour savoir comment exécuter un processus de céleri démonisé dans docker: Docker - Celery as a daemon - aucun pidfile trouvé

0
David Tobiano