Lookerbot を動かして Slack から ダッシュボードを呼び出してみた #looker

2019.12.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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_KEYSLACK_SLASH_COMMAND_TOKENの2つの情報が取得できたので次はLookerbotのサーバの構築に移ります。

Lookerbotを動かすサーバを構築

まずはEC2を起動して、 Lookerbot を動作させるための前提条件があるので、それをセットアップします。

A web server capable of running Node.js applications to deploy the bot application to

  1. Node.js 6.10.3 is required
  2. 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_BUCKETSLACKBOT_S3_BUCKET_REGIOAWS_ACCESS_KEY_IDAWS_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で表示していた画像が見えなくなりますが、この辺り過去◯◯日以前のものは削除する等のライフサイクルのルール設定は入れておいた方が良さそうですね。