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.
- email:
- Можно кастомизировать тему письма, включая в неё 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
- Подключитесь к Slack workspace, перейдите на api.slack.com/apps.
- Создайте новое приложение.
- В «OAuth & Permissions» дайте scope'ы:
incoming-webhookfiles:writechat:writechannels:readgroups:read
- Сверху «OAuth and Permissions» — «install to workspace».
- Выберите дефолтный канал и продолжите. (Постить можно в любой канал, пригласив туда Liteset-приложение.)
- Получите Bot User OAuth Access Token — скопируйте его в
SLACK_API_TOKENвsuperset_config.py. - Установите feature flag
ALERT_REPORT_SLACK_V2 = True. - Перезапустите сервис (или
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
- В кластере должен работать
celery beat-pod. При использовании чарта из helm/superset —supersetCeleryBeat.enabled = trueв values. - См. страницу про 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) — в англоязычной версии.