CloudWatchのログをLambdaでNew Relicに転送する
このページについて
Amazon CloudWatch LogsのログをAWS Lambdaで、New RelicのLogsに転送する手順をメモしておきます。
New Relicのドキュメントとしてはこちら。
AWS Lambda for sending CloudWatch logs
New Relicライセンスキーを確認
New Relicの API Keys
から確認可能です。
AWS Serverless Application Repository
newrelic-log-ingestion
と入力し、 Show apps that create custom IAM roles or resource policies
にチェックを入れます。
NewRelic-log-ingestion
を選択します。
NewRelic-log-ingestionデプロイ
Deploy
NRLicenseKey
に確認したライセンスキーを入力し、NRLoggingEnabled
を True
とすることを忘れずに。
デフォルト false
なので忘れるとログ飛びません。
(ここで設定を忘れた場合は、後ほどCFnのパラメータを変えて反映させればOK)
このアプリがカスタム IAM ロールとリソースポリシーを作成することを承認します。
にチェックを入れて、デプロイします。
CFnで作成されるため、CFnスタック serverlessrepo-NewRelic-log-ingestion
からも確認できます。
Lambda関数 newrelic-log-ingestion
が作成されます。
トリガー追加
作成したLambda(newrelic-log-ingestion)から、New Relicに飛ばしたいCloudWatch Logsのロググループを指定する。
テスト用に error
というキーワードでフィルター作成してみます。
フィルターパターンについては以下を参照。
設定後、Lambdaコンソールから確認できます。
また、CloudWatch Logs側のコンソールからも確認できます。
ロググループごとにサブスクリプションフィルターを設定できるのは最大2つまでなので注意。
New Relicにログが転送されるかテスト
該当ロググループでテスト用のログストリームを作成。
アクション
の ログイベントの作成
からフィルターパターンに引っかかるようなログを生成します。
最後に、New Relicコンソールの Logs
に飛んでいるか確認します。
NRQLは以下のような形で引っかかります。
SELECT count(*) FROM Log FACET aws.logGroup WHERE aws.accountId ='XXXXXXXXXX' AND message LIKE '%error%' AND aws.logGroup = '/aws/lambda/XXXXXXX'
Discussion