この記事ではRedash v8で追加されたアラートのメッセージカスタマイズ機能について書いていきます。
再追記(v9でのアラートカスタマイズ機能の記事も書きました)
追記
- 次期リリースv9でのアラート機能の改善点を公式がまとめていました
https://blog.redash.io/v9-alerts-improvements/
はじめに
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にはとてもお世話になっているので、また何かコントリビュートしていきたいです。