Описание процесса настройки
репортинга в Apache Superset
Alerts и Reports можно настраивать в Apache Superset начиная с версии 1.0.1.
Пользователи могут настраивать автоматические оповещения и отчеты для отправки информационных панелей или диаграмм получателю электронной почты или каналу Slack.
- Оповещения отправляются при достижении условия SQL
- Отчеты отправляются по расписанию
Оповещения и отчеты по умолчанию отключены. Чтобы их включить, нужно выполнить некоторые настройки, описанные ниже.
Процесс настройки в этой инструкции будет описан для версии Apache Superset 2.1.1. Если вы столкнулись с проблемой — напишите в комментарии к этой статье свой вопрос.
Официальная и полуофициальная документация здесь:
- https://superset.apache.org/docs/installation/alerts-reports/
- https://docs.preset.io/docs/alerts-reports
- YouTube: Apache Superset / Preset : Alerts and report
Краткая последовательность действий по настройке Reporting в Apache Superset 2.1.1
В этом разделе я опишу верхнеуровнево процесс настройки reporting функциональности и опишу как что работает внутри (опять же без низкоуровневых деталей).
Погнали!
Как выглядит процесс настройки с нуля:
- Устанавливаем Apache Superset (подробности здесь)
- Качаем с github репозиторий
- Переключаемся на версию 2.1.1
- Правим версию образа в docker-compose (или используем переменную TAG)
- Собираем образ Apache Superset на основе официального с
chromedriver
илиfirefox
. Здесь нам нужно создать файлDockerfile
и запустить процесс сборки. - В файле superset/docker/pythonpath_dev/superset_config.py необходимо сделать следующие настройки:
- Устанавить флаг
ALERT_REPORTS = TRUE
- Импортировать crontab
from celery.schedules import crontab
(по умолчанию есть) - Настроить
CeleryConfig
и другие необходимые настройки Email/Slack configuration - Прописать WebDriver configuration (внутри контейнера используется браузер для производства скриншотов для отправки)
- Настроить учетную запись, от которой будут отправляться отчеты (
from superset.tasks.types import ExecutorType
) - Отключить пробный режим
ALERT_REPORTS_NOTIFICATION_DRY_RUN = False
- Устанавить флаг
- Опционально можно еще настроить взаимосвязь Apache Superset и Apache Airflow (подробнее в документации Schedule Reports). В этой статье Apache Airflow рассматриваться не будет.
Общая схема настройки Alerting and Reporting
Пара рекомендаций при экспериментах с Docker
В этом разделе мы подробно рассмотрим все шаги с нуля, как начать использовать модуль рассылки отчетов на почту.
Отключаем загрузку примеров Superset в конфиге
Если вы запускаете Apache Superset локально, то при развертывании с помощью команды
sudo docker-compose -f docker-compose-non-dev.yml up
у вас загружаются примеры дашбордов, датасеты и т.п. Это сильно тормозит локальные эксперименты с Apache Superset. Рекомендую сразу их отключить при первичной настройке, чтобы не тратить время на итерациях из-за скачивания примеров. Когда у вас безошибочно запустится Superset, то можно будет активировать обратно загрузку примеров.
В файле superset/docker/.env-non-dev
меняем значение параметра:
SUPERSET_LOAD_EXAMPLES=no
По умолчанию стоит yes
.
Portainer tool
Для удаления контейнеров, образов и volumes я рекомендую использовать Portainer (community edition). Он позволяет в браузере покопаться в ваших контейнерах, в том числе скачать лог контейнера, также удобно в несколько кликов удалить ненужные контейнеры и volumes (если что-то пошло не так) и начать развертывание с начала.
Этот инструмент при настройке не понадобится, это лишь рекомендация по удобной работе с Docker, в том числе на продуктиве (если вы не фанат консоли, конечно 🙃).
Chrome: Конфигурация Apache Superset для использования Reporting on Email
Пункт 1. Собираем образ Apache Superset на основе официального с chromedriver
Если вы создаете свой собственный образ или используете официальные образы с версией, отличной от разработки (отсутствует префикс dev, например, apache/superset:2.1.1-dev
), вам потребуется веб-драйвер (и автономный браузер) для захвата снимков экрана диаграмм и информационных панелей, которые затем отправляются получателю.
Ниже представлен Dockerfile
(название может отличаться), чтобы делать снимки экрана в Chrome:
FROM apache/superset:2.1.1 USER root RUN apt-get update -y \ && apt-get install -y --no-install-recommends \ libnss3 \ libdbus-glib-1-2 \ libgtk-3-0 \ libx11-xcb1 \ libasound2 \ libxtst6 \ unzip \ wget RUN apt-get update && \ wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \ apt-get install -y --no-install-recommends ./google-chrome-stable_current_amd64.deb && \ rm -f google-chrome-stable_current_amd64.deb # refer https://googlechromelabs.github.io/chrome-for-testing/ # superset issue https://github.com/apache/superset/issues/25284 RUN export CHROMEDRIVER_VERSION=$(curl --silent https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_STABLE) && \ wget -q https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing/${CHROMEDRIVER_VERSION}/linux64/chromedriver-linux64.zip && \ unzip chromedriver-linux64.zip && \ mv chromedriver-linux64/chromedriver /usr/bin/ && \ chmod 755 /usr/bin/chromedriver && \ rm -f chromedriver-linux64.zip && \ rm -f -r chromedriver-linux64 RUN pip install --no-cache gevent psycopg2 redis USER superset
Далее запускаем команду:
sudo docker build -f Dockerfile --force-rm -t chromedriver-superset:2.1.1 .
Пункт 2. Настраиваем superset/docker/pythonpath_dev/superset_config.py
Этот конфиг файл замещает настройки по умолчанию. Этот конфиг подключается через файл superset/docker/.env-non-dev
:
# Add the mapped in /app/pythonpath_docker which allows devs to override stuff PYTHONPATH=/app/pythonpath:/app/docker/pythonpath_dev
Итак, нам нужно для начала установить необходимый параметр FEATURE_FLAGS (в 2.1.1 уже по умолчанию стоит True
):
FEATURE_FLAGS = { "ALERT_REPORTS": True }
Меняем параметр ALERT_REPORTS_NOTIFICATION_DRY_RUN на False:
ALERT_REPORTS_NOTIFICATION_DRY_RUN = False
Устанавливаем два параметра для скриншотов:
SCREENSHOT_LOCATE_WAIT = 100 SCREENSHOT_LOAD_WAIT = 600
Устанавливаем параметры для установки внутреннего браузера, почты smtp и slack:
# Slack configuration SLACK_API_TOKEN = "xoxb-" # Email configuration SMTP_HOST = "smtp.yandex.ru" # change to your host SMTP_PORT = 587 # your port, e.g. 587 SMTP_STARTTLS = True SMTP_SSL_SERVER_AUTH = True # If your using an SMTP server with a valid certificate SMTP_SSL = False SMTP_USER = "your-email-username@yandex.com" # use the empty string "" if using an unauthenticated SMTP server SMTP_PASSWORD = "your_password_qwerty123" # use the empty string "" if using an unauthenticated SMTP server SMTP_MAIL_FROM = "your-email-username@yandex.com" EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] superset-bi.ru" # optional - overwrites default value in config.py of "[Report] " # WebDriver configuration # If you use Firefox, you can stick with default values # If you use Chrome, then add the following WEBDRIVER_TYPE and WEBDRIVER_OPTION_ARGS WEBDRIVER_TYPE = "chrome" WEBDRIVER_OPTION_ARGS = [ "--force-device-scale-factor=2.0", "--high-dpi-support=2.0", "--headless", "--disable-gpu", "--disable-dev-shm-usage", "--no-sandbox", "--disable-setuid-sandbox", "--disable-extensions", ]
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
x-superset-image: &superset-image chromedriver-superset:2.1.1
Запускаем развертывание apache superset с образом chromedriver-superset
sudo docker-compose -f docker-compose-non-dev.yml up
Firefox: Конфигурация Apache Superset для использования Reporting on Email
Dockerfile для Firefox
FROM apache/superset:2.1.1 USER root ARG GECKODRIVER_VERSION=v0.32.0 ARG FIREFOX_VERSION=106.0.3 RUN apt-get update -y \ && apt-get install -y --no-install-recommends \ libnss3 \ libdbus-glib-1-2 \ libgtk-3-0 \ libx11-xcb1 \ libasound2 \ libxtst6 \ wget # Install GeckoDriver WebDriver RUN wget https://github.com/mozilla/geckodriver/releases/download/${GECKODRIVER_VERSION}/geckodriver-${GECKODRIVER_VERSION}-linux64.tar.gz -O /tmp/geckodriver.tar.gz && \ tar xvfz /tmp/geckodriver.tar.gz -C /tmp && \ mv /tmp/geckodriver /usr/local/bin/geckodriver && \ rm /tmp/geckodriver.tar.gz # Install Firefox RUN wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/${FIREFOX_VERSION}/linux-x86_64/en-US/firefox-${FIREFOX_VERSION}.tar.bz2 -O /opt/firefox.tar.bz2 && \ tar xvf /opt/firefox.tar.bz2 -C /opt && \ ln -s /opt/firefox/firefox /usr/local/bin/firefox USER superset
Настройки для superset/docker/pythonpath_dev/superset_config.py
SCREENSHOT_LOCATE_WAIT = 100 SCREENSHOT_LOAD_WAIT = 600 # Slack configuration SLACK_API_TOKEN = "xoxb-" # Email configuration SMTP_HOST = "smtp.yandex.ru" # change to your host SMTP_PORT = 587 # your port, e.g. 587 SMTP_STARTTLS = True SMTP_SSL_SERVER_AUTH = True # If your using an SMTP server with a valid certificate SMTP_SSL = False SMTP_USER = "your-email-username@yandex.com" # use the empty string "" if using an unauthenticated SMTP server SMTP_PASSWORD = "your_password_qwerty123" # use the empty string "" if using an unauthenticated SMTP server SMTP_MAIL_FROM = "your-email-username@yandex.com" EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] superset-bi.ru" # optional - overwrites default value in config.py of "[Report] "
Команда для build локального образа
sudo docker build -f Dockerfile --force-rm -t firefox-superset:2.1.1 .
Правим docker-compose файл в репозитории
Заходим в скачанный репозиторий superset. В файле docker-compose-non-dev.yml Меняем строку
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
на
x-superset-image: &superset-image firefox-superset:2.1.1
Запускаем развертывание apache superset с образом firefox-superset
sudo docker-compose -f docker-compose-non-dev.yml up
Исходники Dockerfile для версии 2.1.1 для chrome и firefox drivers на GitHub
https://github.com/superset-bi/superset-alerting-reporting-settings
1 Comment