Instrumentación de código C# en AWS Lambda
Lambda se integra con AWS X-Ray para permitirle rastrear, depurar y optimizar las aplicaciones de Lambda. Puede utilizar X-Ray para rastrear una solicitud a medida que esta recorre los recursos de la aplicación, desde el frontend de la API hasta el almacenamiento y la base de datos del backend. Solo con agregar la biblioteca de X-Ray SDK a la configuración de compilación, puede registrar los errores y la latencia de cualquier llamada que realice la función a un servicio de AWS.
Después de configurar el seguimiento activo, se pueden observar solicitudes específicas a través de la aplicación. El gráfico de servicios de X-Ray muestra información sobre la aplicación y todos sus componentes. En el siguiente ejemplo de la aplicación de ejemplo de procesamiento de errores se muestra una aplicación con dos funciones. La función principal procesa eventos y, a veces, devuelve errores. La segunda función de la cadena procesa los errores que aparecen en el primer grupo de registros y utiliza el SDK de AWS para llamar a X-Ray, Amazon Simple Storage Service (Amazon S3) y registros de Amazon CloudWatch.

Para activar el seguimiento activo de la función Lambda mediante la consola, siga estos pasos:
Para activar el seguimiento activo
Abra la página de Functions
(Funciones) en la consola de Lambda. -
Elija una función.
Elija Configuration (Configuración), y luego Monitoring and operations tools (Herramientas de supervisión y operaciones).
Elija Edit (Editar).
-
En X-Ray, active Active tracing (Rastreo activo).
-
Seleccione Save.
Puede utilizar el seguimiento de X-Ray de manera gratuita cada mes hasta un límite determinado como parte del nivel Gratuito de AWS. A partir de ese umbral, X-Ray realiza cargos por almacenamiento y recuperación del seguimiento. Para obtener más información, consulte Precios de AWS X-Ray
Su función necesita permiso para cargar datos de rastreo en X-Ray. Cuando activa el rastreo activo en la consola de Lambda, Lambda agrega los permisos necesarios al rol de ejecución de la función. De lo contrario, agregue la política AWSXRayDaemonWriteAccess
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 sigue proporcionando 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.
Cuando se usa seguimiento activo, Lambda registra dos segmentos por seguimiento, lo que crea dos nodos en el gráfico de servicios. En la siguiente imagen, se resaltan los dos nodos para la función principal de la aplicación de ejemplo del procesador de errores.

El primer nodo, situado a la izquierda, representa el servicio de Lambda, que recibe la solicitud de invocación. El segundo nodo representa la función Lambda específica. En el siguiente ejemplo, se muestra un seguimiento con estos dos segmentos. Ambos se denominan my-function, pero uno tiene un origen de AWS::Lambda
y el otro tiene origen de AWS::Lambda::Function
.

En este ejemplo, el segmento de la función aparece ampliado para mostrar sus subsegmentos:
-
Inicialización: representa el tiempo dedicado a cargar la función y ejecutar el código de inicialización. Este subsegmento aparece únicamente para el primer evento que procesa cada instancia de la función.
-
Invocación: representa el tiempo dedicado a ejecutar el código del controlador.
-
Sobrecarga: representa el tiempo que el tiempo de ejecución de Lambda dedica a prepararse para gestionar el siguiente evento.
Puede instrumentar su código de función para registrar metadatos y rastrear llamadas descendentes. Para registrar detalles sobre las llamadas que realiza su función a otros recursos y servicios, use X-Ray SDK para .NET. Para obtener el SDK, agregue los paquetes AWSXRayRecorder
al archivo de proyecto.
ejemplo src/blank-csharp/blank-csharp.csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> </PropertyGroup> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> <PackageReference Include="Amazon.Lambda.Core" Version="1.1.0" /> <PackageReference Include="Amazon.Lambda.SQSEvents" Version="1.1.0" /> <PackageReference Include="Amazon.Lambda.Serialization.Json" Version="1.7.0" /> <PackageReference Include="AWSSDK.Core" Version="3.3.104.38" /> <PackageReference Include="AWSSDK.Lambda" Version="3.3.108.11" />
<PackageReference Include="AWSXRayRecorder.Core" Version="2.6.2" /> <PackageReference Include="AWSXRayRecorder.Handlers.AwsSdk" Version="2.7.2" />
</ItemGroup> </Project>
Para instrumentar clientes de AWS SDK, llame al método RegisterXRayForAllServices
en el código de inicialización.
ejemplo src/blank-csharp/Function.cs : inicializar X-Ray
static async void initialize() {
AWSSDKHandler.RegisterXRayForAllServices();
lambdaClient = new AmazonLambdaClient(); await callLambda(); }
Cuando se usa seguimiento activo, Lambda registra dos segmentos por seguimiento, lo que crea dos nodos en el gráfico de servicios. En la siguiente imagen, se resaltan los dos nodos para la función principal de la aplicación de ejemplo del procesador de errores.

El primer nodo, situado a la izquierda, representa el servicio de Lambda, que recibe la solicitud de invocación. El segundo nodo representa la función Lambda específica. En el siguiente ejemplo, se muestra un seguimiento con estos dos segmentos. Ambos se denominan my-function, pero uno tiene un origen de AWS::Lambda
y el otro tiene origen de AWS::Lambda::Function
.

En este ejemplo, el segmento de la función aparece ampliado para mostrar sus subsegmentos:
-
Inicialización: representa el tiempo dedicado a cargar la función y ejecutar el código de inicialización. Este subsegmento aparece únicamente para el primer evento que procesa cada instancia de la función.
-
Invocación: representa el tiempo dedicado a ejecutar el código del controlador.
-
Sobrecarga: representa el tiempo que el tiempo de ejecución de Lambda dedica a prepararse para gestionar el siguiente evento.
También puede instrumentar clientes HTTP, registrar consultas SQL y crear subsegmentos personalizados con anotaciones y metadatos. Para obtener más información, consulte El X-Ray SDK para .NET en la Guía para desarrolladores de AWS X-Ray.
Secciones
Habilitación del seguimiento activo con la API de Lambda
Para administrar la configuración de seguimiento con la AWS CLI o el SDK de AWS, utilice las siguientes operaciones de API.
El siguiente comando de ejemplo de la AWS CLI habilita el seguimiento activo en una función llamada my-function.
aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active
El modo de seguimiento forma parte de la configuración específica de la versión, cuando se publica una versión de la función. No se puede cambiar el modo de seguimiento de una versión publicada.
Habilitación del seguimiento activo con AWS CloudFormation
Para activar el seguimiento en un recurso de AWS::Lambda::Function
de una plantilla de AWS CloudFormation, utilice la propiedad TracingConfig
.
ejemplo función-inline.yml : configuración de rastreo
Resources: function: Type: AWS::Lambda::Function Properties:
TracingConfig: Mode: Active
...
Para un recurso AWS::Serverless::Function
de AWS Serverless Application Model (AWS SAM) , utilice la propiedad Tracing
.
ejemplo template.yml : configuración de rastreo
Resources: function: Type: AWS::Serverless::Function Properties:
Tracing: Active
...