Как настроить отправку отчетов на почту в Apache Superset Docker (Reporting and Alerting)

Описание процесса настройки

репортинга в Apache Superset

Alerts и Reports можно настраивать в Apache Superset начиная с версии 1.0.1.

Пользователи могут настраивать автоматические оповещения и отчеты для отправки информационных панелей или диаграмм получателю электронной почты или каналу Slack.

  • Оповещения отправляются при достижении условия SQL
  • Отчеты отправляются по расписанию

Оповещения и отчеты по умолчанию отключены. Чтобы их включить, нужно выполнить некоторые настройки, описанные ниже.

Процесс настройки в этой инструкции будет описан для версии Apache Superset 2.1.1. Если вы столкнулись с проблемой — напишите в комментарии к этой статье свой вопрос.

Официальная и полуофициальная документация здесь:

Краткая последовательность действий по настройке Reporting в Apache Superset 2.1.1

В этом разделе я опишу верхнеуровнево процесс настройки reporting функциональности и опишу как что работает внутри (опять же без низкоуровневых деталей).

Погнали!

Как выглядит процесс настройки с нуля:

  1. Устанавливаем Apache Superset (подробности здесь)
    • Качаем с github репозиторий
    • Переключаемся на версию 2.1.1
    • Правим версию образа в docker-compose (или используем переменную TAG)
  2. Собираем образ Apache Superset на основе официального с chromedriver или firefox. Здесь нам нужно создать файл Dockerfile и запустить процесс сборки.
  3. В файле 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
  4. Опционально можно еще настроить взаимосвязь 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 (если что-то пошло не так) и начать развертывание с начала.

Portainer Apache Superset Configuration Reporting Administrating DevOps

Этот инструмент при настройке не понадобится, это лишь рекомендация по удобной работе с 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",
]
Заходим в отдельно скачанный репозиторий superset. В ветке 2.1.1 в файле docker-compose-non-dev.yml меняем строку
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

Добавляем настройки в 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

Ivan Shamaev (Admin)
Работаю с Apache Superset с 2021 года. Веду этот блог, чтобы систематизировать свои знания и поделиться ими с другими специалистами. Подписывайтесь на мой телеграм канал @apache_superset_bi
1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x