Rastreo de Lambda basado en Java

rastreo

Rastreo de Lambda basado en Java usando X-Ray y AWS PowerTools

El rastreo (ó seguimiento) hace que sea muy fácil identificar y depurar problemas con su aplicación. Especialmente los problemas relacionados con el rendimiento se pueden identificar fácilmente, ya que el seguimiento le permite profundizar en la actividad a nivel de componente.


Los puntos de enlace HTTP respaldados por AWS Lambdas se pueden monitorear con AWS X-Ray para el mismo propósito. Haremos uso de la biblioteca de powertools-tracking para configurar el rastreo en nuestro Lambda. La biblioteca y la documentación correspondiente se pueden encontrar en https://awslabs.github.io/aws-lambda-powertools-java/core/tracing/

Además, el proyecto de muestra que estoy usando está construido con Serverless Framework (https://www.serverless.com/framework), por lo que esta publicación de blog no contendrá ningún ejemplo relacionado con la configuración de Cloudformation. Las plantillas de Cloudformation son creadas y administradas por Serverless Framework.

Comenzaremos agregando los siguientes complementos y dependencias a build.gradle (o maven si maven es su administrador de dependencias):

plugins {
   id 'io.freefair.aspectj.post-compile-weaving' version '6.3.0'
   ...
}dependencies {
   aspect 'software.amazon.lambda:powertools-tracing:1.10.0'
   ...
}

En serverless.yml, el rastreo debe habilitarse agregando las siguientes propiedades.

provider:
name: aws
...
tracing:
lambda: true
apiGateway: true

Esta configuración agregará la configuración necesaria a la plantilla de Cloudformation que finalmente se aplica en AWS para crear la pila de Lambda.

Como paso final, todos los controladores de Lambda necesarios se deben anotar con @Tracingpara habilitar el seguimiento.

public class App implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> { 

@Tracing 
public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) { 
businessLogic1(); 
businessLogic2(); 
}

Eso es todo lo que se necesita. Debería poder ver los rastros en X-Ray una vez implementado. Un beneficio adicional de implementar X-Ray Tracing para lambda con API Gateway al frente es que podemos monitorear el tiempo de inicio en frío de Lambda y usar esos datos para hacer los cambios necesarios.

Instrumentación de clientes SDK y llamadas HTTP

Las llamadas realizadas a otros puntos de enlace HTTP y servicios de AWS mediante el SDK de AWS se pueden instrumentar para capturar el tiempo que tardan esos servicios correspondientes.

Todos los servicios de AWS SDK le permiten configurar un controlador de seguimiento que comparte los mismos detalles de intervalo que Lambda con las llamadas de AWS SDK subyacentes. Esto mostrará los tiempos de llamada SDK dentro de nuestra operación lambda en X-Ray. El siguiente es un ejemplo de la documentación en https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java-awssdkclients.html

import com.amazonaws.xray.AWSXRay; 
import com.amazonaws.xray.handlers.TracingHandler;  
... public class MyModel {   
  private AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().withRegion(Regions.fromName(System.getenv("AWS_REGION"))).withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder())).build(); 
...
}

De manera similar, el cliente Apache HTTP se puede instrumentar siguiendo la documentación en https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-java-httpclients.html

Recent Post