Problema: Métricas ou invocações do CloudWatch não estão aparecendo
Após instrumentar sua função do AWS Lambda com o OpenTelemetry e invocá-la, a seção CloudWatch metrics ou a aba Invocations não aparece na UI da New Relic.
Solução
O New Relic requer os seguintes atributos de recurso do OpenTelemetry para identificar e exibir corretamente sua função Lambda na UI:
| Atributo | Descrição | Valor de exemplo |
|---|---|---|
faas.name | O nome da função Lambda | my-lambda-function |
faas.id | O ARN completo da função Lambda | arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function |
Se esses atributos estiverem ausentes, defina-os usando a variável de ambiente OTEL_RESOURCE_ATTRIBUTES.
Template 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"Importante
Substitua my-lambda-function e o ARN pelo nome da sua função e ARN reais. O ARN deve corresponder exatamente ao valor exibido no console do AWS Lambda.
Console da AWS:
- Abra sua função no Console do Lambda.
- Escolha Configuration e depois Environment variables.
- Escolha Edit e depois Add environment variable.
- Defina Key para
OTEL_RESOURCE_ATTRIBUTESe Value parafaas.name=my-lambda-function,faas.id=arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function. - Escolha Save.
Se você já tiver outros atributos de recurso definidos, adicione os novos valores como pares chave-valor separados por vírgula:
OTEL_RESOURCE_ATTRIBUTES=service.name=my-service,faas.name=my-lambda-function,faas.id=arn:aws:lambda:us-east-1:123456789012:function:my-lambda-functionProblema: ID da requisição ausente nos traces
Os traces da sua função Lambda aparecem no New Relic, mas o ID da solicitação da AWS não está visível no span raiz, dificultando a correlação dos traces com as entradas do CloudWatch Logs.
Solução
Defina o atributo faas.execution no span raiz dentro do seu handler. As convenções semânticas do OpenTelemetry definem este atributo como o ID de requisição ou invocação do provedor de nuvem.
Python:
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); }}Dica
O New Relic exibe faas.execution como Request ID no painel de detalhes do trace, o que facilita encontrar a entrada correspondente do CloudWatch Logs para qualquer invocação.
Mais Informações
Para mais informações, consulte o seguinte: