問題: CloudWatchメトリクスまたは呼び出しが表示されない
OpenTelemetryでAWS Lambda関数をインストルメントして呼び出した後、 New Relic UIにCloudWatch metricsセクションまたはInvocationsタブが表示されません。
解決
New RelicがLambda関数をUI上で正しく識別して表示するには、以下のOpenTelemetryリソース属性が必要です。
| 属性 | 説明 | 値の例 |
|---|---|---|
faas.name | Lambda関数の名前 | my-lambda-function |
faas.id | Lambda関数の完全なARN | arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function |
これらの属性が欠落している場合は、環境変数OTEL_RESOURCE_ATTRIBUTESを使用して設定してください。
SAMテンプレート:
yourFunctionHere: Type: AWS::Serverless::Function Properties: # ... Environment: Variables: OTEL_RESOURCE_ATTRIBUTES: "faas.name=my-lambda-function,faas.id=arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function"重要
my-lambda-functionとARNを、実際の関数名とARNに置き換えてください。ARNは、AWS Lambdaコンソールに表示されている値と完全に一致する必要があります。
AWS Console:
- 作成した関数を Lambda Console で開きます。
- Configuration選択し、次にEnvironment variables選択します。
- Edit選択し、次にAdd environment variable選択します。
- Key
OTEL_RESOURCE_ATTRIBUTESに、 Valueをfaas.name=my-lambda-function,faas.id=arn:aws:lambda:us-east-1:123456789012:function:my-lambda-functionに設定します。 - Saveを選択します。
すでに他のリソース プロパティ セットがある場合は、新しい値をコンマ区切りのキーの値のペアとして追加します。
OTEL_RESOURCE_ATTRIBUTES=service.name=my-service,faas.name=my-lambda-function,faas.id=arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function問題:トレースにリクエストIDが欠落している
Lambda関数 トレースはNew Relicに表示されますが、 AWSリクエスト ID はルート スパンに表示されないため、トレースと CloudWatch ログ エントリを関連付けることが困難になります。
解決
ハンドラー内でルートスパンにfaas.execution属性を設定してください。OpenTelemetryセマンティック規約では、この属性はcloudプロバイダーのリクエストIDまたは呼び出しIDとして定義されています。
パイソン:
from opentelemetry import trace
def handler(event, context): span = trace.get_current_span() span.set_attribute("faas.execution", context.aws_request_id)
# Your handler logic here return {"statusCode": 200, "body": "OK"}Node.js:
const { trace } = require('@opentelemetry/api');
exports.handler = async (event, context) => { const span = trace.getActiveSpan(); if (span) { span.setAttribute('faas.execution', context.awsRequestId); }
// Your handler logic here return { statusCode: 200, body: 'OK' };};Javaです。
import io.opentelemetry.api.trace.Span;
public class Handler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> { @Override public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) { Span span = Span.current(); span.setAttribute("faas.execution", context.getAwsRequestId());
// Your handler logic here return new APIGatewayProxyResponseEvent().withStatusCode(200); }}ヒント
New Relic 、トレース詳細パネルにfaas.executionがRequest IDとして表示されるため、あらゆる呼び出しに対応する CloudWatch ログ エントリを簡単に見つけることができます。
詳細情報
詳細については、以下を参照してください。