Delayed::JobのQueueをRedashのAlert機能で監視する
こんにちわ。開発部のdaikichi_3です。
弊社、一部システムにバックグラウンドで非同期処理を行うDelayed::Jobを導入しています。 バックエンドにActieRecordを選択しており、queueをMySQLで管理しています。 大量にqueueが溜まってしまうと、後続のqueueに影響を与えかねないので、監視したいという話になりました。
今回はqueueの溜まり具合をredashのAlerts機能で監視、通知を試した内容を記事にしたいと思います。
Redash とは
多様なデータソースとの連携が可能で、データ分析、可視化を行う為のツールで、オープンソースで提供されています。 2019年11月現在でサポートしているデータソースは40種程度です。
Redashには大きく分類して3つの機能があります。 連携したデータソースからデータを取得する「Query」、取得した結果の可視化を行う「Dashbord」、「Alert」です。 「Query」の結果を元にして「Dashbord」「Alert」の作成が可能です。
それでは早速Alertの作成をしたいと思います。
Query の作成
まずはAlertを作成する前に、Queryを作成します。 Queryの内容はDelayed::Jobのqueueが保存されるテーブル(delayed_jobs)のデータ件数を取得する簡易的なSQLです。
SELECT count(id) FROM delayed_jobs WHERE failed_at is NULL;
Queryの定期実行の為に、併せてスケジュール設定を行う必要があります。 スケジュール設定はQuery作成画面の左下にあります。
Queryを5分毎に実行されるように設定します。
設定が完了したらQueryをsaveします。
Alert の作成
作成したQuery結果の閾値、通知タイミング、通知内容、通知先の設定を行います。
通知タイミング(When triggered, send notification)
3種類あります。実用性を考えると、「At most every」で任意の時間を設定するのが良いと思います。
- Just Once : 閾値を超えた場合に一回通知される。
- Each time alert is evaluated : 閾値を超えるたびに通知される。
- At most every : 閾値を超えた場合に設定した通知間隔内に一回通知される。大量通知を防ぎ、計画的に通知したい場合。
通知内容(Template)
default,customの2種類あります。 custom templateだとRedashが用意している組み込みのテンプレート変数を使用できるので、ある程度の詳細はメッセージに設定可能です。 ここでは通知時にqueue数を知らせたいので、QUERY_RESULT_VALUE 変数を使用しています。
通知先(Destinations)
通知先にSlackのチャンネルを設定します。
※ここで設定する通知先は事前に以下のように「Alerts Desitinations」から登録しておく必要があります。
結果
Alert発生後、解消後のSlackへの通知結果です。 通知までの確認が簡単にできました。
弊社監視ツールにDatadogを使用していることもあり、当初はqueueの件数を取得するクエリを定期実行してDatadog側に送信することを考えたのですが、もっと手軽に実現したいという事でRedashのAlert機能を試してみました。
一度slackと連携しておけば、RedashのGUI上で完結できるので、手軽さという点だけであれば使えそうな気はしました。