LoginSignup
1
1

More than 3 years have 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

1
1
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
1
1