 
        こんにちは。香田です。
今回はAWS LambdaでNew Relic Logs in Contextを利用する方法を紹介していきます。
事前にNew RelicのAWSインテグレーションが必要になる為、下記を参考に設定してみてください。
Introduction to AWS integrations
New Relic Logs in Contextについて
New Relic Logs in Contextを利用すると APMで取得されるエラー情報やトレース情報のコンテキストに応じたログを表示することが可能です。
Logs In Contextを利用する場合、New RelicのAPM Agentを利用する必要がありますが、
AWS Lambda等をサポートしているサーバーレス モニタリングを利用することで、APMと同じようにエラーやトレース情報よりLogs in Contextが確認可能です。
今回は簡易な手順で設定可能なサーバーレス モニタリングを利用し、Logs in Contextを確認していきます。
Serverless Frameworkを利用しAWS環境の構築
Logs in Contextの確認用のAWS環境として、API Gateway、Lambda環境を構築していきます。
構築にはServerless Frameworkを利用していきます。
はじめに作業ディレクトリを作成します。
$ mkdir workspace
$ cd workspaceserverlessをインストールします。
$ npm install -g serverlessNew Relicより提供されているserverless pluginをインストールします。
プラグインを利用することで、New Relicへデータが転送されサーバーレス モニタリングが利用可能となります。
$ npm install --save-dev serverless-newrelic-lambda-layersNEW_RELIC_API_KEY、NEW_RELIC_ACCOUNT_IDを環境変数に設定します。
$ export NEW_RELIC_API_KEY=xxxx
$ export NEW_RELIC_ACCOUNT_ID=xxxxServerless Frameworkの設定ファイルserverless.ymlを作成します。
service: hello-world
frameworkVersion: "3"
provider:
  name: aws
  runtime: python3.9
  stage: dev
  apiName: hello-world-api
  region: ap-northeast-1
  timeout: 300
plugins:
  - serverless-newrelic-lambda-layers
custom:
  newRelic:
    accountId: ${env:NEW_RELIC_ACCOUNT_ID}
    apiKey: ${env:NEW_RELIC_API_KEY}
    # Lambda Extension
    enableFunctionLogs: true
functions:
  hello:
    name: hello
    handler: handler.hello
    events:
      - http:
          path: /hello
          method: getLambda 関数のコードとしてhandler.pyという名前でファイルを作成します。
import json
import logging
import datetime
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def hello(event, context):
    body = {
        "message": "Hello world",
    }
    response = {
        "statusCode": 200,
        "body": json.dumps(body)
    }
    for i in range(5):
        dt_now = datetime.datetime.now()
        message = "test%d New Relic Logs in Contest %s" % (i, dt_now)
        logger.info(message)
    return responseAWS環境へデプロイします。
$ sls deploy --verboseLogs in Contextの確認
Logs in Contextを確認する為、API Gatewayへリクエストをしばらく送ってみます。
API GatewayのIDを確認し環境変数へ設定します。
$ export API_ID=xxxxAPI Gatewayへリクエストをしばらく送信します。
while true; do
    curl -s https://${API_ID}.execute-api.ap-northeast-1.amazonaws.com/dev/hello | jq -r .message
    sleep 1
doneリクエストをしばらく送信後、New Relicへアクセスし[Explorer]、[Lambda functions]より作成された関数を選択します。

[Distributed tracing]よりTrace groupを選択します。

Traceを選択し[Logs]をクリックします。

下記のようにLambdaのトレースに紐づいたログが確認できるはずです。
ログをさらに絞り込みたい場合は[Open in logs]をクリックします。

下記のように[Logs]の方で参照可能となります。

さいごに
AWS LambdaでNew Relic Logs in Contextを利用する方法如何でしたでしょうか?
Logs in Contextを利用することで、トレースやエラーといった情報を起点に目的のログを直接参照可能になる為、トラブルシューティングの時にも有用ではないでしょうか。
最後までご覧いただきありがとうございます。