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