Redash のオンプレの bot を、Slack の Bolt というフレームワークを使って作り直しました。
Redash とは
Redash は様々なデータソースと接続して SQL/可視化に使える OSS/SaaS です。最近、Databricks に買収されたことで話題にもなりました。
Redash 本体は OSS で公開されていますが、Slack ボットに関しては OSS ではありません(OSS でないものが公式提供されてる)。そのため、Redash 本体はオンプレ(クラウド)にデプロイできるにも関わらず、ボットがオンプレに置けないという課題がありました。このあたりの課題感は、ボットのフォーク元である、hakoberaさんのQiitaをご覧ください。
また、OSS 版 Redash を運用する工夫はこちらに記載しています。今回のリリースに伴い、JX通信社の Slack にもインストールしています。
Slack の Bolt とは
Slack の Bolt はボットのためのフレームワークで、とても生産性高く書けます。また、Python 版も最近 α 版がリリースされました。
さて、Slack の bot は、もともと RTM (Real Time Messaging)と呼ばれる、Websocket ベースのアーキテクチャでした。しかし新しい Slack のアプリでは、Events API という Webhook(HTTP) ベースの新しい bot を作る必要があります。これはアーキテクチャ的に後述する安定性などのメリットがあります。
使い方
詳しくは README を読んでください。Docker を使う場合は docker run yamitzky/redashbot:2.0.0
で使えます
書き直した理由
コードを書き直したことにより、次のメリットが生まれました。
- RTM API から Events API へ移行したことで、安定性が増加した
- HTTP でロードバランサーにぶら下げればいいので負荷分散しやすい
- Websocket に比べ、ヘルスチェックがしやすい
- TypeScript へ移行
- ソースコードを分割しやすくなった
特に、僕のフォークしたバージョンではダッシュボードが見れるなどの追加機能があったため、ソースコードが地獄でした(ソース)。
また、地味に次のような変更をしています
- デフォルトブランチを master ではなく main に
- Chromium 以外に、Firefox や Webkit のサポート (playwright を利用。テストできてない)
- Serverless 環境へのデプロイ (途中...誰かテストして...)
playwright は Microsoft から出ている Puppeteer の後継パッケージみたいな感じで、マルチブラウザでの Puppeteer 相当のことができます。また、公式で Docker イメージが提供されているので、Docker 化も簡単でした。(文字化け対策で fonts-noto だけインストールした)
できること
公式のボットを使ってないのでわからないですが、
- グラフのキャプチャ (これは当たり前ですね!)
- ダッシュボードのキャプチャ
- 表データを、キャプチャではなく、フォーマットした表テキストとして投稿する
などができます。また Bolt で作られている OSS なので、機能追加も簡単かと思います。せっかくなので、対話機能とかも使いこなしたいかもしれない。
@bot <URL>
といった形式で使うので、もちろん Slack のリマインダーと組み合わせて使うこともできます。例: /remind #hoge @redash https://your-redash-url/dashboards/fuga
*1