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に指定する文言は適宜調整する。
できました。