[vc_row el_class=”blog-info”][vc_column][vc_single_image source=”featured_image” img_size=”full” style=”vc_box_rounded”][vc_empty_space height=”40px”][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text el_class=”font-weight-bold”]
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.
[/vc_column_text][vc_empty_space height=”40px”][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner width=”1/6″][/vc_column_inner][vc_column_inner width=”2/3″][vc_column_text]
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
[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/6″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row el_class=”social-info”][vc_column width=”1/6″][/vc_column][vc_column width=”2/3″][vc_row_inner][vc_column_inner width=”1/2″][vc_column_text][social_share_button themes=’theme1′][/vc_column_text][/vc_column_inner][vc_column_inner el_class=”youtube-inner-col” width=”1/2″][vc_column_text][likebtn theme=”youtube” lang=”auto” show_like_label=”0″ white_label=”1″ alignment=”right”][/vc_column_text][/vc_column_inner][/vc_row_inner][vc_row_inner el_class=”social-info-inner”][vc_column_inner width=”1/4″][vc_single_image image=”921″][/vc_column_inner][vc_column_inner width=”3/4″][vc_column_text]
Diego Pacheco
Ingeniero en Sitemas, MBA (Babson College). Desarrollador PHP/Java/JavaScript. Fundador & CEO de EpicStudio. Entusiasta de las tecnologías web (JavaScript, Vue, Laravel, AWS, Docker) Viajes, Negocios, Surf y Growth.[/vc_column_text][asvc_list_item icon_fontawesome=”fa fa-calendar-o” icon_size=”14px”]Programar una reunión[/asvc_list_item][/vc_column_inner][/vc_row_inner][/vc_column][vc_column width=”1/6″][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Recent Post
[/vc_column_text][lvca_posts_carousel posts_query=”size:3|order_by:rand|post_type:post” image_linkable=”true” image_size=”full” taxonomy_chosen=”post_tag” display_title=”true” display_post_date=”true” display_summary=”true” autoplay_speed=”3000″ animation_speed=”300″ display_columns=”3″ scroll_columns=”3″ gutter=”3″ tablet_display_columns=”2″ tablet_scroll_columns=”2″ tablet_gutter=”3″ tablet_width=”800″ mobile_display_columns=”1″ mobile_scroll_columns=”1″ mobile_gutter=”3″ mobile_width=”480″][vc_empty_space height=”20px”][/vc_column][/vc_row]
