web-dev-qa-db-ja.com

Dockerで実行されているApache Supersetで、Celery WorkerとBeat for Email Reportingを設定する方法は?

Dockerを介してスーパーセットを実行しています。メールレポート機能を有効にして試してみました。

image

ただし、テストメールレポートしか受信しません。その後メールが届きません。

これはsuperset_config.pyの私のCeleryConfigです:

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='*'),
        },
    }

documentation は、セロリワーカーを実行して打つ必要があると言います。

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」も作成されません。

より深い洞察が必要な場合は、機能の完全な実装を含む これがコミットです です。

セロリビートを正しく設定するにはどうすればよいですか?どうすればデバッグできますか?

6
Snow

-Bフラグをセロリワーカーコマンドに追加して、ビートを実行することもできます

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

Celeryはスーパーセットコンテナー内で実行する必要があると思うので、dockerfileとエントリーポイントを変更する必要があります。
しかし、最初にセロリをデーモン化して、セロリを監視して再起動する必要がないようにする必要があります[ 障害を検出してセロリワーカーを自動再起動する方法を参照してください および http://docs.celeryproject.org/en/latest/userguide/daemonizing.html] .
Dockerでデーモン化されたセロリプロセスを実行する方法については、ここの例を参照してください: Docker-デーモンとしてのCelery-pidfileが見つかりません

0
David Tobiano