概要

私が開発運用を担当している社内サービスでは以前よりAWS上のメトリクスやログを New Relic に集約するための仕組みを導入していましたが、その仕組みをバージョンアップする機会に公式ドキュメントを読み直すことで手順と仕組みを理解できたので整理して記載します。

New Relicのサーバーレスモニタリング

「AWS、Azure、またはGoogleCloudからサーバーレス機能を監視します。すべての機能を1か所で視覚化し、トラブルシューティングし、警告します。」

サーバーレスのモニタリング | New Relic Documentation
https://docs.newrelic.com/jp/docs/serverless-function-monitoring/overview/

以下のクラウドサービスに対応しています。

  • AWS Lambda
  • Google Cloud Functions
  • Azure Functions

この記事では AWS Lambda のモニタリングの概要と導入方法について紹介します。

AWS Lambdaのモニタリングの概要

取得できるデータ

  • メトリクス (Metrics)
  • トレース情報 (Traces)
  • ログ (Logs)

※メトリクスについては今回紹介する方法でAWSの各サービスのものを取得することができます

データ取得の方法

  • メトリクス … Amazon CloudWatch + Amazon Kinesis Data Firehose + CloudWatch Metric Streams
    • New Relic のセットアップガイド(後述)で提供される AWS CloudFormation テンプレートを使って構築できます
  • トレース情報 … 監視対象のLambda関数に追加する「Lambdaレイヤー
    • newrelic-lambda CLI(後述) でインストールできます
  • ログ …監視対象のLambda関数に追加する「Lambda拡張機能
    • トレース情報と同じく newrelic-lambda CLI で有効化できます

メトリクスを取得するための2つの方式

AWSのメトリクスを取得する仕組みが2種類用意されています。

旧方式:APIポーリング方式

New Relic のドキュメントでは「APIポーリングモード」「AWSポーリングインテグレーション」「Lambdaモニタリングインテグレーション」等と記載。

AWS Lambdaのモニタリング統合 | New Relic Documentation
https://docs.newrelic.com/jp/docs/infrastructure/amazon-integrations/aws-integrations-list/aws-lambda-monitoring-integration/

いろいろな用語で呼ばれており、それぞれの文脈で対象とする範囲も異なっているようですが「APIポーリングを利用したメトリクスの取得」は共通しているためここでは「APIポーリング方式」で統一します。

新方式:CloudWatch Metric Streams(CMS)方式

New Relic のドキュメントでは「ストリームモード」「Lambdaモニタリング機能」等と記載。

Amazon CloudWatch Metric Streamsの統合の紹介 | New Relic Documentation
https://docs.newrelic.com/jp/docs/infrastructure/amazon-integrations/connect/aws-metric-stream/

この方式も複数の用語がでてきますが、いずれも CloudWatch Metric Streams を使うので「CMS方式」と呼ぶことにします。

APIポーリング方式をお勧めしない理由

  • New Relicが非推奨としている
  • CMS方式に比べ料金が高くなる可能性がある
  • 情報の更新が遅い(5分に1回程度)
    • CMS方式は2分未満

詳しくは上掲の「Amazon CloudWatch Metric Streamsの統合の紹介」を参照。

Lambdaモニタリング機能(CMS方式)の導入

事前準備

  • New Relicアカウント
  • AWSアカウント
  • ユーザーの権限
  • New RelicのAPIキー
    • LICENSEキー
    • USERキー

導入の手順

以下の順番で実施します。

  1. メトリクスの取得の設定
  2. トレース&ログの取得の設定

New Relic のドキュメントでは少し異なる順番で書かれていますが、取得するデータの種類に対応した手順のほうがわかりやすいためこの順番でいきます。
また導入後に確認することになる New Relic コンソールの「Serverless Functions画面」でも画像のようになっています。

①メトリクス取得 設定手順 1

New RelicとAWSアカウントのリンク

New Relic のドキュメントに説明があります。が、

ステップ1: AWSとNew Relicのアカウントをリンクする | New Relic Documentation
https://docs.newrelic.com/jp/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/account-linking/

いきなり New Relic のコンソールを開いて Infrastracture > AWS > [Add an AWS account] をクリックし、案内に従って設定を始めても問題ありません。

丁寧なステップバイステップのガイドになっているので迷うことはないと思います。

①メトリクス取得 確認

AWSアカウントのリンクが完了したら Infrastracture > AWS で確認します。

  • 画像中央付近
    • CMS方式の場合は “Stream” のラベルが付く
    • 1〜3分ほどで取得しはじめる
  • “Stream” ラベルの右側
    • “Account status dashboard” ボタン
    • New Relic からのAPIコールやエラーを確認できる

Infrastructure > AWS > Account status dashboard

  • リンクしたAWSアカウントのメトリクスを取得しはじめているのが確認できる
  • この時点では Firehose や MetricStreams といったCMS方式の設定で作成されたリソースのみ取得している
  • 時間がたつと他のAWSサービスのメトリクスも取れるようになる

①メトリクス取得 設定手順 2

newrelic-lambda CLI を使って統合の設定をインストールします。
以下のコマンドを実行します。

pip3 install newrelic-lambda-cli
newrelic-lambda integrations install –nr-account-id {New Relic Account ID} –nr-api-key {New Relic License Key}

{New Relic Account ID}{New Relic License Key} はご自身が持つ値に置き換えてください。

ローカルPCのCLI環境が整っていない場合は AWS CloudShell を利用するのが簡単で便利です。

①メトリクス取得 確認 (AWS Lambdaのメトリクス)

Infrastructure > AWS > Account status dashboard

Lambdaのメトリクスも取得していることが確認できました。

②トレース&ログデータ取得 設定手順

newrelic-lambda CLIを使って一度に設定できます。

newrelic-lambda layers install –function {Function Name} –nr-account-id {New Relic Account ID} –enable-extension-function-logs true

オプションの --function {Function Name} はLambdaの関数名かARNを指定します。
このコマンドがやっていることは、

  • 対象のLambda関数に対してNew Relic用のLambdaレイヤーを追加している
    → トレースデータの取得
  • 最後の ”–enable-extension-function-logs true” でLambda拡張機能を追加
    → ログデータの取得

その他ポイント

  • モニタリングしたいリージョンごとに①と②を実行する
    • Amazon Kinesis Data Firehose がリージョンサービスのため
  • CloudFrontなどグローバルサービスをモニタリングしたい場合は us-east-1(米国東部) で①を実行する

導入後:Lambda関数のメトリクス・トレース・ログを確認する

New Relic コンソール > Serverless Functions > (関数名) から詳細を確認できます。

コンソール左側メニューに「Serverless Functions」が見当らない場合は、メニュー一番下の「… Add More」から追加できます。

メトリクス

“CloudWatch metrics” を開く

トレース情報

“Distributed tracing” を開く

表示されている “Trace groups” をクリックするとより掘り下げたトレース情報が確認できます。

ログ

“Logs” を開く

こちらもログの各行をクリックすと詳細を確認できます。

所感

ここまで書いて言うのも変ですが、基本的には公式ドキュメントで調べつつ理解して設定するのが一番ではあるものの、以上のコンパクトにまとめた手順で AWS Lambda のモニタリングは簡単に導入できることを感じてもらえれば幸いです。