New Relic から Backlog by nulab へ通知します。
前置き
New Relic Workflow の Destination
Destinations | New Relic Documentation
New Relic には色々なサービスへの連携設定が用意されていますが、今回は標準でサポートしていない(専用のインテグレーションが無い)システムへの通知になります。
通知トリガー
ワークフロー | New Relic Documentation
以下の5種類です。内、全ての Destination でサポートされているのは Activated/Closed のみです。
- Activated - Issue の Active 化
- Acknowledged - ユーザー(または統合)による Acknowledge 押下
- Closed - Issue の Close
- Priority changed - Priority の変更
- Other updates - Incidentの追加・終了・マージ
復旧通知が不要なため “Closed” を Off にするなどの変更は、Notify when
の設定で行えます。
ドキュメント上に明記されていませんが、Destinationによっては サポートしていない通知トリガー があるようです。
例えば、AWS EventBridge では “Acknowledged” がグレーアウトされていて選択できません。
(API で登録自体はでき、実際通知も発生するようですが、WebUIで制限されているので正式にはサポートしていないのだと思われます。)
Backlog の課題登録方法
Backlogの課題登録(チケット起票)方法として、選択肢は2通りです。
(a) メールによる課題登録を設定する – Backlog ヘルプセンター
(b) Backlog API で課題を登録する – Backlog ヘルプセンター
Backlog が対応しているのは送信Webhookのみです。 受信Webhookはサポートしていません。
(a) Email で登録
お手軽パターンです。
Backlog 側でメールアドレスを払い出し、New Relic 側にメールアドレスを登録します。
問題点
可読性
メール受信に合わせたフォーマットになっているため、見やすいとは言えません。
ボタン押下により Close などが行えるようになっていますが、Backlog ではURLがそのまま出力されており誤って押下しそうになります。
Tags も縦に並ぶので非常に縦長の課題になります。
- 例:先頭(左Email / 右Backlog)
- 例:末尾(左Email / 右Backlog)
不要な項目を削除できれば良いのですが、Emailインテグレーションではメール本文の規定の項目を変更する事はできません。
Alerts notification integrations- Email
• メール本文には変更できないデフォルトのデータが含まれていますが、独自にカスタマイズした追加の詳細を追加することもできます。これらのカスタマイズは、[カスタム詳細]セクションに表示されます。
復旧通知
通知トリガー “Closed” の内容が “Critical priority issue is closed” として連携されますが、メール同様別チケットとして起票されます。
復旧通知を行わない選択肢もありますが、せっかくチケット管理システムを使うので自動クローズしたいところです。
(b) API で登録
何かしらで受信し、処理分岐・整形を行い、API実行を行える様にします。
利用しているサービスに合わせて Webhook + 何かしらのワークフローツール で実装すると良いと思いますが、今回は AWS EventBridge + Lambda で実装します。
設定
Alerts notification integrations- AWS EventBridge
ドキュメントに沿って設定を追加します。大きく分けると以下3点です。
- (1) New Relic 側で、Destination、Workflow + Channel 設定を行います。
- (2) AWS 側でパートナーイベントソースを Associate します。
- Amazon との SaaS パートナーからのイベントの受信 EventBridge - Amazon EventBridge
- API での Associate はサポートされていないようで、AWSマネジメントコンソール上で実施が必要です。
- AWS 側でイベントルールを作成します。
Backlog API
Backlog API 実行に必要となる APIキーを発行しておきます。
今回利用するAPIは “一般ユーザー” で実行可能です。 (管理者権限は必要ありません)
- 課題一覧の取得 | Backlog Developer API | Nulab
- 課題の追加 | Backlog Developer API | Nulab
- 課題情報の更新 | Backlog Developer API | Nulab
AWS Secrets Manager
Backlog API での各属性指定は基本的にidで行うことになります。
都度取得する必要は無いので今回は SecretsManager に事前に設定、Lambda実行時はその値を参照するようにしています。
(各名称も入れていますが、判別のためで処理には使っていません)
EventBridge -> Lambda
イベントルールのターゲットに Lambda Function を指定すると、以下の様になります。
整形無しでの通知
受信したメッセージをそのまま流すと以下の様になります。
このままだと Email での登録と大差無いので手を入れていきます。
整形
他の標準インテグレーションを参考にメッセージの整形を行います。
- 参考
- 可読性
- Backlog の書式に合わせて、Markdown 形式にする
- chart (グラフ画像) を追加する
- 復旧通知
- New Relic 側での Issue Close に合わせて、Backlog側の状態を変更する
通知のペイロードに含められる内容は、ワークフロー変数 として定義されています。
必要となるデータをペイロードに追加します。
IssueId
・・・同一の Alert による通知であるかの判別に利用state
・・・Issue の状態( CREATED, ACTIVATED, CLOSED)violationChartUrl
・・・ インシデントチャート画像へのリンク
IssueId は “id” 、state は “state” としてデフォルトで含まれているため、violationChartUrl を追加します。
結果
整形を行って投稿した結果です。
ACTIVATED
state = “ACTIVATE” の場合や既存チケットが存在しない場合の新規での課題追加例です。
CLOSED
復旧通知(state = “CLOSED”) の場合には IssueId を持つ課題(チケット)を検索し、存在すれば状態の変更とコメントの追加を行います。
この例では Notify when を全てOnにしているため、Issue への Incident 追加 (trigger: INCIDENT_ADDED)や、ユーザーによる Acknowledge (trigger: USER_ACTION) に対するコメント追加も行われています。
コード
参考までに使用した Function とコード(Terraform)化した物は以下に置いています。
GitHub - htnosm/terraform-nr2backlog: This module is for sending New Relic issues to Backlog.