New Relicでアラートを通知するときに作成される「インシデント」「イシュー」はNRQLでクエリーすることができるので試してみました。
この記事の目次は以下です。
- インシデント、イシューとは?
- データ定義とクエリ
- 活用例
インシデント、イシューとは?
アラートの概念と用語の図を引用します。
- ① アラート条件を満たすと、インシデントが生成される。
- ② インシデントからイシューが生成される
- 発生したインシデントはアラートポリシーの設定に従い「新たなイシューが生成される」または「未解決イシューにグルーピングされる」
- ③ イシュー毎にワークフローが動き、通知などの出力が行われる。
用語
用語 | 概要 |
---|---|
アラートポリシー | アラート条件のグループ。イシューのグルーピングやワークフローとの紐付け設定はここで行う |
アラート条件 | インシデントを生成する条件 (例. CPU使用率80%を超過時にアラートとする) |
インシデント | アラート条件によって生成されたイベント |
イシュー | グルーピングされたインシデント。ワークフローはこの単位で実行される |
ワークフロー | 別のサービスへの通知やチケット発行などの挙動を定義する |
イシューのグルーピング
ポリシーの設定で、以下のいずれかからグルーピング法則を選択します。
- アラートポリシー毎に1つ
- アラート条件毎に1つ
- インシデント毎に1つ
イシューが作成されるタイミングを決定するにも詳しく記載されています。
データ定義とクエリ
補足:以降に出てくるデータは、意図的にアラートを発生させ続けている環境でサンプル取得したので、インシデントやイシューの数が多いですがご了承ください。
インシデント
UI上で確認
データ定義
インシデントはNRDB(New Relic上のデータ)に格納されておりNRQLでクエリをかけることができます。
「NrAiIncident」というデータです。
データ定義はNew Relic data dictionaryに記載されています。
UI上から1つ1つのインシデントの「View incident payload」をクリックして確認できる属性と若干違うものもあります。(この違いについては検証できていません)
クエリしてみる
SELECT * FROM NrAiIssue
「Condition Name」のところにインシデント発生の元となったアラート条件が記載されています。
キャプチャには表示されていないですが「Event」というフィールドをみると1つの発生に対して「open」「close」別々でインシデントデータが存在しました。発生数を集計したい場合は「open」に絞ってクエリするとよさそうです。
イシュー
UI上で確認
データ定義
NRDB上では「NrAiIssue」というデータで格納されているようで、NRQLからもクエリできました。
ただNew Relic data dictionary上にNrAiIssueの項目は見当たりません(フィードバックを送信済)
https://docs.newrelic.com/attribute-dictionary/?event=NrAiIncident
クエリしてみる
SELECT * FROM NrAiIssue
「Entity Names」のところにあーラーと条件名が入っています。['〜']という表記になっておりリスト形式で複数のインシデントがまとめられることうかがえます。「Incident Ids」もリストになっています。
「Event」の項目は「create」「activate」「close」の3種類が確認できます。
活用例
ポリシーを横断したイシューの傾向分析、細かく条件をチューニングしたクエリでダッシュボードを作成し状況把握などに使えそうです。
私の所属するチームではNew Relicのモニタリングの傾向や挙動そのものを確認するものも作ったりもしています。→記事
New Relic上で扱うデータはNRDBに格納されNRQLでクエリできるので、監視対象のサイト、アプリケーション、インフラだけでなくNew Relic上のデータも同じ方式で扱えるのが気に入っています。
他にもさまざまな使い方をしているので、また記事にできたらと考えています。