Перейти к основному содержимому

Alerts and Reports

Пользователи могут настраивать автоматические алерты и отчёты, отправляющие дашборды или чарты на email или в Slack.

  • Алерты — отправляются при выполнении SQL-условия.
  • Отчёты — отправляются по расписанию.

Alerts and Reports выключены по умолчанию. Для включения нужна настройка ниже.

к сведению

Эта страница содержит подробные YAML/Python-примеры. Длинные листинги кастомных Dockerfile'ов и расширенные сценарии диагностики см. в англоязычной версии.

Требования

Общие

В superset_config.py или superset_config_docker.py

  • Feature flag "ALERT_REPORTS" (как настраивать) должен быть True.
  • beat_schedule в CeleryConfig должен содержать расписание reports.scheduler.
  • Хотя бы один из каналов уведомлений должен быть настроен:
    • email: SMTP_*-настройки.
    • Slack: SLACK_API_TOKEN.
  • Можно кастомизировать тему письма, включая в неё date-плейсхолдеры. Включается feature flag "DATE_FORMAT_IN_EMAIL_SUBJECT". Это даёт уникальные subject'ы и предотвращает группировку всех писем в один thread в почтовом клиенте.
    • Используйте коды дат с strftime.org.
    • Если код дат не указан — будет использована исходная строка.
Отключение dry-run режима

Скриншоты будут делаться, но сами сообщения не отправятся, пока ALERT_REPORTS_NOTIFICATION_DRY_RUN = True (значение по умолчанию в docker/pythonpath_dev/superset_config.py). Чтобы начать получать email/Slack — установите ALERT_REPORTS_NOTIFICATION_DRY_RUN = False в superset config.

В Dockerfile

  • Нужно установить headless-браузер для скриншотов чартов и дашбордов. Поддерживаются Firefox и Chrome.

    Для Chrome поменяйте WEBDRIVER_TYPE = "chrome" в superset_config.py.

В dev-образе Liteset уже есть всё нужное (Firefox headless, Redis, Postgres, celery worker, celery beat) — если вы следуете Установке Liteset локально. Достаточно добавить переменные конфига из этой страницы (см. Detailed Config).

Если используете non-dev image (стабильный релиз) — headless-браузер не входит. Только контейнер superset_worker должен иметь headless-браузер. Установите его сами (см. секцию «Custom Dockerfile» в англоязычной версии) или модифицируйте docker-compose.yml, используя dev-образ для воркера.

Интеграция со Slack

  1. Подключитесь к Slack workspace, перейдите на api.slack.com/apps.
  2. Создайте новое приложение.
  3. В «OAuth & Permissions» дайте scope'ы:
    • incoming-webhook
    • files:write
    • chat:write
    • channels:read
    • groups:read
  4. Сверху «OAuth and Permissions» — «install to workspace».
  5. Выберите дефолтный канал и продолжите. (Постить можно в любой канал, пригласив туда Liteset-приложение.)
  6. Получите Bot User OAuth Access Token — скопируйте его в SLACK_API_TOKEN в superset_config.py.
  7. Установите feature flag ALERT_REPORT_SLACK_V2 = True.
  8. Перезапустите сервис (или superset init) для подхвата новой конфигурации.

При настройке алерта/отчёта в поле канала указывайте имя без #alerts вместо #alerts.

Большие Slack-воркспейсы (10k+ каналов)

Получение полного списка каналов может занять минуты и упереться в rate limits API. Добавьте:

from datetime import timedelta

# Увеличьте кэш-таймаут, чтобы реже звать API
# По умолчанию: 1 день (86400 секунд)
SLACK_CACHE_TIMEOUT = int(timedelta(days=2).total_seconds())

# Увеличьте число retry'ев для rate-limit ошибок
# По умолчанию: 2
SLACK_API_RATE_LIMIT_RETRY_COUNT = 5

Особенности Kubernetes

Особенности Docker Compose

В docker-compose.yml нужны:

  • Redis (брокер).
  • PostgreSQL (вместо SQLite).
  • Один или несколько celery worker.
  • Один celery beat.

Также работает в Docker Swarm — нужно добавить Deploy: к сервисам Liteset, Redis и Postgres со специфичными для swarm настройками.

