vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

New Relic Workflow で Alert を Backlog へ通知する

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点です。

Backlog API

APIの設定 – Backlog ヘルプセンター

Backlog API 実行に必要となる APIキーを発行しておきます。

今回利用するAPIは “一般ユーザー” で実行可能です。 (管理者権限は必要ありません)

AWS Secrets Manager

Backlog API での各属性指定は基本的にidで行うことになります。

都度取得する必要は無いので今回は SecretsManager に事前に設定、Lambda実行時はその値を参照するようにしています。

(各名称も入れていますが、判別のためで処理には使っていません)

EventBridge -> Lambda

イベントルールのターゲットに Lambda Function を指定すると、以下の様になります。

整形無しでの通知

受信したメッセージをそのまま流すと以下の様になります。

このままだと Email での登録と大差無いので手を入れていきます。

整形

他の標準インテグレーションを参考にメッセージの整形を行います。

通知のペイロードに含められる内容は、ワークフロー変数 として定義されています。

必要となるデータをペイロードに追加します。

  • 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.