New Relic監視アラートのLINE通知をAWSサーバーレスで自動化
前回のブログで、New Relic のアラートをメールに通知する記事を書きました。よかったら、見てみてください。今回はLambda を使って、Line に通知をしてみたいと思います。会社ではslack であったり、Chatwork であったり、ビジネスツールに通知すると思います。ただ、個人では流石につかいませんよね。。。ということでLine に通知できたら便利なので、通知設定していきます!
New Relic とEventbridge の連携について
以前のブログで書きましたので、その設定に関しては下記のブログで設定してみてください。変更点のみを今回
http://blog.dev-tansanken.com/getting-started-new-relic-synthetic-monitoring/
Eventbridge のターゲットをLambda に変更
前回のブログでは、SNS の通知を設定したのですが、今回はLambda と連携する必要があるので、Lmabda に変更していきます。
ターゲットをLambda に変更
ロール変更
新しいロールを選択して、適当にRole 名称をつけてあげます。
他のところは、そのままの設定で大丈夫です。これで、Lambda の連携は完了です。
Lambda のコードをデプロイ
今回もコードをGithub で管理しているので、それを参照してみてください!
今回のレポジトリ
Lambda のコードのみを管理しているので、デプロイ方法は他の記事でまた紹介します!
https://github.com/kentaindeed/newrelic-notify-lambda
Layer に関しては以前紹介したLine 通知の記事のLibrary を使用しています。
http://blog.dev-tansanken.com/lambda-line-api-auto-notification/
今回のポイント
今回のポイントは下記になります。
-
Lambda でNew Relic のEvent を取得する処理
-
New Relic で必要な情報のみを選定する
-
Line Flex Message を使ってLine 通知をオシャレにする
New Relic => Eventbridge のjson 構造に関して
Eventbridge から渡って来る時は、下記のような構造になります。
{
"version": "0",
"id": "...",
"detail-type": "...",
"source": "NewRelicEventSource", // New Relic からの通知であることを示すソース
"account": "...",
"time": "...",
"region": "...",
"resources": [
"..."
],
"detail": {
// ここに New Relic のイベントテンプレートで定義したデータが入ります
}
}
つまりは、detail に全てalert の内容が入ってきます。なので、detail の内容を取得する処理を入れる必要があります。
New Relic event 取得処理
これは簡単で、Lambda が受け取ったevent のdetail の中の処理を変数に入れてあげるだけです。
これはとても簡単ですね。detail の中でも不要な情報もでてくるので、その選定もここでしてあげます。
def process_newrelic_alert(event):
"""
New Relicアラートイベントを処理
"""
detail = event.get('detail', {})
# アラート情報を抽出
alert_info = {
'policy_name': detail.get('alertPolicyNames'),
'condition_name': detail.get('alertConditionNames'),
'severity': detail.get('priority'),
'incident_url': detail.get('issueUrl'),
'timestamp': event.get('time', ''),
'account_id': detail.get('accountId', ''),
'entity_name': detail.get('entityName', ''),
}
logger.info(f"Extracted alert_info: {alert_info}")
return alert_info
Flex message に関して
今回、Flex Message を使うこと自体が初めてだったので、今回はAI に書いてもらいました。CSS の要素とかもかかわるとあまり詳しくないので、こういうの書いてくれるの本当にありがたいです。
Flex Message Simulator というのがあるらしいので、そこで一から作成したい人はチェックしてみてください。面白そうですが、またの機会にしようと思います。
https://developers.line.biz/ja/docs/messaging-api/using-flex-message-simulator/#before-starting
最後に環境変数を設定
今回も前に紹介したGroup ID とLine Token で認証しているので、Lambdaの環境変数で設定してあげてください!
Line 通知の画像
こんな感じで通知されます。View in New Relic を押したら、New Relic のコンソールに移動できるみたいな感じです。Policy Name がダサいのがちょっと残念ですね。もうちょっと改善の余地ありです。
まとめ
Lambda の管理が少し大変ですが、こんな感じでアラート通知もLine にできたりするので、興味のある人はやってみてください!!