LoginSignup
0

More than 1 year has passed since last update.

AWS RDSのイベントをNew Relicで監視してみる

Posted at

Amazon SNSで、メッセージの配信先として新しくAmazon Kinesis Data Firehoseを指定できるようになった!とのことで、タイムリーなお仕事をしたので、メモを兼ねて手順を記載。

目的

マルチAZなRDSでフェイルオーバーが起こった際にNew Relicでアラートを発生させたい。
けど、New RelicとAWSのインテグレーションを結んだだけでは検知できない…
よし、AWS SNSからKinesis Data Firehoseが呼び出せるようになったのでそれを使って通知をしてやろう。
サービスには影響ないが、AZをまたぐレイテンシーの増加が許容できないなど厳しい案件には有用?

必要なAWSコンポーネント

  • RDS(当然)
  • Kinesis Data Firehose
  • SNS

流れ

RDS(Event subscriptions) → SNS → Kinesis Data Firehose → New Relic Logs

手順

Kinesis Data Firehoseでdelivery streamsを作成する

事前準備

Kinesis Data Firehose delivery steramの配信エラーログを格納するS3バケットを作成する。
全てデフォルト設定でOK。

作成開始

スクリーンショット 2021-01-28 19.14.49.png
Kinesisのページで「Kinesis Data Firehose」を選択し、「Create delivery stream」をクリック

Step1: Name and source

スクリーンショット 2021-01-28 19.18.22.png
任意のストーリム名を入力し、その他はデフォルトのまま次へ

Step2: Process records

スクリーンショット 2021-01-28 19.19.41.png
デフォルトのまま次へ
※配信されてくるレコードのやフォーマットの変換が必要な場合は適宜設定をする。

Step3: Choose a destination

スクリーンショット 2021-01-28 19.22.35.png
※上の画像は途中で切っています。
以下を設定し次へ

項目 備考
Destination Third-party service provider
Third-party service provider New Relic
HTTP endpoint URL https://aws-api.newrelic.com/firehose/v1 デフォルトで入力済み
API Key New RelicのInsert API Key 作成方法は欄外(※)を参照
S3 backup mode Failed data only 成功ログも格納する場合はAll dataを選択
S3 backup 事前準備したS3バケット

※New Relic Insert API Keyの作成
https://docs.newrelic.com/docs/telemetry-data-platform/ingest-manage-data/ingest-apis/introduction-event-api#register

Step4: Cofigure setting

スクリーンショット 2021-01-28 19.25.36.png
デフォルトのまま次へ
※上の画像は途中で切っています。
※バッファやタグ、IAMロールの独自命名が必要な場合は適宜設定をしてください。

Step5: Review

スクリーンショット 2021-01-28 19.26.56.png
設定を確認し「Create delivery stream」をクリック
※上の画像は途中で切っています。

SNSトピックを作成する

事前準備

SNSのサブスクリプションでKinesis Data Firehoseを実行できるように下記のIAMロールを作成しておいてください。

項目 備考
信頼されたエンティティ sns.amazon.com
ポリシー 1 AmazonSNSRole AWSマネージドポリシー
ポリシー 2 任意の名前 ポリシー内容は下記に記載

ポリシー2の内容

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:ListDeliveryStreams",
                "firehose:ListTagsForDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": [
                "<<作成したKinesis Data Firehose delivery streamのarn>>"
            ],
            "Effect": "Allow"
        }
    ]
}

作成開始

スクリーンショット 2021-01-28 19.28.51.png
AWS SNSのページで「Create topic」をクリック

トピックの作成

スクリーンショット 2021-01-28 19.30.38.png
以下を設定しトピックを作成する

項目 備考
タイプ スタンダード
名前 任意

サブスクリプションの作成

スクリーンショット 2021-01-28 19.32.08.png
作成したトピックで以下を設定しサブスクリプションを作成する

項目 備考
トピックARN 作成したトピックのARN デフォルトで入力済み
プロトコル Amazon Kinesis Data Firehose
エンドポイント 作成したdelivery streamのARN
サブスクリプションロールのARN 事前準備したSNS用IAMロールのARN

RDSのイベントサブスクリプションを作成する

作成開始

スクリーンショット 2021-01-28 19.34.32.png
RDSのイベントサブスクリプションページで「Create event subscription」をクリック
以下を設定しRDSイベントサブスクリプションを作成する

項目 備考
名前 任意
ターゲット ARN
ARN 作成したSNSを選択
ソースタイプ インスタンス
インスタンスを含みます 監視するインスタンスを選択
イベントカテゴリを含みます 特定のイベントカテゴリを選択
特定のイベントカテゴリ failover、failure、recovery 要件に合わせて適宜調整

以上でNew Relic Logsへイベント通知が配信されます。

SELECT count(*) FROM Log WHERE `Message.Event Message` LIKE '%failover started%' SINCE 1 day ago TIMESERIES

スクリーンショット 2021-01-28 20.35.25.png

配信されると以下のNRQLなどでメトリクスとして検出可能なので、Conditionを作成する。
LIKEに指定する文言は適宜調整する。

できました。

参考URL

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
What you can do with signing up
0