share facebook facebook facebook twitter twitter menu hatena pocket slack

2021.02.08 MON

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

浪谷 浩一

WRITTEN BY 浪谷 浩一

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。

作成開始

Kinesisのページで「Kinesis Data Firehose」を選択し、「Create delivery stream」をクリック

Step1: Name and source

任意のストーリム名を入力し、その他はデフォルトのまま次へ

Step2: Process records

デフォルトのまま次へ
※配信されてくるレコードのやフォーマットの変換が必要な場合は適宜設定をする。

Step3: Choose a destination

※上の画像は途中で切っています。
以下を設定し次へ

項目 備考
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

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

Step5: Review

設定を確認し「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"
        }
    ]
}

作成開始

AWS SNSのページで「Create topic」をクリック

トピックの作成

以下を設定しトピックを作成する

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

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

作成したトピックで以下を設定しサブスクリプションを作成する

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

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

作成開始

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

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

できました。

参考URL

元記事はこちら

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

浪谷 浩一

浪谷 浩一

2017年12月入社。運用保守部隊のマネージメントやってます。大阪オフィス所属。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。