このページでは、ラムダ関数を手動で計測する方法を学習します。ランタイム言語別に整理されています。まだお持ちでない場合は、以下で無料の New Relic アカウントを作成して、今すぐデータの監視を開始してください。
Go-language Lambdaをインストゥルメントするには、以下の手順に従います。
Goエージェントパッケージをダウンロードして、関数と同じディレクトリに配置します。
次のコマンドを実行してエージェントをインストールします。
bash$go get -u github.com/newrelic/go-agent/v3/newrelic次のコマンドを実行して、
nrlambda
統合をインストールします。bash$go get -u github.com/newrelic/go-agent/v3/integrations/nrlambda
あなたのLambdaコードで、私たちのコンポーネントをインポートし、アプリケーションを作成し、Lambdaの起動方法を更新してください。インストゥルメンテーションの例をご覧ください。
必要に応じて、
RecordCustomEvent
APIを使用して、Lambda呼び出しに関連付けられるカスタムイベントを追加します。例えば:func handler(ctx context.Context) {if txn := newrelic.FromContext(ctx); nil != txn {txn.Application().RecordCustomEvent("MyEvent", map[string]interface{}{"zip": "zap",})}fmt.Println("hello world!")}Lambda関数を構築して圧縮し、AWSにアップロードします。
Lambdaの圧縮とアップロードについての推奨は、次のとおりです。
Linuxで実行するためのバイナリをビルドします。これにより、
main
というバイナリファイルが生成されます。次を使用できます。bash$GOOS=linux go build -o main次のものを使用して、バイナリをデプロイメントパッケージに圧縮します。
bash$zip deployment.zip mainAWSLambdaコンソールまたはAWSCLIのいずれかを使用してzipファイルをAWSにアップロードします。ハンドラーに
main
という名前を付けます(バイナリビルド中に指定された名前と一致させるため)。
次の環境変数は、Lambdaモニタリングが機能するために必要ではありませんが、Lambda関数を分散トレースに含める場合は必要です。分散トレースを有効にするには、AWSコンソールで次の環境変数を設定します。
オプションで、ロギングを構成するには、 Goエージェントロギングを参照してください。
少なくとも1回Lambdaを呼び出します。これにより、CloudWatchロググループが作成されます。次のステップではこのグループが必要です。
ラッパーはLambda実行についてのデータを収集し、JSONメッセージを生成し、CloudWatchログにログ記録します。次に、CloudWatchを設定してそのログをNew Relicに送信します。
JavaでのAWS Lambdaのモニタリングでは、APM Javaエージェントは使用しません。代わりに、次の2つのOpenTracing依存関係を使用します。
AWS Lambda OpenTracing Java SDK:AWS Lambda RequestHandlerおよびRequestStreamHandlerのOpenTracingインストゥルメンテーション。
当社のAWS Lambda OpenTracing Tracer:OpenTracing Tracerの実装は、AWS Lambdaをモニターするように設計されています。スパン、エラーイベント、トランザクションイベント、エラートレースを生成し、ディストリビューティッド(分散)トレーシングをサポートします。
ヒント
Supported OpenTracing Versions
OpenTracing 0.31.0
:
- Lambda Tracer:com.newrelic.opentracing:newrelic-java-lambda:1.1.1
- Lambda SDK:com.newrelic.opentracing:java-aws-lambda:1.0.0
OpenTracing 0.32.0, 0.33.0
:
- Lambda トレーサー: com.newrelic.opentracing:newrelic-java-lambda:2.2.3
- Lambda SDK: com.newrelic.opentracing:java- AWS Lambda :2.1.1
Java Lambdaをインストゥルメントするには、以下の手順に従います。
プロジェクトの
build.gradle
ファイルに、OpenTracing AWS Lambda トレーサーと AWS Lambda OpenTracing SDK の依存関係を含めます。dependencies {compile("com.newrelic.opentracing:java-aws-lambda:2.1.1")compile("com.newrelic.opentracing:newrelic-java-lambda:2.2.3")compile("io.opentracing:opentracing-util:0.33.0")}JavaLambdaの例に示すようにAWSLambda
RequestHandler
インターフェースを実装し、doHandleRequest
メソッドをオーバーライドします。doHandleRequest
メソッドで、LambdaTracing.instrument(...)
APIを呼び出してルートスパンを作成し、ラムダ関数の実行をトレースします。これは、ラムダ関数のビジネスロジックを定義する場所でもあります。Java Lambdaの例に示すように、
LambdaTracer.INSTANCE
をOpenTracingグローバルトレーサーとして登録します。ZIPデプロイメントパッケージを作成し、AWS Lambdaにアップロードします。または、その他の方法でディプロイします。
AWS Lambdaコンソールで、ハンドラーを設定します。 Java Lambdaの例では、ハンドラーは
com.handler.example.MyLambdaHandler::handleRequest
になります。handleRequest
が想定されているため、com.handler.example.MyLambdaHandler
を使用することもできます。以下の AWSコンソール環境変数は、Lambda関数をディストリビューティッド(分散)トレーシングに含める場合は必要です。これが推奨されます。
オプション:Lambdaコンソールで、次の環境変数を追加してデバッグログを有効にします:
NEW_RELIC_DEBUG
はtrue
です。少なくとも1回Lambdaを呼び出します。これにより、CloudWatchロググループが作成されます。次のステップではこのグループが必要です。
ラッパーはLambda実行についてのデータを収集し、JSONメッセージを生成し、CloudWatchログにログ記録します。次に、CloudWatchを設定してそのログをNew Relicに送信します。
以下のような、一般的な使用例を示す完全なプロジェクトのAWS Lambdaディストリビューティッド(分散)トレーシングの例を参照してください。
- Lambda関数間のディストリビューティッド(分散)トレーシング
- 手作業でのスパン作成(別名カスタムインストゥルメンテーション)
- 外部コールのトレース
- カスタムアトリビュート(別名タグ)のスパンへの追加
Node.js Lambdaをインストゥルメントするには:
Node.jsエージェントパッケージをダウンロードして関数と同じディレクトリに配置し、エージェントが依存関係として
node_modules
ディレクトリにインストールされていることを確認します。ノードパッケージマネージャーを使用します。bash$npm install newrelic --saveLambdaコードで、ファイルの先頭にエージェントモジュールを要求し、ハンドラー関数をラップします。例えば:
const newrelic = require('newrelic');// Other module loads go under the require statement abovemodule.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {// This is your handler function codeconsole.log('Lambda executed');callback();});オプション:
recordCustomEvent
APIを使用してLambdaにカスタムイベントを追加することもできます。例えば:module.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {newrelic.recordCustomEvent('MyEventType', { foo: 'bar' });console.log('Lambda executed');callback();});Lambda関数とNode.jsエージェントフォルダを一緒に圧縮します。要件および推奨:
- New Relicエージェントフォルダに入っていないNew Relicファイルは、含める必要はありません。
- Lambda関数のファイル名がたとえば
lambda_function.node
の場合、zipファイルにlambda_function.zip
という名前を付けることをお勧めします。 tarballは使用しないでください。 - Lambdaと関連モジュールはすべて、zipファイルのルートディレクトリにある必要があります。つまり、ファイルを含むファイルを圧縮するとうまくいきません。
圧縮したファイルを、AWS Lambdaアカウントにアップロードします。
AWSコンソールで、以下の環境変数を設定します。
オプション: AWS の外部のローカル環境でサーバーレス モードでエージェントを実行するには、環境変数
NEW_RELIC_SERVERLESS_MODE_ENABLED
をtrue
に設定します。 (これを AWS Lambda 環境で実行すると、エージェントは自動的にサーバーレス モードで実行されます。 Do not use this variable if you're running in AWS 。)オプション:サーバーレスモードでのロギングを有効にするには、環境変数を次のように設定します。
NEW_RELIC_LOG_ENABLED
をtrue
に設定します。- CloudWatchに出力するには
NEW_RELIC_LOG
をstdout
に設定するか、書き込み可能なファイルの場所に設定します。 NEW_RELIC_LOG_LEVEL
はデフォルトでinfo
に設定されており、Lambda で関数ログを送信する場合にのみ使用されます。 他のログレベルを参照してください。
オプション: Lambda 関数が ES モジュールを使用している場合は、環境変数
NEW_RELIC_USE_ESM
をtrue
に設定します。ES モジュールを使用する場合は、関数に async/await または Promise を使用する必要があることに注意してください。コールバックベースの関数はサポートされていません。少なくとも1回Lambdaを呼び出します。これにより、CloudWatchロググループが作成されます。次のステップではこのグループが必要です。
ラッパーはLambda実行についてのデータを収集し、JSONメッセージを生成し、CloudWatchログにログ記録します。次に、CloudWatchを設定してそのログをNew Relicに送信します。
Lambdaで関数ログを送信する 方法の詳細を読む。
Python Lambdaをインストゥルメントするには:
Pythonエージェントパッケージをダウンロードし、関数と同じディレクトリに配置します。この場合は、pipを使用します。
bash$pip install -t . newrelic重要
Homebrewを使用している場合、次のエラーが発生する可能性があります:
DistutilsOptionError: must supply either home or prefix/exec-prefix -- not both
。詳細については、 HomebrewGitHubの投稿を参照してください。Lambda コードで、Python エージェント モジュールをインポートし、New Relic デコレーターを使用してハンドラー関数を装飾します。 The New Relic package must be imported first in your code.次に例を示します。
import newrelic.agentnewrelic.agent.initialize()@newrelic.agent.lambda_handler()def handler(event, context):...オプション:
record_custom_event
APIを使用してLambdaにカスタムイベントを追加することもできます。次に例を示します。@newrelic.agent.lambda_handler()def handler(event, context):newrelic.agent.record_custom_event('CustomEvent', {'foo': 'bar'})...次のガイドラインを使用して、
lambda_function.py
}フォルダとnewrelic/
フォルダを一緒に圧縮します。newrelic/
フォルダー外のNewRelicファイルを含める必要はありません。- Lambda関数のファイル名がたとえば
lambda_function.py
の場合、zipファイルにlambda_function.zip
という名前を付けます。 tarballは使用しないでください。 - Lambdaと関連モジュールはすべて、zipファイルのルートディレクトリにある必要があります。つまり、ファイルを含むファイルを圧縮するとうまくいきません。
圧縮したファイルを、AWS Lambdaアカウントにアップロードします。
AWSコンソールで、以下の環境変数を設定します。
NEW_RELIC_SERVERLESS_MODE_ENABLED
。に設定true
次の環境変数はLambdaをモニターする機能には不要ですが、Lambda機能をディストリビューティッド(分散)トレーシングに含める場合は必要です。ディストリビューティッド(分散)トレーシングを有効にするには、AWSコンソールで以下の環境変数を設定します。
オプション:ログを設定するには、AWSコンソールで
NEW_RELIC_LOG
およびNEW_RELIC_LOG_LEVEL
環境変数を使用します。少なくとも1回Lambdaを呼び出します。これにより、CloudWatchロググループが作成されます。次のステップではこのグループが必要です。
New Relicデコレーターは、Lambda実行についてのデータを収集し、JSONメッセージを生成し、CloudWatchログに記録します。次に、CloudWatchを設定してそのログをNew Relicに送信します。
Ruby Lambda 関数を計測する方法は、自動と手動の 2 つがあります。
自動インストゥルメンテーション:
Lambda CLI ツールnewrelic-lambda-cliをダウンロードしてインストールします。
ツールを使用して
newrelic-lambda integrations install
コマンドを発行します。 詳細については使用方法の説明をご覧ください。マニュアル インストゥルメンテーション:
AWS ウェブコンソールのLambdaサービスセクションに移動します。 そこから、 New Relicに接続する Lambda関数 を見つけます。
デフォルトのCode [コード]タブで、Layers [レイヤー]セクションまで下にスクロールし、Add a layer [レイヤーの追加]ボタンをクリックします。
Create layer [レイヤーの作成]ボタンをクリックします。
次に、 Choose a layer [レイヤーの選択]に進み、 Specify an ARN [ARN の指定]オプションを選択します。
New Relicのレイヤーリストに移動し、ドロップダウンリストを使用して、Lambda 関数がホストされているAWSリージョンを選択します。 そこから、Lambda 関数のRubyバージョンとアーキテクチャに一致する ARN を見つけます。 オプションは X86 と ARM64 の 2 つあります。 Copy to clipboard [クリップボードにコピー]ボタンを使用するか、ARN 文字列を手動でコピーします。
AWS コンソールフォームのSpecify an ARN [ARN の指定]セクションで、New Relic Lambda レイヤーの ARN を貼り付けます。
AWSコンソールフォームで、 Add [追加]ボタンをクリックして、Lambda 関数にレイヤーを追加します。
Lambda関数のページで、デフォルトのCode [コード]タブを選択した状態で、Runtime settings [ランタイム設定]セクションまで下にスクロールし、Edit [編集]ボタンをクリックします。
既存のHandler [ハンドラー]値の安全なコピーを作成します。 後の手順で必要になります。
Handler[ハンドラー]の値を
newrelic_lambda_wrapper.handler
に変更し、 Save [保存]をクリックします。Lambda関数のページのConfiguration [設定]タブに切り替えます。
Environment variables [環境変数]サブタブを選択します。
次の環境変数を定義します。
NEW_RELIC_ACCOUNT_ID
New RelicアカウントIDを設定しますNEW_RELIC_LAMBDA_HANDLER
前の手順8でコピーした関数の元のHandler値に設定します。NEW_RELIC_LICENSE_KEY
New Relicアカウントキーを設定するNEW_RELIC_LOG_ENDPOINT
「 https://log-api.newrelic.com/log/v1」に設定NEW_RELIC_TELEMETRY_ENDPOINT
「 https://cloud-collector.newrelic.com/aws/lambda/v1」に設定します
Lambda 関数のログ (関数が STDOUT に書き込むすべての内容を含む) をNew Relicに送信する場合は、
NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS
環境変数を 'true' に設定してください。ヒント
New Relicレイヤーは、 New Relic Rubyエージェントを自動的に配信し、Lambda 関数の呼び出し前にRuby
require
を介してロードされます。 競合を避けるため、Ruby エージェントのコピーを他の場所に含めないでください。 エージェントの存在を活用するために、関数内で必要なNew Relic Rubyエージェント API 呼び出しを自由に実行してください。