LoginSignup
0
0

More than 1 year has passed since last update.

NewRelicのSlack監視アラートにメンションを付けてみた

Last updated at Posted at 2022-12-23

はじめに

株式会社medibaのSRE Unitでインフラエンジニアをしている@jc-kimです。
この記事は mediba Advent Calendar 2022の25日目です。

この間、NewRelicの監視運用でSlackに通知しているアラートが分かりにくいということで、@channelのメンションを付けてほしいという依頼があったため、対応した内容を書いてみたいと思います。

前提

  • NewRelicでAPI Keyを発行済みである
  • AlertCondition (Policy)は既に作成してある
  • SlackのIncoming WebHookは設定は既にされている

仕組み

image.png
上記の図のように2つのWorkflowを使用してSlackチャンネルに2回(①エラー内容、②@channelメンション付き)の送信になります。

Workflow作成 (①エラー内容通知用)

NewRelicのメイン画面から左側のナビゲーションパネルの
Alerts & AIWorkflowsを選択し, Add a Workflow 
image.png
上記の画面から

  • Workflow名を指定
  • Filter dataで対象になるAlertCondition(Policy)を選択
  • Notifyの方でSlackを選択し、SlackのDestinationを選択
  • アラートを通知するチャンネルを選択しSend test notification のボタンから通知のテスト
  • Test notification sent successfully.の表示が出たらSlackのチャンネルから通知を確認
    image.png

Workspaceがない場合は、Create new destination から Authenticate one clickで Slackとの連携

Workflow作成 (②メンション付き用)

①の手順のようにAdd a WorkflowからWorkflow作成
image.png

  • Workflow名を指定
  • Filter dataで①と同じAlertCondition(Policy)を選択
  • Notifyの方でAWS EventBridgeを選択
    image.png
  • Destination から Create new destination
    image.png
  • Destination名を指定
  • AWS regionは 東京リージョン(Asia Pacific(Tokyo)) を選択
  • AWS acciount IDは 対象のAWSアカウントのIDを指定 
  • Save Destination
  • Destination作成したら以下のようにEvent Source項目出るので選択
  • AWSEvent Bridgeのイベントソース名指定して作成(Create a new event source:...
    image.png
    image.png
  • Done ボタンを押すと上記のように Associate event source in EventBridge 画面が表示されるのでAWS マネジメントコンソールにログインしてAWSEvent Bridgeの設定を行う

AWSEvent Bridgeのイベントバス設定

image.png

  • AWSEvent Bridgeの画面から左側のナビゲーションパネルのパートナーイベントソースを選択するとステータスが「保留中」のイベントソースがあるので選択してイベントバスと関連付けるを行う
  • ステータスが アクティブ になったら左側のナビゲーションパネルの イベントバス に移動
    image.png
  • Not initiated の状態のイベントバスがあるのでアクションから検出を開始するStarted 状態にする

AWS Lambda関数の設定

  • 次にイベントバスのルールを作成する前にターゲットにするAWS LambdaのLambda関数を先に作成
  • <WebHooks URL>にてSlackのIncoming WebhookのWebhook URLを指定
  • 文字通りに<LambdaからSlackへ送信するメッセージ>にてチャンネルに送信するメッセージを指定
    (今回は@channelのメンションのみ送信するので"<!channel>"だけ入力)
lambda_function.py
import json
import urllib.request

def post_slack(argStr):
    message = argStr
    send_data = {
        "text": message,
    }
    send_text = json.dumps(send_data)
    request = urllib.request.Request(
        "<WebHooks URL>", 
        data=send_text.encode('utf-8'), 
    )

    with urllib.request.urlopen(request) as response:
        slack_message = response.read()

def lambda_handler(event, context):
    post_slack("<LambdaからSlackへ送信するメッセージ>")

AWSEvent Bridgeのルール設定

  • AWSEvent Bridgeに戻って左側のナビゲーションパネルの ルール に移動
    image.png
  • 対象のイベントバスを選択し、ルールを作成
    • ステップ1 [ルールの詳細を定義]
      名前と説明を指定し、対象のイベントバスを選択

    • ステップ2 [イベントパターンを構築]
      一番下の項目のイベントパターンの項目以外はデフォルトのまま
      イベントパターンは以下のように設定
      image.png

    • ステップ3 [ターゲットを選択]
      先ほど作成したLambda関数をターゲットに選択
      image.png

    • ステップ4・ステップ5はタグ付きやレビューをしてルールを作成

  • Lambda関数の画面からトリガーが設定されていることを確認
    image.png

最後に

  • NewRelicの画面に戻ってDone ボタン押し、Send test notificationで通知のテストを行う
    image.png
  • Incoming Webhookを設定したチャンネルからメンション付きのメッセージ送信を確認
    image.png

まとめ

NewRelicAlertCondition (Policy)からアラートが発生したら2つのWorkflowのルートがSlackのチャンネルに通知する形になります。
image.png
1つ目のWorkflowからはエラー内容を表示するメッセージで、2つ目のWorkflowは@channelのメンションを付くメッセージが続いて通知されます。

今回の対応で監視アラートの確認漏れは減っていくかと思います。
足りないところが多いかと思いますが、少しでも役に立てればと思っております。
最後までご覧いただきありがとうございます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0