Redash v8で追加されたアラートカスタマイズ機能


この記事ではRedash v8で追加されたアラートのメッセージカスタマイズ機能について書いていきます。

再追記(v9でのアラートカスタマイズ機能の記事も書きました)

追記

はじめに

Redash v8がリリースされました。今回のリリースでアラート機能に関するコントリビュートができたので、その機能について書いていきます。

TL;DR

  • Redash v8でアラート機能にクエリの実行結果を入れてメッセージをカスタマイズする機能が入った
  • v8時点ではデフォルトOFFになっており、使うには環境変数で有効化する必要がある
  • v9に後方非互換な変更があるので注意が必要

アラートメッセージのカスタマイズ機能

Redashにはクエリの実行結果が設定した閾値を超えた際に、メールやslackに通知するアラート機能があります。
手軽にちょっとした監視ができて便利なのですが、通知されるメッセージの情報量が少なく、アラートが鳴っていることしか分かりませんでした。そのためクエリの実行結果を見る手間がかかったり、アラートのシリアスさが伝わりづらかったです。
v8で追加されたアラートメッセージのカスタマイズ機能では、クエリの実行結果を埋め込んだ任意のメッセージを送るテンプレートを作ることができます。

なおUser Guideに機能説明がありますが、こちらはv9についての説明になっており、(ホスティング版では既に使える)v8のものとは異なります。

機能

v8時点ではデフォルト無効化されており、環境変数REDASH_FEATURE_EXTENDED_ALERT_OPTIONS=true で有効化されます。
これはこの機能がまだ実験段階で、UX改善を計画しているためです。masterブランチでは既に色々と改善・変更が行われています。
テンプレートは{{mustache}}で書くことができ、次の変数にクエリの実行結果、アラートの状態が割当てられています。

v8のテンプレートで使える変数

変数名
state アラートの発火状態 string
rows クエリ実行結果の各行 value array
cols クエリ実行結果の各カラム value array

実行例

target 列、 rate 列を実行結果に含むクエリのにアラートを設定します。
閾値などを設定し、テンプレートを次のように書きます。

ターゲット : 売上前日比
{{#rows}}
{{target}} : {{rate}}%
{{/rows}}

アラート編集画面

実行結果が閾値を超えるとSlackにスクショのように通知されました。

Slackへの通知

レポーティング的な使い方

閾値はクエリ実行結果の先頭行の指定カラムの値と比較されます。
常に1以上の値が入るカラムや文字列が入るカラムを指定カラムにして「greater than 0」のような条件にしておくと毎回アラートがなりカスタムメッセージが送られます。これを利用してレポーティングや簡易のスナップショットのような使い方もできそうです。

v9の後方非互換な差分

v9ではカスタマイズ機能を含めアラート編集画面のUIががっつり改修されています。少し見た感じでも使いやすくなっていると感じました。ただし、カスタマイズ機能についてはv8と非互換な変更があるので、v8でこの機能を使う場合は注意が必要です。
v9ではクエリ実行結果などが割り当てられている変数の名前が変わっています。このため、v8時点で作成した変数を含むテンプレートはv9では期待通りに動きません。

v9のテンプレートで使える変数

変数名
ALERT_STATUS アラートの状態(OK, NG, UNKNOWN) string
ALERT_CONDITION オペレータ string
ALERT_THRESHOLD 閾値 string or number
ALERT_NAME アラート名 string
ALERT_URL アラートのURL string
QUERY_NAME クエリ名 string
QUERY_URL クエリのURL string
QUERY_RESULT_VALUE 監視対象の最新の値 string or number
QUERY_RESULT_ROWS クエリ実行結果の各行 value array
QUERY_RESULT_COLS クエリ実行結果の各カラム value array

最後に

v8で作ったテンプレートがv9で機能しなくなる可能性を考えると、アラートを大量に作るような使い方をするとマイグレーションのコストが高くなることに注意する必要があると思います。
Redash meetupのLTでこの機能を作り始めてマージするまでの話を発表させていただきました。
speaker deck
この記事を書くにあたって最近のRedashのプルリクを覗くと、アラート画面のUIが刷新されていたり、ついにPython 3になっていたりと活発な開発が続いていて、既に次のリリースが楽しみです。Redashにはとてもお世話になっているので、また何かコントリビュートしていきたいです。