こんにちは。サーバーサイドエンジニアの武井です。 社内の改善業務でデータベースの抽出結果に応じてSlackのチャンネルに通知が欲しいという依頼を受けまして、改善も出来てブログのネタにもなって二度美味しい!と思い記事にしてみました。
ヤプリのデータはAWSやSQLite、Salesforce等いろいろなデータベースに存在していますが、多くの情報はRedashに集約され一括で検索出来る様になっています(もちろん個人情報に関連するデータは参照することはできません)。ダッシュボードなどをうまく活用して、エンジニアだけでなく社内で広く活用されています。
依頼の内容はデータベースを参照する必要がある方法でしたが、データベースを直接参照するのではなくRedash内に集約されたデータからアラートを作成してSlackに通知してみることにします。
こういうよくありそうな作業はすでに誰かがやっているのが常なので、先人の記録を参考にしてさくさくっと実装してみます。
参考にした記事
Redashでクエリーとアラートを作成
Redashでクエリーを作成
まずRedashの Queries
で抽出のためのSQLを記述します。
図はサンプルのクエリーですが、アラート状態と通常状態の閾値を意識したカラム出力を設定しておくとアラート作成時に悩まなくて済みます。
出力は数値でも文字列でも大丈夫な様です。
作成したら保存します。
画面右下に Refresh Schedule:
がありますので更新間隔を忘れずに設定して下さい。
更新がかかるたびにアラートの判定が行われる様なので適度な間隔を設定して下さい。またアラート設定後は手動のRefreshでもアラート判定が行われるようです。
Redashでアラートを作成
次にRedashのAlertsでアラートを作成します。そのままですね。
まずクエリーを選択する画面になるので先ほどQueriesで作成したクエリーを選択して保存します。
次にアラートの条件を設定します。
Trigger when:
にさきほどクエリーで出力したカラムを指定します。複数のカラムがある場合はセレクト項目から選択します。その右の入力枠で不等号などの条件と閾値になる値を入力します。
When triggered, send notification:
でアラートを通知するときの条件を選択できます。条件は以下の3つが選択出来ます。
通知条件 | 内容 |
---|---|
Just Once |
閾値が OK からTRIGGERD に変わるたびに通知します |
Each time alert is evaluated |
直前のステータスはOKでなくとも、アラートが TRIGGERD であれば通知します。 |
At most every |
通知の最小間隔を設定します。頻繁に通知があって困る場合は設定すると良いと思います。 |
Template:
にSlackに通知する本文を記述します。
Slackへの通知であれば Subject
は空で、 Body
だけの入力で良いと思います。
またBody内の文字列で {{QUERY_RESULT_VALUE}}
などのパラメータを使用すると、閾値として使用したカラムの内容が指定出来たりします。いろいろ指定出来ますのでFormatting guidesを参照して下さい。
Slackへの通知ですので @ユーザー名
でメンションを飛ばしたくなると思いますが、そのまま記述するとメンションにはならずそのまま出力されてしまいます。Formatting text for app surfaces | Slack を参考にSlackのユーザーIDやグループを指定しましょう。
保存すると Destinations
に自分のメールアドレスだけある状態で作成されます。ここにSlackの通知先を追加したいのですがまだ存在しませんので先にSlackの設定を行います。
Slackに通知用のアプリを追加
SlackでIncoming Webhookを設定する
Web版のSlackのアプリディレクトリに移動して 「Incoming Webhook」を検索して使用します。
「Slackに追加」をクリックすると通知を行うチャンネルの選択画面になります。
チャンネルを指定して 「Incoming Webhook インテグレーションの追加」をクリックします。
次の画面で Webhook URL
が表示されるのでコピーして保存します。
その他Slackに通知する際のアイコンやユーザ名が設定できますのでお好みで設定します。
Redashで通知先を設定
Redashに戻って先ほどSlackで設定したチャンネル名と Webhook URL
を使用してDestinationsを作成します。
Destinationsが作成出来たらアラートの画面に行き +Add
で作成した通知先を選択してください。
以上で設定は完了です。
動作確認
Redashのクエリーで指定のカラムが閾値を超えたらSlackに通知が届くはずです。
まとめ
最初はRedashの公式Slackbotがdeplicatedになっているなど作業が難航するかと思ったのですが、代替手段があることがわかり手順を踏めば案外簡単に設定ができました。アイデア次第でいろいろなアラートが作成出来て捗りそうですね。
ヤプリでは日々の業務を継続して改善していくエンジニアを募集しています。