レイヤーなしで Lambda 関数を使用している場合は、選択したランタイムに基づいて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 コードでは、ファイルの先頭にエージェント モジュールを要求し、ハンドラー関数を newrelic
setLambdaHandler
でラップします。 例えば:- CommonJS のサンプルコード:
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();});- ES モジュールのサンプルコード:
import newrelic from 'newrelic';// Other module loads go under the require statement aboveexport const handler = newrelic.setLambdaHandler((event, context, callback) => {// This is your handler function codeconsole.log('Lambda executed');callback();});オプション:
recordCustomEvent
APIを使用してLambdaにカスタムイベントを追加することもできます。例えば:- CommonJS のサンプルコード:
module.exports.handler = newrelic.setLambdaHandler((event, context, callback) => {newrelic.recordCustomEvent('MyEventType', { foo: 'bar' });console.log('Lambda executed');callback();});- ES モジュールのサンプルコード:
export const lambdaHandler = 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 環境で実行すると、エージェントは自動的にサーバーレス モードで実行されます。 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 を使用する必要があることに注意してください。コールバックベースの関数はサポートされていません。インストゥルメンテーションを完了するには、次のいずれかの手順に従ってテレメトリーデータをNew Relicに送信します。
- New Relic Lambda
Extension layer
を使用します。 最新の(NewRelicLambdaExtension)レイヤーarnを取得できます。 AWS CLI を使用してレイヤーをインストールするか、手動で Lambda に追加することができます。
bash$aws lambda update-function-configuration --function-name <your-lambda-function-name> --layers arn:aws:lambda:<aws-region>:451483290750:layer:NewRelicLambdaExtension:<version>- New Relic Lambda
newrelic-log-ingestion
使用してください。 詳細な手順については、 CloudWatch フォールバックを参照してください。
Python Lambdaをインストゥルメントするには:
Python エージェントと Python ラムダ ラッパー パッケージの両方をダウンロードし、関数コードと同じディレクトリに配置します。 これを行うには、pip を使用します。
bash$pip install -t . newrelic newrelic-lambda重要
Homebrewを使用している場合、次のエラーが発生する可能性があります:
DistutilsOptionError: must supply either home or prefix/exec-prefix -- not both
。詳細については、 HomebrewGitHubの投稿を参照してください。Lambda コードで、Python エージェント モジュールと Python ラムダ ラッパー モジュールの両方をインポートします。
New Relic デコレータを使用してハンドラー関数を装飾します。 まず、コードに New Relic パッケージをインポートする必要があります。 次に例を示します。
import newrelic.agentfrom newrelic_lambda.lambda_handler import lambda_handlernewrelic.agent.initialize()@lambda_handler()def handler(event, context):...オプション:
record_custom_event
APIを使用してLambdaにカスタムイベントを追加することもできます。次に例を示します。@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に送信します。
New RelicにはレイヤーレスRubyインストゥルメンテーション メソッドがありません。 レイヤーを使用している場合は、 コンテナー化されていない Lambda 関数の計画に関するドキュメントを参照してください。
ほとんどの場合、.NET エージェントはAWS Lambda 関数を自動的に計算し、「サーバーレス モード」に切り替えて、 New Relicやその他の機能へのデータの直接送信を無効にします。 New Relic にデータを送信するには、New Relic Lambda Extension またはnewrelic-log-ingestion
ラムダ メソッドを使用する必要があります。
.NET Lambda をセットアップするには:
- NewRelic.agent nuget パッケージをAWS Lambdaプロジェクトに追加します。 詳細については、インストレーション ガイドをご覧ください。
- 必要な環境変数をプロジェクトに追加します。 エージェントは New Relic に直接接続したりデータを送信したりしないため、
NEW_RELIC_LICENSE_KEY
必要ありません。 - オプションの環境変数を設定します。
NEW_RELIC_APP_NAME
- プロジェクトを AWS Lambda アカウントに公開します。
- New Relic Lambda Extension または
newrelic-log-ingestion
ラムダのいずれかを構成します。 - オプション: ログ記録を設定するには、AWS コンソールで
NEWRELIC_LOG_CONSOLE
およびNEWRELIC_LOG_LEVEL
環境変数を使用します。 - Lambda を少なくとも 1 回呼び出してエラーをチェックし、データが New Relic UI に表示されることを確認します。