Lambda se integra con AWS X-Ray para permitirle seguir, depurar y optimizar aplicaciones de Lambda. Puede utilizar X-Ray para seguir una solicitud mientras atraviesa los recursos de la aplicación, que pueden incluir funciones de Lambda y otros servicios de AWS.
Para enviar datos de seguimiento a X-Ray, puede utilizar una de estas tres bibliotecas de SDK:
-
AWS Distro for OpenTelemetry (ADOT)
: una distribución segura, lista para producción y con soporte de AWS del OpenTelemetry (OTel) SDK. -
AWS X-Ray SDK para Node.js: un SDK para generar y enviar datos de seguimiento a X-Ray.
-
Powertools para AWS Lambda (TypeScript)
: un kit de herramientas para desarrolladores destinado a implementar prácticas recomendadas sin servidor y aumentar la velocidad de los desarrolladores.
Cada uno de los SDK ofrecen formas de enviar los datos de telemetría al servicio X-Ray. Tras ello, se puede utilizar X-Ray para consultar, filtrar y obtener información sobre las métricas de rendimiento de la aplicación con el fin de identificar problemas y oportunidades de optimización.
importante
Los SDK de X-Ray y Powertools para AWS Lambda son parte de una solución de instrumentación completamente integrada que ofrece AWS. Las capas Lambda de ADOT forman parte de un estándar que abarca todo el sector para la instrumentación de seguimiento que recopila más datos en general, pero es posible que no sean adecuadas para todos los casos de uso. Puede implementar el seguimiento integral en X-Ray con cualquiera de las soluciones. Para obtener más información sobre cuál elegir, consulte Elegir entre SDK de AWS Distro para OpenTelemetry y X-Ray.
Secciones
Uso de Powertools para AWS Lambda (TypeScript) y AWS SAM para el seguimiento
Siga los pasos que figuran a continuación para descargar, crear e implementar una aplicación “Hola, mundo” de TypeScript de muestra con módulos de Powertools para AWS Lambda (TypeScript)hello world
.
Requisitos previos
Para completar los pasos de esta sección, debe disponer de lo siguiente:
-
Node.js 18.x o posterior
-
Versión 1.75 o posterior de la CLI de AWS SAM. Si tiene una versión anterior de la CLI de AWS SAM, consulte Actualización de la CLI de AWS SAM.
Implementar una aplicación de ejemplo de AWS SAM
-
Inicialice la aplicación utilizando la plantilla de TypeScript de tipo Hola Mundo.
sam init --app-template hello-world-powertools-typescript --name sam-app --package-type Zip --runtime nodejs18.x --no-tracing
-
Compile la aplicación.
cd sam-app && sam build
-
Implemente la aplicación.
sam deploy --guided
-
Siga las indicaciones que aparecen en pantalla. Para aceptar las opciones predeterminadas proporcionadas en la experiencia interactiva, oprima
Enter
.nota
En HelloWorldFunction es posible que no tenga definida la autorización, ¿está bien?, asegúrese de ingresar
y
. -
Obtenga la URL de la aplicación implementada:
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
-
Invoque el punto de conexión de la API:
curl
<URL_FROM_PREVIOUS_STEP>
Si se realiza de forma correcta, verá el siguiente resultado:
{"message":"hello world"}
-
Para obtener el seguimiento de la función, ejecute sam traces.
sam traces
El resultado del seguimiento tendrá este aspecto:
XRay Event [revision 1] at (2023-01-31T11:29:40.527000) with id (1-11a2222-111a222222cb33de3b95daf9) and duration (0.483s) - 0.425s - sam-app/Prod [HTTP: 200] - 0.422s - Lambda [HTTP: 200] - 0.406s - sam-app-HelloWorldFunction-Xyzv11a1bcde [HTTP: 200] - 0.172s - sam-app-HelloWorldFunction-Xyzv11a1bcde - 0.179s - Initialization - 0.112s - Invocation - 0.052s - ## app.lambdaHandler - 0.001s - ### MySubSegment - 0.059s - Overhead
-
Se trata de un punto de conexión de API pública al que se puede acceder a través de Internet. Se recomienda eliminar el punto de conexión después de las pruebas.
sam delete
X-Ray no sigue todas las solicitudes realizadas a la aplicación. X-Ray aplica un algoritmo de muestreo para garantizar que el seguimiento sea eficiente, a la vez que proporciona una muestra representativa de todas las solicitudes. La tasa de muestreo es 1 solicitud por segundo y un 5 por ciento de las solicitudes adicionales. La frecuencia de muestreo de X-Ray no se puede configurar para las funciones.
Uso de Powertools para AWS Lambda (TypeScript) y el AWS CDK para el seguimiento
Siga los pasos que figuran a continuación para descargar, crear e implementar una aplicación “Hola, mundo” de TypeScript de muestra con módulos de Powertools para AWS Lambda (TypeScript)hello world
.
Requisitos previos
Para completar los pasos de esta sección, debe disponer de lo siguiente:
-
Node.js 18.x o posterior
-
Versión 1.75 o posterior de la CLI de AWS SAM. Si tiene una versión anterior de la CLI de AWS SAM, consulte Actualización de la CLI de AWS SAM.
Implementar una aplicación de ejemplo de AWS Cloud Development Kit (AWS CDK)
-
Cree un directorio de proyecto para la nueva aplicación.
mkdir hello-world cd hello-world
-
Inicialice la aplicación.
cdk init app --language typescript
-
Agregue el paquete @types/aws-lambda
en forma de dependencia de desarrollo. npm install -D @types/aws-lambda
-
Instale la utilidad Tracer
de Powertools. npm install @aws-lambda-powertools/tracer
-
Abra el directorio lib. Debería ver un archivo llamado hello-world-stack.ts. Cree dos nuevos archivos en este directorio: hello-world.function.ts y hello-world.ts.
-
Abra hello-world.function.ts y agregue el siguiente código al archivo. Se trata del código de la función de Lambda.
import { APIGatewayEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer(); export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => { // Get facade segment created by Lambda const segment = tracer.getSegment(); // Create subsegment for the function and set it as active const handlerSegment = segment.addNewSubsegment(`## ${process.env._HANDLER}`); tracer.setSegment(handlerSegment); // Annotate the subsegment with the cold start and serviceName tracer.annotateColdStart(); tracer.addServiceNameAnnotation(); // Add annotation for the awsRequestId tracer.putAnnotation('awsRequestId', context.awsRequestId); // Create another subsegment and set it as active const subsegment = handlerSegment.addNewSubsegment('### MySubSegment'); tracer.setSegment(subsegment); let response: APIGatewayProxyResult = { statusCode: 200, body: JSON.stringify({ message: 'hello world', }), }; // Close subsegments (the Lambda one is closed automatically) subsegment.close(); // (### MySubSegment) handlerSegment.close(); // (## index.handler) // Set the facade segment as active again (the one created by Lambda) tracer.setSegment(segment); return response; };
-
Abra hello-world.ts y agregue el siguiente código al archivo. Contiene el constructo NodejsFunction, que crea la función de Lambda, configura las variables de entorno para Powertools y establece la retención de registros en una semana. También incluye el constructo LambdaRestApi, que crea la API de REST.
import { Construct } from 'constructs'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { LambdaRestApi } from 'aws-cdk-lib/aws-apigateway'; import { CfnOutput } from 'aws-cdk-lib'; import { Tracing } from 'aws-cdk-lib/aws-lambda'; export class HelloWorld extends Construct { constructor(scope: Construct, id: string) { super(scope, id); const helloFunction = new NodejsFunction(this, 'function', { environment: { POWERTOOLS_SERVICE_NAME: 'helloWorld', }, tracing: Tracing.ACTIVE, }); const api = new LambdaRestApi(this, 'apigw', { handler: helloFunction, }); new CfnOutput(this, 'apiUrl', { exportName: 'apiUrl', value: api.url, }); } }
-
Abra hello-world-stack.ts. Este es el código que define la pila de AWS CDK. Reemplace el código con lo siguiente:
import { Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { HelloWorld } from './hello-world'; export class HelloWorldStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); new HelloWorld(this, 'hello-world'); } }
-
Implemente la aplicación.
cd .. cdk deploy
-
Obtenga la URL de la aplicación implementada:
aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?ExportName==`apiUrl`].OutputValue' --output text
-
Invoque el punto de conexión de la API:
curl
<URL_FROM_PREVIOUS_STEP>
Si se realiza de forma correcta, verá el siguiente resultado:
{"message":"hello world"}
-
Para obtener el seguimiento de la función, ejecute sam traces.
sam traces
El resultado del seguimiento tendrá este aspecto:
XRay Event [revision 1] at (2023-01-31T11:50:06.997000) with id (1-11a2222-111a222222cb33de3b95daf9) and duration (0.449s) - 0.350s - HelloWorldStack-helloworldfunction111A2BCD-Xyzv11a1bcde [HTTP: 200] - 0.157s - HelloWorldStack-helloworldfunction111A2BCD-Xyzv11a1bcde - 0.169s - Initialization - 0.058s - Invocation - 0.055s - ## index.handler - 0.000s - ### MySubSegment - 0.099s - Overhead
-
Se trata de un punto de conexión de API pública al que se puede acceder a través de Internet. Se recomienda eliminar el punto de conexión después de las pruebas.
cdk destroy
Interpretación de un seguimiento de X-Ray
Después de configurar el seguimiento activo, se pueden observar solicitudes específicas a través de la aplicación. El mapa de seguimiento de X-Ray muestra información sobre la aplicación y todos sus componentes. En el siguiente ejemplo, se muestra un seguimiento de la aplicación de muestra:
