Lookerbot を動かして Slack から ダッシュボードを呼び出してみた #looker
Looker Advent Calendar 2019 17日目の記事です。
便利そうな機能として Lookerbot で Slack から Looker のグラフが呼び出せるようなので、実際に動かしてみました。
検証環境
ザクッとしてますが、上記のような環境を構築して検証しました。
Slack環境の設定手順
まずは Slack のアプリとして登録する必要があるのでSlack APIにアクセスして登録作業を行います。
任意のアプリの名称を入力し、ワークスペースを選択します。指定が終わったら Create App をクリックしてSlackアプリを作成します。
アプリが作成されるとBasic Information画面に遷移しますので、App CredentialsのVerification TokenをSLACK_SLASH_COMMAND_TOKENに設定します。
Botユーザを作成
Add a Bot Userをクリック
DisplaynameとDefault usernameを任意に指定します。
Bot Userの追加が終わったらインストールします
LookerbotCMTestがアクセスを求めてくるので、許可します。
無事許可設定が完了するとAccess Tokenが発行されるのでそれをSLACK_API_KEYに設定します。
これでSLACK_API_KEYとSLACK_SLASH_COMMAND_TOKENの2つの情報が取得できたので次はLookerbotのサーバの構築に移ります。
Lookerbotを動かすサーバを構築
まずはEC2を起動して、 Lookerbot を動作させるための前提条件があるので、それをセットアップします。
A web server capable of running Node.js applications to deploy the bot application to
- Node.js 6.10.3 is required
- Yarn is required
EC2にSSHで接続し、 Node.js をダウンロード&展開
$ wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz $ tar xvf node-v12.13.0-linux-x64.tar.xz
展開したnode.jsのbinにパスを通します。( .bash_profile )に追加。
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/ec2-user/node-v12.13.0-linux-x64/bin
yarn をインストール
$ curl -o- -L https://yarnpkg.com/install.sh | bash $ source .bashrc
Lookerbotのインストール
wgetでLookerbotのソースをダウンロードします。
$ wget https://github.com/looker/lookerbot/archive/master.zip $ unzip master.zip $ cd lookerbot-master
展開されたディレクトリ内に .env-sample というファイルがあるので、それをコピーしてviで編集します。
$ cp -p .env-sample .env $ vi .env
下記は.env-sampleの中身
SLACK_API_KEY=fooo-abc123 SLACK_SLASH_COMMAND_TOKEN=abc123 LOOKER_URL=https://me.looker.com LOOKER_API_BASE_URL=https://me.looker.com:19999/api/3.0 LOOKER_API_3_CLIENT_ID=abcdefghjkl LOOKER_API_3_CLIENT_SECRET=abcdefghjkl LOOKER_CUSTOM_COMMAND_SPACE_ID=13 SLACKBOT_S3_BUCKET=my-bucket SLACKBOT_S3_BUCKET_REGION=us-east-1 AWS_ACCESS_KEY_ID=ABCDEFGHJKL AWS_SECRET_ACCESS_KEY=abcdefghjkl
LOOKER_API_3_CLIENT_ID及びLOOKER_API_3_CLIENT_SECRETはLookerのAdmin/UsersでClient IDとClient Secretを発行します。
LOOKER_URL及びLOOKER_API_BASE_URLは契約しているドメイン名に置き換えてください。
LOOKER_CUSTOM_COMMAND_SPACE_IDにはurlにあるfolers/の数字部分の数字を設定します。
SLACKBOT_S3_BUCKET、SLACKBOT_S3_BUCKET_REGIO、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYについては利用するAWS環境に合わせて設定してください。
.envファイルの編集が終わったら保存して、yarnの依存関係をインストールし、起動します。
$ yarn install $ yarn start
Lookerbotがちゃんと起動されました。
起動したログには下記のように
info: ** Serving webhook endpoints for Slash commands and outgoing webhooks at: http://MY_HOST:3333/slack/receive
と出ているので、 http://18.xx.xx.xx:3333/slack/receive と書きたいところですが、Slackからはhttpsでしか投げられないのでこれでは残念ながらエラーになってしまいます。
ALBを立ててhttpsでリクエストを投げる
SlackからのhttpsリクエストをALBで受けて、ALBからLookerbotのサーバにはhttpで通信するように構成する必要があります。
ドメイン取得及びALBのセットアップの流れについては Alteryx ServerをSSL化させたい!AWS Certificate Managerで無償のSSL証明書を取得してGalleryにALB経由でアクセスする環境を作ってみた が参考になるかと思います。
Slack Commandsを登録する
ドメインが取れたらSlash CommandsのRequest URLに設定します。
Slackからslash commandsを発行してみる
Lookerbot用のスペースにダッシュボードを定義しています。
Slack画面で/looker lookerbot_sampleと入力してみます。
無事Slackコマンドでグラフの画像が表示されました。 現在ダッシュボードには 1Look までの制限があり、複数Looksが含まれてる場合は以下のようにerrorとなってしまいます。
呼び出すLookにFilterの定義をすることでフィルタしたグラフをカンマ区切りでリクエストすることも可能になります。 /looker lookerbot_sample 10,11,12等
Filterが設定されているかどうかは/looker findと打つことで以下のようなメッセージが返ってきます。
ダッシュボード名の後ろに<month>とか出ているものがFilter定義されているものとなります。
またLookのダッシュボード自体には複数のフィルタを定義することはできますが、こちらもSlack Commandからはフィルタは1つまでしか有効になりません。
まとめ
このLookerbot機能を使えばLookerにログインすることなくグラフを表示させることが可能となります。またLookerに登録されてないユーザでもSlackからslash commandでリクエストすることによりグラフが表示できるので、ちょっと最新の状況を確認したいとき等便利に活用ができます。
各人がslash commandでリクエストしたグラフの画像はS3に保存されていますので、S3から画像データを消すと当然Slackで表示していた画像が見えなくなりますが、この辺り過去◯◯日以前のものは削除する等のライフサイクルのルール設定は入れておいた方が良さそうですね。