Problema: Las métricas o invocaciones de CloudWatch no aparecen
Después de instrumentar tu función de AWS Lambda con OpenTelemetry e invocarla, la sección CloudWatch metrics o la pestaña Invocations no aparece en la UI de New Relic.
Solución
New Relic requiere los siguientes atributos de recursos de OpenTelemetry para identificar y mostrar correctamente tu función Lambda en la interfaz de usuario:
| Atributo | Descripción | Valor de ejemplo |
|---|---|---|
faas.name | El nombre de la función Lambda | my-lambda-function |
faas.id | El ARN completo de la función Lambda | arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function |
Si faltan estos atributos, establézcalos usando la variable de entorno OTEL_RESOURCE_ATTRIBUTES.
Plantilla de 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
Reemplace my-lambda-function y el ARN con el nombre real de su función y el ARN. El ARN debe coincidir exactamente con el valor mostrado en la consola de AWS Lambda.
Consola de AWS:
- Abra su función en Lambda Console.
- Elija Configuration y luego Environment variables.
- Elija Edit y luego Add environment variable.
- Establezca Key en
OTEL_RESOURCE_ATTRIBUTESy Value enfaas.name=my-lambda-function,faas.id=arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function. - Elija Save.
Si ya tiene otros atributos de recurso configurados, agregue los nuevos valores como pares clave-valor separados por comas:
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: Falta el ID de solicitud en las trazas
Las trazas de su función Lambda aparecen en New Relic, pero el ID de solicitud de AWS no es visible en el span raíz, lo que dificulta correlacionar las trazas con las entradas de CloudWatch Logs.
Solución
Establece el atributo faas.execution en el span raíz dentro de tu manejador. Las convenciones semánticas de OpenTelemetry definen este atributo como el ID de solicitud o invocación del proveedor de la nube.
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); }}Sugerencia
New Relic muestra faas.execution como Request ID en el panel de detalles de la traza, lo que facilita encontrar la entrada correspondiente de CloudWatch Logs para cualquier invocación.
Más información
Para más información, consulte lo siguiente: