如何將炫酷的報表直接截圖傳送郵件——在Superset 0.37使用Schedule Email功能

獨孤風發表於2020-09-28

Superset的圖表是非常炫酷的,但是原來的版本只能在web端檢視,而最新的0.37版本,可以將圖表截圖直接傳送成郵件,非常的方便。

本文將詳細介紹Superset 0.37 定時郵件功能。安裝過程遇到的任何問題請關注 “實時流式計算” 隨時與我聯絡。所有的離線安裝包已經整理好,請後臺回覆 “superset0928” 下載。

開啟郵件功能

superset 0.37的電子郵件功能 預設是關閉的

電子郵件功能允許使用者對以下兩種電子郵件進行報告:

  • 圖表和儀表板(附件或嵌在郵件之中)

  • 圖表資料(CSV附件)

vi config.py

開啟郵件功能

ENABLE_SCHEDULED_EMAIL_REPORTS = True

要傳送電子郵件 還需要配置一下SMTP

EMAIL_NOTIFICATIONS = True

SMTP_HOST = "email-smtp.eu-west-1.amazonaws.com"
SMTP_STARTTLS = True
SMTP_SSL = False
SMTP_USER = "smtp_username"
SMTP_PORT = 25
SMTP_PASSWORD = os.environ.get("SMTP_PASSWORD")
SMTP_MAIL_FROM = "insights@komoot.com"

啟動前記得執行 superset init 否則可能看不到選單

這時候再登入superset,我們可以看到在Manage下有兩個新的選單了

Dashboard Emails 和 Chart Email Schedules

配置Celery

郵件功能需要使用Celery進行定時排程,為了開啟Celery,需要在config.py中進行配置。

class CeleryConfig(object):
    BROKER_URL = 'redis://localhost:6379/0'
    CELERY_IMPORTS = (
        'superset.sql_lab',
        'superset.tasks',
    )
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    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='*'),
        },
    }

CELERY_CONFIG = CeleryConfig

隨後啟動celery worker和celery beat

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

為了更好地監控Celery,建議大家安裝flower,這是一個celery的監控,可以清楚的看到celery任務的執行情況。

pip install flower
celery flower --app=superset.tasks.celery_app:app

flower頁面:

安裝瀏覽器驅動

為了可以渲染看板,需要在superset所在環境下本地安裝瀏覽器驅動。

驅動的型別在config.py中配置

EMAIL_REPORT_WEBDRIVER = "chrome"

這裡安裝chrome

從google官方網站下載google chrome安裝包

http://www.google.cn/chrome/browser/desktop/index.html

選擇linux系統,並下載google-chrome-stable_current_x86_64.rpm

安裝:rpm -ivh google-chrome-stable_current_x86_64.rpm

再安裝chromedriver

http://chromedriver.chromium.org/

unzip chromedriver_linux64.zip

mv chromedriver /usr/bin/

清注意兩者版本一定要保證一致

安裝成功輸入 chrome 和 chromedriver驗證一下

傳送郵件

準備工作做好以後,就可以新建一個郵件傳送任務了。

傳送看板:

可以選擇傳送的看板,crontab表示式,郵箱,是否傳送測試郵件,內聯還是附件。。

也可以選擇傳送圖表:

可以選擇傳送原始資料。

最後,在郵件中接收到看板和圖表了~

郵件看板:

郵件圖表:

原始資料:

常見錯誤

接收不到郵件,也沒有看到錯誤提示

請仔細檢視celery worker的log日誌,如果傳送失敗會有錯誤提示。

可能是SMTP或者其他的配置問題。

如果log正常,請注意設定 SCHEDULED_EMAIL_DEBUG_MODE 是不是設定成了True,如果是True將進行除錯模式不會真正的傳送郵件,要改成False。

Error: Failed dependencies:

Error: Failed dependencies:
	libappindicator3.so.1()(64bit) is needed by google-chrome-stable-85.0.4183.121-1.x86_64
	liberation-fonts is needed by google-chrome-stable-85.0.4183.121-1.x86_64
	libvulkan.so.1()(64bit) is needed by google-chrome-stable-85.0.4183.121-1.x86_64

安裝chrome依賴失敗,有網的情況下 yum install libappindicator3 等等 依次安裝,沒網的話只能自行下載

IndexError: pop from empty list

redis.exceptions.AuthenticationError: Authentication required.

redis認證失敗,redis設定了密碼,但是訪問的URL沒有設定密碼,設定好密碼: “redis://xxx:xxx@localhost:6379/0”

想去掉郵件中的Explore in Superset

需要修改原始碼,位於

anaconda3/lib/python3.7/site-packages/apache_superset-0.37.0-py3.7.egg/superset/tasks/schedules.py

裡面有report charts的郵件模板,修改為自己想要的即可。

更多Flink,Kafka等實時大資料分析相關技術博文,科技資訊,歡迎關注實時流式計算 公眾號後臺回覆 “電子書” 下載300頁Flink實戰電子書

相關文章