

# Visualice las invocaciones de la función de Lambda mediante AWS X-Ray
<a name="services-xray"></a>

Puede utilizar AWS X-Ray para visualizar los componentes de la aplicación, identificar cuellos de botella de rendimiento y solucionar problemas de solicitudes que dieron lugar a un error. Sus funciones de Lambda envían datos de rastreo a X-Ray, y X-Ray procesa los datos para generar un mapa de servicio y resúmenes de rastreo en los que se puede buscar.

Lambda admite dos modos de rastreo para X-Ray: `Active` y `PassThrough`. Con el rastreo `Active`, Lambda crea automáticamente segmentos de rastreo para las invocaciones de funciones y los envía a X-Ray. El modo `PassThrough`, por otro lado, simplemente propaga el contexto de rastreo a los servicios descendentes. Si ha habilitado el rastreo `Active` para su función, Lambda envía rastreos automáticamente a X-Ray para solicitudes de muestreo. Por lo general, el servicio ascendente, como Amazon API Gateway, o una aplicación alojada en Amazon EC2 que está instrumentada con el SDK de X-Ray, decide si las solicitudes entrantes deben ser rastreadas, luego agrega esa decisión de muestreo un encabezado de rastreo. Lambda usa ese encabezado para decidir si enviar o no el rastreo. Las trazas de los productores de mensajes anteriores, como Amazon SQS, se vinculan automáticamente a las trazas de las funciones de Lambda posteriores, lo que crea una vista integral de toda la aplicación. Para obtener más información, consulte [Seguimiento de aplicaciones basadas en eventos](https://docs.aws.amazon.com//xray/latest/devguide/xray-tracelinking.html) en la *Guía para desarrolladores de AWS X-Ray*.

**nota**  
En la actualidad, el seguimiento de X-Ray no es compatible con las funciones de Lambda con Amazon Managed Streaming para Apache Kafka (Amazon MSK), Apache Kafka autoadministrado, Amazon MQ con ActiveMQ y RabbitMQ, o las asignaciones de orígenes de eventos de Amazon DocumentDB.

Para activar el seguimiento activo de la función Lambda mediante la consola, siga estos pasos:

**Cómo activar el seguimiento activo**

1. Abra la [página de Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Elija una función.

1. Elija **Configuration** (Configuración), y luego **Monitoring and operations tools** (Herramientas de supervisión y operaciones).

1. En **Herramientas de monitorización adicionales**, elija **Editar**.

1. En **CloudWatch Application Signals y AWS X-Ray**, seleccione **Habilitar** para **Seguimientos de servicios de Lambda**.

1. Seleccione **Save**.

La 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](lambda-intro-execution-role.md) de la función. De lo contrario, agregue la política [AWSXRayDaemonWriteAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess) al rol de ejecución.

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.

## Comprensión de los rastros
<a name="services-xray-traces"></a>

En X-Ray, un *seguimiento* registra información sobre una solicitud procesada por uno o varios *servicios*. Lambda registra 2 segmentos por seguimiento, lo que crea dos nodos en el gráfico de servicios. La siguiente imagen resalta estos dos nodos:

![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/xray-servicemap-function.png)


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.

El segmento registrado para el servicio de Lambda, `AWS::Lambda`, abarca todos los pasos necesarios para preparar el entorno de ejecución de Lambda. Esto incluye programar la MicroVM, crear o desbloquear un entorno de ejecución con los recursos que configuró, así como también descargar el código de función y todas las capas.

El segmento `AWS::Lambda::Function` corresponde al trabajo realizado por la función.

**nota**  
AWS está implementando cambios en el servicio Lambda. Debido a estos cambios, es posible que vea pequeñas diferencias entre la estructura y el contenido de los mensajes de registro del sistema y los segmentos de rastreo emitidos por diferentes funciones de Lambda en su Cuenta de AWS.  
Este cambio afecta a los subsegmentos del segmento de la función. En los párrafos siguientes se describen los formatos antiguos y nuevos de estos subsegmentos.  
Estos cambios se implementarán en las próximas semanas, y todas las funciones en todas las Regiones de AWS, excepto en las regiones de China y GovCloud, pasarán a utilizar el nuevo formato de mensajes de registro y segmentos de rastreo.

**Estructura de segmentos Lambda AWS X-Ray de estilo antiguo**  
La estructura de X-Ray de estilo antiguo del segmento `AWS::Lambda` tiene el siguiente aspecto:

![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/V2_sandbox_images/v1_XRay_structure.png)


En este formato, el segmento de la función tiene subsegmentos para `Initialization`, `Invocation` y `Overhead`. Solo para [Lambda SnapStart](snapstart.md), también hay un subsegmento `Restore` (que no se muestra en este diagrama). 

El subsegmento `Initialization` representa la fase inicial del ciclo de vida del entorno de ejecución de Lambda. Durante esta fase, Lambda inicializa las extensiones y el tiempo de ejecución y ejecuta el código de inicialización de la función.

El subsegmento `Invocation` representa la fase de invocación donde Lambda invoca el controlador de funciones. Esto comienza con el registro en tiempo de ejecución y extensión y termina cuando el motor de ejecución está listo para enviar la respuesta.

(Solo para SnapStart de Lambda) El subsegmento `Restore` muestra el tiempo que tarda Lambda en restaurar una instantánea, cargar el tiempo de ejecución y ejecutar cualquier [enlace de tiempo de ejecución](snapstart-runtime-hooks.md) posterior a la restauración. El proceso de restauración de instantáneas puede incluir el tiempo dedicado a actividades fuera de la micro VM. Esta vez se informa en el subsegmento `Restore`. No se le cobrará por el tiempo que pase fuera de la micro VM para restaurar una instantánea.

El subsegmento `Overhead` representa la fase que ocurre entre el momento en que el motor de ejecución envía la respuesta y la señal para la siguiente invocación. Durante este tiempo, el motor de ejecución finaliza todas las tareas relacionadas con una invocación y se prepara para congelar el entorno limitado.

**importante**  
Puede usar el SDK de X-Ray para extender el subsegmento `Invocation` con subsegmentos adicionales para llamadas descendentes, anotaciones y metadatos. No se puede acceder al segmento de función directamente o grabar trabajo hecho fuera del ámbito de invocación del controlador.

Para obtener más información acerca de las fases del entorno de ejecución de Lambda, consulte [Comprender el ciclo de vida del entorno de ejecución de Lambda](lambda-runtime-environment.md).

En el siguiente diagrama se muestra un ejemplo de seguimiento que utiliza la estructura de X-Ray de estilo antiguo.

![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/V2_sandbox_images/my-function-2-v1.png)


Observe los dos segmentos en el ejemplo. Ambos se denominan **my-function**, pero uno tiene un origen de `AWS::Lambda` y el otro tiene origen de `AWS::Lambda::Function`. Si el segmento `AWS::Lambda` muestra un error, el servicio Lambda tuvo un problema. Si el segmento `AWS::Lambda::Function` muestra un error, la función tuvo un problema.

**nota**  
Ocasionalmente, es posible que observe una gran brecha entre las fases de inicialización e invocación de la función en sus trazas de X-Ray. En el caso de las funciones que utilizan la [simultaneidad aprovisionada](provisioned-concurrency.md), esto se debe a que Lambda inicializa las instancias de la función mucho antes de la invocación. Para las funciones que utilizan la [simultaneidad sin reservas (bajo demanda)](lambda-concurrency.md), Lambda puede inicializar proactivamente una instancia de función, incluso si no hay ninguna invocación. Visualmente, ambos casos se muestran como un intervalo de tiempo entre las fases de inicialización e invocación.

**Estructura de segmentos Lambda AWS X-Ray de estilo nuevo**  
La estructura de X-Ray de estilo nuevo del segmento `AWS::Lambda` tiene el siguiente aspecto:

![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/V2_sandbox_images/v2_XRay_structure.png)


En este formato nuevo, el subsegmento `Init` representa la fase inicial del ciclo de vida del entorno de ejecución de Lambda como antes.

No hay ningún segmento de invocación en el nuevo formato. En cambio, los subsegmentos de clientes se adjuntan directamente al segmento `AWS::Lambda::Function`. Este segmento contiene las siguientes métricas como anotaciones:
+ `aws.responseLatency`: el tiempo que tarda la función en ejecutarse
+ `aws.responseDuration`: el tiempo necesario para transferir la respuesta al cliente
+ `aws.runtimeOverhead`: la cantidad de tiempo adicional que necesitó el tiempo de ejecución para finalizar
+ `aws.extensionOverhead`: la cantidad de tiempo adicional que necesitaron las extensiones para finalizar

En el siguiente diagrama se muestra un ejemplo de seguimiento que utiliza la estructura de X-Ray de estilo nuevo.

![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/V2_sandbox_images/my-function-2-v2.png)


Observe los dos segmentos en el ejemplo. Ambos se denominan **my-function**, pero uno tiene un origen de `AWS::Lambda` y el otro tiene origen de `AWS::Lambda::Function`. Si el segmento `AWS::Lambda` muestra un error, el servicio Lambda tuvo un problema. Si el segmento `AWS::Lambda::Function` muestra un error, la función tuvo un problema.

Consulte los siguientes temas para obtener una introducción específica del seguimiento en Lambda:
+ [Instrumentación del código Node.js en AWS Lambda](nodejs-tracing.md)
+ [Instrumentación del código Python en AWS Lambda](python-tracing.md)
+ [Instrumentación del código Ruby en AWS Lambda](ruby-tracing.md)
+ [Instrumentación del código Java en AWS Lambda](java-tracing.md)
+ [Instrumentación del código Go en AWS Lambda](golang-tracing.md)
+ [Instrumentación de código C\$1 en AWS Lambda](csharp-tracing.md)

Para obtener una lista completa de los servicios que son compatibles con la instrumentación activa, consulte [los Servicios de AWS compatibles](https://docs.aws.amazon.com/xray/latest/devguide/xray-usage.html#xray-usage-codechanges) en la Guía para desarrolladores de AWS X-Ray.

## Comportamiento de rastreo predeterminado en Lambda
<a name="services-xray-default"></a>

Si no tiene activado el rastreo `Active`, Lambda pasa por defecto al modo de rastreo `PassThrough`.

En el modo `PassThrough`, Lambda reenvía el encabezado de rastreo de X-Ray a los servicios descendentes, pero no envía los rastreos de forma automática. Esto es cierto incluso si el encabezado de rastreo contiene una decisión de muestrear la solicitud. Si el servicio ascendente no proporciona un encabezado de rastreo de X-Ray, Lambda genera un encabezado y toma la decisión de no muestrear. Sin embargo, puede enviar sus propios rastreos llamando a las bibliotecas de rastreo desde el código de su función. 

**nota**  
 Anteriormente, Lambda enviaba los rastreos automáticamente cuando los servicios ascendentes, como Amazon API Gateway, añadían un encabezado de rastreo. Al no enviar rastreos de forma automática, Lambda le da el control para rastrear las funciones que son importantes para usted. Si su solución depende de este comportamiento de rastreo pasivo, cambie al rastreo `Active`. 

## Permisos de rol de ejecución
<a name="services-xray-permissions"></a>

Lambda necesita los siguientes permisos para enviar datos de seguimiento a X-Ray. Añada dichos permisos al [rol de ejecución](lambda-intro-execution-role.md) de su función.
+ [xray:PutTraceSegments](https://docs.aws.amazon.com/xray/latest/api/API_PutTraceSegments.html)
+ [xray:PutTelemetryRecords](https://docs.aws.amazon.com/xray/latest/api/API_PutTelemetryRecords.html)

Estos permisos se incluyen en la política administrada [AWSXRayDaemonWriteAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AWSXRayDaemonWriteAccess).

## Habilitación del rastreo `Active` con la API de Lambda
<a name="services-xray-api"></a>

Para administrar la configuración de seguimiento con la AWS CLI o el AWS SDK, utilice las siguientes operaciones de API:
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
+ [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html)
+ [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html)

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 rastreo `Active` con CloudFormation
<a name="services-xray-cloudformation"></a>

Para activar el seguimiento en un recurso de `AWS::Lambda::Function` de una plantilla de CloudFormation, utilice la propiedad `TracingConfig`.

**Example [función-inline.yml](https://github.com/awsdocs/aws-lambda-developer-guide/blob/master/templates/function-inline.yml): configuración de rastreo**  

```
Resources:
  function:
    Type: [AWS::Lambda::Function](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html)
    Properties:
      TracingConfig:
        Mode: Active
      ...
```

Para un recurso AWS Serverless Application Model de AWS SAM (`AWS::Serverless::Function`) , utilice la propiedad `Tracing`.

**Example [template.yml](https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/blank-nodejs/template.yml): configuración de rastreo**  

```
Resources:
  function:
    Type: [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)
    Properties:
      Tracing: Active
      ...
```