Детальная конфигурация

Эти настройки добавляются в superset_config.py — он перезаписывает дефолты из config.py.

Документация по полям — в superset/config.py.

Замените значения по умолчанию на свои Redis, Slack, SMTP.

Liteset использует Celery beat и worker(s):

  • Beat — планировщик, который сообщает воркерам, когда выполнять задачи. Расписание задаётся при создании алерта/отчёта.
  • Worker — обрабатывает задачи при срабатывании алерта/отчёта.

В CeleryConfig для этой фичи важен только beat_schedule; остальное можно менять под себя:

from celery.schedules import crontab

FEATURE_FLAGS = {
"ALERT_REPORTS": True
}

REDIS_HOST = "redis"
REDIS_PORT = "6379"

class CeleryConfig:
broker_url = f"redis://{REDIS_HOST}:{REDIS_PORT}/0"
imports = ("superset.sql_lab", "superset.tasks", "superset.tasks.thumbnails")
result_backend = f"redis://{REDIS_HOST}:{REDIS_PORT}/0"
worker_prefetch_multiplier = 10
task_acks_late = True
task_annotations = {
"sql_lab.get_sql_results": {"rate_limit": "100/s"},
}
beat_schedule = {
"reports.scheduler": {
"task": "reports.scheduler",
"schedule": crontab(minute="*", hour="*"),
},
"reports.prune_log": {
"task": "reports.prune_log",
"schedule": crontab(minute=10, hour=0),
},
}

CELERY_CONFIG = CeleryConfig

SCREENSHOT_LOCATE_WAIT = 100
SCREENSHOT_LOAD_WAIT = 600

# Slack
SLACK_API_TOKEN = "xoxb-XXXX"

# Email
SMTP_HOST = "smtp.sendgrid.net"
SMTP_STARTTLS = True
SMTP_SSL_SERVER_AUTH = True
SMTP_SSL = False
SMTP_USER = "your_user"
SMTP_PORT = 2525
SMTP_PASSWORD = "your_password"
SMTP_MAIL_FROM = "noreply@youremail.com"

WEBDRIVER_BASEURL = "http://superset:8088/" # URL для воркера, чтобы открывать чарты
WEBDRIVER_BASEURL_USER_FRIENDLY = "https://superset.example.com" # URL в письме

WEBDRIVER_BASEURL — внутренний URL Liteset, по которому worker берёт чарт. WEBDRIVER_BASEURL_USER_FRIENDLY — URL, который видит пользователь в письме.

Custom Dockerfile

Если ваш образ — non-dev (например, apache/superset:6.0.0 или ghcr-образ Liteset), headless-браузер нужно ставить вручную. Длинные примеры Dockerfile для Firefox и Chrome — см. англоязычную версию. Кратко:

Firefox

В Dockerfile воркера установите Firefox и geckodriver. В superset_config.py оставьте дефолтное WEBDRIVER_TYPE = "firefox".

Chrome

В Dockerfile воркера установите Chrome и chromedriver. В superset_config.py поставьте WEBDRIVER_TYPE = "chrome".

Troubleshooting

Часто упоминаемые проблемы:

Проверьте feature flag и права

Feature flag ALERT_REPORTS должен быть True. Пользователю должна быть выдана соответствующая роль.

Логи Celery-воркера

docker compose logs superset_worker (или эквивалент в k8s) — там должны быть строки про планируемые/выполняемые задачи.

Установлен ли webdriver

Зайдите в контейнер worker'а и убедитесь, что firefox/chrome и geckodriver/chromedriver есть в PATH.

Тестовое письмо

Проверьте SMTP отдельной командой python -c "import smtplib; ..." — отдельно от Liteset. Если SMTP работает напрямую, но не из Liteset — проверьте SMTP_*-переменные.

Откройте отчёт от имени worker'а

Зайдите в контейнер worker'а и попробуйте curl http://superset:8088/... — voorker должен видеть бэкенд по WEBDRIVER_BASEURL.

Планирование запросов как отчётов

В SQL Lab можно сохранить запрос и запланировать его выполнение как отчёт. Подробности конфигурации (SCHEDULED_QUERIES, SCHEDULE_QUERIES) — в англоязычной версии.