こちらのブログで何度か紹介していますが、New Relicではアプリケーションやインフラのログを取り込むことで、パフォーマンスボトルネックやエラーなどの問題分析の際にストレスなく効率的にログを活用することを可能にします。

ログの長期保存を目的としてAmazon CloudFrontやAWS WAFなどのサービスのログをAmazon S3に保存することはよく行われます。当該ログをNew Relicに取り込むことでNew RelicのダッシュボードやLogsのUIにて簡単に分析できるようになることに加え、アプリケーションやインフラのパフォーマンスなどNew Relicが収集している他のパフォーマンスデータと合わせてシステム全般に渡って包括的に分析することが可能になります。

本ブログでは、Amazon S3に保存したログをNew Relicに取り込む方法を紹介します。

取り込み手順は以下の通りです。詳細はオンラインドキュメントも参考にしてください。

  1. Amazon S3ログ転送のためのAWS Lambda関数をデプロイする
  2. AWS Lambda関数へトリガーを追加する
  3. ログ解析ロジックの指定

一つ一つ説明していきます。

 

Amazon S3ログ転送のためのAWS Lambda関数をデプロイする

New Relicでは、AWS Lambda関数を利用してAmazon S3からログデータを取り込みます。当該Lambda関数はS3バケットへのログ書き込みを契機に実行され、そのログをNew Relicに転送するものになります。

AWS Lambdaの「関数の作成」画面にてServerless Application Repositoryに登録されたLambda関数を検索します。対象のLambda関数は「NewRelic-log-ingestion-s3」です。この際、「カスタム IAM ロールまたはリソースポリシーを作成するアプリを表示する」を有効にします。また、転送対象のログが格納されるS3バケットと同一のリージョンにします。

次に、選択したLambda関数に必要なパラメータを入力し、デプロイします。必須パラメータはNRLicenseKeyであり、New Relicのライセンスキーを入力します。これは当該Lambda関数がAPI経由でNew Relicにログを登録するために必要です。

Lambda関数が無事にデプロイされました。

AWS Lambda関数へトリガーを追加する

デプロイしたLambda関数がS3バケットへのログ登録を契機に起動されるように、当該Lambda関数にトリガーを指定します。

トリガーが追加されました。複数のAWSサービスやS3バケットのログを転送したい場合はそれぞれトリガーを追加するだけですみます。

以上がAmazon S3に格納したログをNew Relicに取り込むための手順です。非常に簡単ですね。

では、Amazon S3に保存しているデータが正しく取り込まれているか確認してみます。データはNew Relic LogsのUIで確認することができます。今回のようにLambda関数経由でS3バケットのログを転送している場合、登録されるデータにS3バケット名が付与されますのでそのS3バケット名でフィルターしてログが登録されていることを確認してみます。

 

Query Builderにてログを検索して確認することも可能です。転送されたログはLogイベントとして格納されていますのでLogイベントに対する検索クエリを記述することによってデータを確認できます。

ログ解析ロジックの指定

ログテキストがJSONで構造化されている場合は、Lambda関数からログデータがLogイベントして格納される際に、属性が自動的に生成されてマッピングされます。一方、平文のログなど、非構造のログの場合はそのまま格納されるために分析が困難になります。平文の例としてはAmazon CloudFrontログなどが該当します。

このようなケースに対応するために、New Relicにログデータを取り込むタイミングでログテキストを解析(パース)するロジックを指定することが可能です。これにより平文だけをそのまま登録するのではなく、解析ロジックにしたがった属性にマッピングして登録することが可能になり、後の分析やダッシュボード作成を簡単にすることができます。手順の詳細についてはオンラインドキュメントを参照してください。

解析ロジックの登録は、Logs UIにて行うことができます。以下画像の通り、検索ボックス右の「・・・」より「Manage parsing」をクリックします。

解析ロジックの一覧画面にて「Create parsing rule」をクリックします。

解析ロジックを指定します。指定する項目は、①解析ロジックの名称、②解析対象のログを限定するための条件、③解析ロジック、の3点です。

今回S3バケットからログを転送しますので、②解析対象のログを限定するための条件としてはS3バケット名を指定します。これによって異なるフォーマットを持つ別のAWSサービスからログを取り込む場合においてもそれぞれ適切な解析ロジックを適用することが可能になります。

③解析ロジックは、Grokパターンで指定します。これにより平文で出力されるログのどの部分をどの属性にマッピングするかを指定することが可能です。例えば、AWS CloudFrontの場合、アクセス元のアドレスやステータスコードなどをそれぞれ別の属性にマッピングできます。

解析ロジックを適用後から登録されたログデータに対して解析ロジックが適用されます。先ほどと同様にLogsのUIにて登録されたログデータから、ロジックにしたがって属性値が抽出されていることが確認できます。このように属性にマッピングすることで、分析やダッシュボード作成が容易になります。たとえば、AWS CloudFrontの場合は、ステータスコードやアクセス元ごとにアクセス件数を可視化したりアラート作成することが可能です。

以上が、Amazon S3に登録されたログデータをNew Relicに登録して分析するための手順です。非常に簡単にセットアップできますし、アプリケーションやOS以外の構成要素のログを集約し、システム全般に渡って包括的に可視化・分析することが可能になりますので是非お試しください。