

# Envío de registros de funciones de Lambda a Registros de CloudWatch
<a name="monitoring-cloudwatchlogs"></a>

De forma predeterminada, Lambda captura automáticamente los registros de todas las invocaciones de funciones y los envía a Registros de CloudWatch, siempre que el rol de ejecución de la función tenga los permisos necesarios. De forma predeterminada, estos registros se almacenan en un grupo de registro denominado /aws/lambda/*<function-name>*. Para mejorar la depuración, puede insertar instrucciones de registro personalizadas en el código, que Lambda integrará sin problemas con Registros de CloudWatch. Si es necesario, puede configurar su función para enviar registros a un grupo diferente con la consola de Lambda, la AWS CLI o la API de Lambda. Consulte [Configuración de grupos de registros de CloudWatch](monitoring-cloudwatchlogs-loggroups.md) para obtener más información.

Puede ver los registros de las funciones de Lambda mediante la consola de Lambda, la consola de CloudWatch, el AWS Command Line Interface (AWS CLI) o la API de CloudWatch. Para obtener más información, consulte [Visualización de los registros de CloudWatch para funciones de Lambda](monitoring-cloudwatchlogs-view.md).

**nota**  
Los registros pueden tardar de 5 a 10 minutos en aparecer después de una invocación de la función.

## Permisos de IAM necesarios
<a name="monitoring-cloudwatchlogs-prereqs"></a>

Su [rol de ejecución](lambda-intro-execution-role.md) necesita los siguientes permisos para cargar registros en los registros de CloudWatch:
+ `logs:CreateLogGroup`
+ `logs:CreateLogStream`
+ `logs:PutLogEvents`

Para obtener más información, consulte [Uso de políticas basadas en identidad (políticas de IAM) para los registros de CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-identity-based-access-control-cwl.html) en la *Guía del usuario de Amazon CloudWatch*.

Puede agregar permisos de registros de CloudWatch mediante la política administrada de `AWSLambdaBasicExecutionRole` de AWS proporcionada por Lambda. Ejecute el siguiente comando para agregar esta política a su rol:

```
aws iam attach-role-policy --role-name your-role --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
```

Para obtener más información, consulte [Trabajo con políticas administradas de AWS en el rol de ejecución](permissions-managed-policies.md).

## Precios
<a name="monitoring-cloudwatchlogs-pricing"></a>

No se aplican cargos adicionales por utilizar los registros de Lambda; no obstante, sí se aplican los cargos estándar de Registros de CloudWatch. Para obtener más información, consulte los [precios de CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

# Configuración de grupos de registros de CloudWatch
<a name="monitoring-cloudwatchlogs-loggroups"></a>

De forma predeterminada, CloudWatch crea automáticamente un grupo de registro denominado `/aws/lambda/<function name>` para la función cuando se invoca por primera vez. Para configurar su función de manera que envíe registros a un grupo de registro existente o para crear un nuevo grupo de registro para su función, puede usar la consola de Lambda o la AWS CLI. También puede configurar grupos de registros personalizados con los comandos de la API de Lambda [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html) y [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html), y el recurso [AWS::Serverless::Function]() de AWS Serverless Application Model (AWS SAM).

Puede configurar varias funciones de Lambda para enviar registros al mismo grupo de registro de CloudWatch. Por ejemplo, puede usar un único grupo de registro para almacenar los registros de todas las funciones de Lambda que componen una aplicación concreta. Cuando se utiliza un grupo de registro personalizado para una función de Lambda, los flujos de registro que Lambda crea incluyen el nombre y la versión de la función. Esto garantiza que se conserve la asignación entre los mensajes de registro y las funciones, incluso si utiliza el mismo grupo de registro para varias funciones.

El formato de denominación del flujo de registro para grupos de registro personalizados sigue esta convención:

```
YYYY/MM/DD/<function_name>[<function_version>][<execution_environment_GUID>]
```

Tenga en cuenta que, al configurar un grupo de registro personalizado, el nombre que seleccione para el grupo de registro debe seguir las [reglas de nomenclatura de Registros de Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html). Además, los nombres personalizados de los grupos de registros no deben empezar por la cadena `aws/`. Si crea un grupo de registros personalizado empezando por `aws/`, Lambda no podrá crear el grupo de registros. Como resultado, los registros de la función no se enviarán a CloudWatch.

**Cambio del grupo de registro de una función (consola)**

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. En la página de configuración de funciones, elija **Herramientas de supervisión y operaciones**.

1. En el panel **Configuración de registros**, seleccione **Editar**.

1. En el panel **Grupo de registro**, para el **Grupo de registro de CloudWatch**, elija **Personalizado**.

1. En **Grupo de registro personalizado**, introduzca el nombre del grupo de registro de CloudWatch al que quiere que su función envíe registros. Si introduce el nombre de un grupo de registro existente, su función utilizará ese grupo. Si no existe ningún grupo de registro con el nombre que ingresa, Lambda creará un nuevo grupo de registro para su función con ese nombre.

**Cambio del grupo de registro de una función (AWS CLI)**
+ Para cambiar el grupo de registro de una función existente, utilice el comando [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html).

  ```
  aws lambda update-function-configuration \
    --function-name myFunction \
    --logging-config LogGroup=myLogGroup
  ```

**Para especificar un grupo de registro personalizado al crear una función (AWS CLI)**
+ Para especificar un grupo de registro personalizado al crear una nueva función de Lambda con la AWS CLI, utilice la opción `--logging-config`. El siguiente comando de ejemplo crea una función de Lambda de Node.js que envía registros a un grupo de registro denominado `myLogGroup`.

  ```
  aws lambda create-function \
    --function-name myFunction \
    --runtime nodejs24.x \
    --handler index.handler \
    --zip-file fileb://function.zip \
    --role arn:aws:iam::123456789012:role/LambdaRole \
    --logging-config LogGroup=myLogGroup
  ```

## Permisos de rol de ejecución
<a name="monitoring-cloudwatchlogs-configure-permissions"></a>

Para que su función envíe registros a Registros de Amazon CloudWatch, debe tener el permiso [logs:PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html). Cuando configura el grupo de registro de su función mediante la consola de Lambda, Lambda agregará este permiso al rol en las siguientes condiciones:
+ El destino del servicio está configurado como Registros de CloudWatch
+ El rol de ejecución de su función no tiene permisos para cargar registros en Registros de CloudWatch (el destino predeterminado)

**nota**  
Lambda no agrega ningún permiso Put para los destinos de registro de Amazon S3 o Firehose.

Cuando Lambda agrega este permiso, otorga a la función permiso para enviar registros a cualquier grupo de registro de Registros de Amazon CloudWatch.

Para evitar que Lambda actualice automáticamente el rol de ejecución de la función y, en su lugar, lo edite manualmente, expanda **Permisos** y deje la opción **Agregar permisos necesarios** sin marcar.

Al configurar el grupo de registro de la función con la AWS CLI, Lambda no agregará el permiso `logs:PutLogEvents` automáticamente. Agregue el permiso al rol de ejecución de su función si aún no lo tiene. Este permiso se incluye en la política administrada [AWSLambdaBasicExecutionRole](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole$jsonEditor).

## Registro de CloudWatch para instancias administradas de Lambda
<a name="monitoring-cloudwatchlogs-lmi"></a>

Cuando utiliza [instancias administradas de Lambda](lambda-managed-instances.md), hay consideraciones adicionales a la hora de enviar registros a Registros de CloudWatch:

### Requisitos de red de la VPC
<a name="monitoring-cloudwatchlogs-lmi-networking"></a>

Las instancias administradas de Lambda se ejecutan en instancias de EC2 propiedad del cliente dentro de su VPC. Para enviar registros a Registros de CloudWatch y seguimientos a X-Ray, debe asegurarse de que estas API de AWS puedan enrutarse desde su VPC. Dispone de varias opciones para hacerlo:
+ **PrivateLink de AWS (recomendado):** utilice [PrivateLink de AWS](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html) para crear puntos de conexión de VPC para los servicios Registros de CloudWatch y X-Ray. Esto permite que sus instancias accedan a estos servicios de forma privada sin necesidad de una puerta de enlace de Internet o una puerta de enlace NAT. Para obtener más información, consulte [Uso de Registros de CloudWatch con puntos de conexión de VPC de tipo interfaz](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch-logs-and-interface-VPC.html).
+ **Puerta de enlace NAT**: configure una puerta de enlace NAT para permitir el acceso saliente a Internet desde sus subredes privadas.
+ **Puerta de enlace de Internet**: en el caso de las subredes públicas, asegúrese de que la VPC tenga configurada una puerta de enlace de Internet.

Si las API de Registros de CloudWatch o X-Ray no pueden enrutarse desde su VPC, los registros y seguimientos de sus funciones no se entregarán.

### Invocaciones simultáneas y atribución de registros
<a name="monitoring-cloudwatchlogs-lmi-concurrent"></a>

Los entornos de ejecución de las instancias administradas de Lambda pueden procesar varias invocaciones de forma simultánea. Cuando se ejecutan varias invocaciones simultáneamente, sus entradas de registro se intercalan en el mismo flujo de registro. Para filtrar y analizar de forma eficaz los registros de las invocaciones simultáneas, debe asegurarse de que cada entrada del registro incluya el identificador de la solicitud de AWS.

Recomendamos uno los siguientes enfoques de seguridad:
+ **Utilice registradores de tiempo de ejecución de Lambda predeterminados (recomendado)**: las bibliotecas de registro predeterminadas que proporcionan los tiempos de ejecución administrados de Lambda incluyen automáticamente el identificador de solicitud en cada entrada de registro.
+ **Implemente un registro JSON estructurado**: si está creando un [tiempo de ejecución personalizado](runtimes-custom.md) o necesita un registro personalizado, implemente registros con formato JSON que incluyan el identificador de solicitud en cada entrada. Las instancias administradas de Lambda solo admiten el formato de registro JSON. Incluya el campo `requestId` en sus registros JSON para permitir el filtrado por invocación:

  ```
  {
    "timestamp": "2025-01-15T10:30:00.000Z",
    "level": "INFO",
    "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "message": "Processing request"
  }
  ```

Con la atribución de identificador de solicitud, puede filtrar las entradas de registro de Registros de CloudWatch para una invocación específica mediante consultas de Información de Registros de CloudWatch. Por ejemplo:

```
fields @timestamp, @message
| filter requestId = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
| sort @timestamp asc
```

Para obtener más información sobre los requisitos de registro de las instancias administradas de Lambda, consulte [Descripción del entorno de ejecución de instancias administradas de Lambda](lambda-managed-instances-execution-environment.md).

# Visualización de los registros de CloudWatch para funciones de Lambda
<a name="monitoring-cloudwatchlogs-view"></a>

Puede ver los registros de Amazon CloudWatch de la función de Lambda mediante la consola de Lambda, la consola de Registros de CloudWatch, o la AWS Command Line Interface (AWS CLI). Siga las instrucciones en las siguientes secciones para acceder a los registros de la función.

## Registros de funciones de streaming con Live Tail de Registros de CloudWatch
<a name="monitoring-live-tail"></a>

Live Tail de Registros de Amazon CloudWatch ayuda a solucionar rápidamente los problemas de las funciones, ya que muestra una lista de streaming de los nuevos eventos de registro directamente en la consola de Lambda. Puede ver y filtrar los registros ingeridos desde las funciones de Lambda casi en tiempo real, lo que ayuda a detectar y resolver problemas con mayor rapidez.

**nota**  
Las sesiones de Live Tail generan costos según el tiempo de uso de la sesión por minuto. Para obtener más información sobre precios, consulte [Precios de Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

### Comparación de Live Tail y --log-type Tail
<a name="live-tail-logtype"></a>

Existen varias diferencias entre Live Tail de Registros de CloudWatch y la opción [LogType: Tail](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html#lambda-Invoke-request-LogType) de la API de Lambda (`--log-type Tail` en la AWS CLI):
+ `--log-type Tail` devuelve solo los primeros 4 KB de los registros de invocación. Live Tail no comparte este límite y puede recibir hasta 500 eventos de registro por segundo.
+ `--log-type Tail` captura y envía los registros con la respuesta, lo que puede afectar a la latencia de respuesta de la función. Live Tail no afecta a la latencia de respuesta de la función.
+ `--log-type Tail` solo admite invocaciones sincrónicas. Live Tail funciona para invocaciones asíncronas y sincrónicas.

**nota**  
Las [instancias administradas de Lambda](lambda-managed-instances.md) no admiten la opción `--log-type Tail`. Utilice Registros de CloudWatch Live Tail o consulte Registros de CloudWatch directamente para ver los registros de las funciones de instancias administradas.

### Permisos
<a name="live-tail-permissions"></a>

Se requieren los siguientes permisos para iniciar y detener las sesiones de Live Tail de Registros de CloudWatch:
+ `logs:DescribeLogGroups`
+ `logs:StartLiveTail`
+ `logs:StopLiveTail`

### Inicio de una sesión de Live Tail en la consola de Lambda
<a name="live-tail-console"></a>

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

1. Elija el nombre de la función.

1. Elija la pestaña **Prueba**.

1. En el panel **Evento de prueba**, elija **Live Tail de Registros de CloudWatch**.

1. En **Seleccionar grupos de registro**, el grupo de registros de la función está seleccionado de forma predeterminada. Puede seleccionar hasta cinco grupos de registro a la vez.

1. (Opcional) Para mostrar solo los eventos de registro que contengan determinadas palabras u otras cadenas, escriba la palabra o la cadena en el cuadro **Agregar patrón de filtro**. El campo de filtros distingue entre mayúsculas y minúsculas. Puede incluir varios términos y operadores de patrones en este campo, incluidas las expresiones regulares (regex). Para obtener más información sobre la sintaxis de los patrones, consulte [Filter pattern syntax](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html) en la *Guía del usuario de Registros de Amazon CloudWatch*.

1. Elija **Iniciar**. Los eventos de registro que coincidan comenzarán a aparecer en la ventana.

1. Para detener la sesión de Live Tail, seleccione **Detener**.
**nota**  
La sesión de Live Tail se detiene automáticamente tras 15 minutos de inactividad o cuando se agota el tiempo de espera de la sesión de la consola de Lambda.

## Acceso a los registros de la función con la consola
<a name="monitoring-cloudwatchlogs-console"></a>

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

1. Seleccione una función.

1. Elija la pestaña **Supervisar**.

1. Elija **Ver registros de CloudWatch** para abrir la consola de CloudWatch.

1. Desplácese hacia abajo y seleccione el **flujo de registro** para las invocaciones de la función que desee consultar.  
![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/log-stream.png)

Cada instancia de una función de Lambda tiene un flujo de registro dedicado. Si una función se escala verticalmente, cada instancia simultánea tiene su propio flujo de registro. Cada vez que se crea un nuevo entorno de ejecución en respuesta a una invocación, se genera un nuevo flujo de registro. La convención de nomenclatura de los flujos de registro es:

```
YYYY/MM/DD[Function version][Execution environment GUID]
```

Un entorno de ejecución único escribe en el mismo flujo de registro durante su vida útil. El flujo de registro contiene los mensajes de ese entorno de ejecución y también cualquier resultado del código de la función de Lambda. Todos los mensajes tienen marca de tiempo, incluidos los registros personalizados. Incluso si la función no registra ningún resultado del código, se generan tres declaraciones del registro mínimas por invocación (START, END y REPORT):

![\[monitoreo y observabilidad (figura 3)\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/monitoring-observability-figure-3.png)


Estos registros muestran:
+  **RequestId**: se trata de un identificador único generado por solicitud. Si la función de Lambda vuelve a intentar una solicitud, este ID no cambia y aparece en los registros para cada reintento posterior.
+  **Inicio/Fin**: marcan una única invocación, de modo que todas las líneas de registro intermedias pertenecen a la misma invocación.
+  **Duración**: el tiempo total de invocación de la función controladora, excluido el código `INIT`.
+  **Duración facturada**: aplica una lógica de redondeo para fines de facturación.
+  **Tamaño de memoria**: la cantidad de memoria asignada a la función.
+  **Máxima memoria utilizada**: la cantidad máxima de memoria utilizada durante la invocación.
+  **Duración de inicialización**: el tiempo que se tarda en ejecutar la sección de código `INIT`, fuera del controlador principal.

## Acceso a los registros con la AWS CLI
<a name="monitoring-cloudwatchlogs-cli"></a>

La AWS CLI es una herramienta de código abierto que lo habilita para interactuar con los servicios de AWS mediante el uso de comandos en el intérprete de comandos de la línea de comandos. Para completar los pasos de esta sección, debe disponer de la [versión 2 de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

Puede utilizar la [CLI de AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) para recuperar registros de una invocación mediante la opción de comando `--log-type`. La respuesta contiene un campo `LogResult` que contiene hasta 4 KB de registros con codificación base64 a partir de la invocación.

**Example recuperar un ID de registro**  
En el ejemplo siguiente se muestra cómo recuperar un *ID de registro* del campo `LogResult` para una función denominada `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail
```
Debería ver los siguientes datos de salida:  

```
{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
```

**Example decodificar los registros**  
En el mismo símbolo del sistema, utilice la utilidad `base64` para decodificar los registros. En el ejemplo siguiente se muestra cómo recuperar registros codificados en base64 para `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail \
--query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
```
La opción **cli-binary-format** es obligatoria si va a utilizar la versión 2 de la AWS CLI. Para que esta sea la configuración predeterminada, ejecute `aws configure set cli-binary-format raw-in-base64-out`. Para obtener más información, consulte [Opciones de la línea de comandos globales compatibles con AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) en la *Guía del usuario de la AWS Command Line Interface versión 2*.  
Debería ver los siguientes datos de salida:  

```
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8  Duration: 79.67 ms      Billed Duration: 80 ms         Memory Size: 128 MB     Max Memory Used: 73 MB
```
La utilidad `base64` está disponible en Linux, macOS y [Ubuntu en Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10). Es posible que los usuarios de macOS necesiten usar `base64 -D`.



**Example get-logs.sh script**  
En el mismo símbolo del sistema, utilice el siguiente script para descargar los últimos cinco eventos de registro. El script utiliza `sed` para eliminar las comillas del archivo de salida y permanece inactivo durante 15 segundos para dar tiempo a que los registros estén disponibles. La salida incluye la respuesta de Lambda y la salida del comando `get-log-events`.   
Copie el contenido de la siguiente muestra de código y guárdelo en su directorio de proyecto Lambda como `get-logs.sh`.  
La opción **cli-binary-format** es obligatoria si va a utilizar la versión 2 de la AWS CLI. Para que esta sea la configuración predeterminada, ejecute `aws configure set cli-binary-format raw-in-base64-out`. Para obtener más información, consulte [Opciones de la línea de comandos globales compatibles con AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) en la *Guía del usuario de la AWS Command Line Interface versión 2*.  

```
#!/bin/bash
aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out
sed -i'' -e 's/"//g' out
sleep 15
aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name stream1 --limit 5
```

**Example macOS y Linux (solamente)**  
En el mismo símbolo del sistema, es posible que los usuarios de macOS y Linux necesiten ejecutar el siguiente comando para asegurarse de que el script es ejecutable.  

```
chmod -R 755 get-logs.sh
```

**Example recuperar los últimos cinco eventos de registro**  
En el mismo símbolo del sistema, ejecute el siguiente script para obtener los últimos cinco eventos de registro.  

```
./get-logs.sh
```
Debería ver los siguientes datos de salida:  

```
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}
{
    "events": [
        {
            "timestamp": 1559763003171,
            "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n",
            "ingestionTime": 1559763003309
        },
        {
            "timestamp": 1559763003173,
            "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r  \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...",
            "ingestionTime": 1559763018353
        },
        {
            "timestamp": 1559763003173,
            "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r  \"key\": \"value\"\r}\n",
            "ingestionTime": 1559763018353
        },
        {
            "timestamp": 1559763003218,
            "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n",
            "ingestionTime": 1559763018353
        },
        {
            "timestamp": 1559763003218,
            "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n",
            "ingestionTime": 1559763018353
        }
    ],
    "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795",
    "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080"
}
```

## Análisis de registros y registros estructurados
<a name="querying-logs"></a>

Con Información de Registros de CloudWatch, puede buscar y analizar datos de registro mediante una [sintaxis de consulta](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html) especializada. Realiza consultas en varios grupos de registros y proporciona un filtrado eficaz mediante la coincidencia de patrones de [expresiones regulares](https://en.wikipedia.org/wiki/Regular_expression) y [glob](https://en.wikipedia.org/wiki/Glob_(programming)).

Puede aprovechar estas capacidades mediante la implementación de un registro estructurado en las funciones de Lambda. El registro estructurado organiza los registros en un formato predefinido, lo cual facilita las consultas. El uso de los niveles de registro es un primer paso importante para generar registros fáciles de filtrar que separen los mensajes informativos de las advertencias o los errores. Por ejemplo, considere el siguiente código Node.js:

```
exports.handler = async (event) => {
    console.log("console.log - Application is fine")
    console.info("console.info - This is the same as console.log")
    console.warn("console.warn - Application provides a warning")
    console.error("console.error - An error occurred")
}
```

El archivo de registro de CloudWatch resultante contiene un campo independiente que especifica el nivel de registro:

![\[monitoreo y observabilidad (figura 10)\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/monitoring-observability-figure-10.png)


Una consulta de Información de registros de CloudWatch puede filtrar por nivel de registro. Por ejemplo, para consultar únicamente los errores, puede utilizar la siguiente consulta:

```
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
```

### Registro estructurado JSON
<a name="querying-logs-json"></a>

JSON se suele utilizar para proporcionar una estructura a los registros de las aplicaciones. En el siguiente ejemplo, los registros se han convertido a JSON para generar tres valores distintos:

![\[monitoreo y observabilidad (figura 11)\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/monitoring-observability-figure-11.png)


La característica Información de registros de CloudWatch descubre automáticamente los valores de la salida de JSON y analiza los mensajes como campos, sin necesidad de utilizar expresiones globales o regulares personalizadas. Al utilizar los registros estructurados en JSON, la siguiente consulta busca las invocaciones en las que el archivo cargado ocupa más de 1 MB, el tiempo de carga es superior a 1 segundo y la invocación no ha sido arranque en frío:

```
fields @message
| filter @message like /INFO/
| filter uploadedBytes > 1000000
| filter uploadTimeMS > 1000
| filter invocation != 1
```

Esta consulta podría producir el siguiente resultado:

![\[monitoreo y observabilidad (figura 12)\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/monitoring-observability-figure-12.png)


Los campos detectados en JSON se completan automáticamente en el menú *Campos detectados* que aparece a la derecha. Los campos estándar generados por el servicio Lambda llevan el prefijo “@” y pueden ser consultados de la misma manera. Los registros de Lambda siempre incluyen los campos @timestamp, @logStream, @message, @requestId, @duration, @billedDuration, @type, @maxMemoryUsed, @memorySize. Si X-Ray está activado para una función, los registros también incluyen @xrayTraceId y @xraySegmentId.

Cuando un origen de eventos de AWS, como Amazon S3, Amazon SQS o Amazon EventBridge, invoca una función, se proporciona el evento completo como un objeto JSON de entrada. Al registrar este evento en la primera línea de la función, puede consultar cualquiera de los campos anidados mediante Información de registros de CloudWatch.

### Consultas de Insights útiles
<a name="useful-logs-queries"></a>

En la siguiente tabla, se muestran ejemplos de consultas de Insights que pueden resultar útiles para supervisar las funciones de Lambda.


| Descripción | Ejemplo de sintaxis de consulta de  | 
| --- | --- | 
|  Los últimos 100 errores  |  

```
 fields Timestamp, LogLevel, Message
 \| filter LogLevel == "ERR"
 \| sort @timestamp desc
 \| limit 100
```  | 
|  Las 100 invocaciones más facturadas  |  

```
filter @type = "REPORT"
\| fields @requestId, @billedDuration
\| sort by @billedDuration desc
\| limit 100
```  | 
|  Porcentaje de arranques en frío en el total de invocaciones  |  

```
filter @type = "REPORT"
\| stats sum(strcontains(@message, "Init Duration"))/count(*) * 100 as
  coldStartPct, avg(@duration)
  by bin(5m)
```  | 
|  Informe percentil de la duración de Lambda  |  

```
filter @type = "REPORT"
\| stats
    avg(@billedDuration) as Average,
    percentile(@billedDuration, 99) as NinetyNinth,
    percentile(@billedDuration, 95) as NinetyFifth,
    percentile(@billedDuration, 90) as Ninetieth
    by bin(30m)
```  | 
|  Informe percentil del uso de memoria de Lambda  |  

```
filter @type="REPORT"
\| stats avg(@maxMemoryUsed/1024/1024) as mean_MemoryUsed,
    min(@maxMemoryUsed/1024/1024) as min_MemoryUsed,
    max(@maxMemoryUsed/1024/1024) as max_MemoryUsed,
    percentile(@maxMemoryUsed/1024/1024, 95) as Percentile95
```  | 
|  Invocaciones que utilizan el 100 % de la memoria asignada  |  

```
filter @type = "REPORT" and @maxMemoryUsed=@memorySize
\| stats
    count_distinct(@requestId)
    by bin(30m)
```  | 
|  Memoria promedio utilizada en todas las invocaciones  |  

```
avgMemoryUsedPERC,
    avg(@billedDuration) as avgDurationMS
    by bin(5m)
```  | 
|  Visualización de las estadísticas de memoria  |  

```
filter @type = "REPORT"
\| stats
    max(@maxMemoryUsed / 1024 / 1024) as maxMemMB,
    avg(@maxMemoryUsed / 1024 / 1024) as avgMemMB,
    min(@maxMemoryUsed / 1024 / 1024) as minMemMB,
    (avg(@maxMemoryUsed / 1024 / 1024) / max(@memorySize / 1024 / 1024)) * 100 as avgMemUsedPct,
    avg(@billedDuration) as avgDurationMS
    by bin(30m)
```  | 
|  Invocaciones en las que salió Lambda  |  

```
filter @message like /Process exited/
\| stats count() by bin(30m)
```  | 
|  Invocaciones con tiempo de espera agotado  |  

```
filter @message like /Task timed out/
\| stats count() by bin(30m)
```  | 
|  Informe de latencia  |  

```
filter @type = "REPORT"
\| stats avg(@duration), max(@duration), min(@duration)
  by bin(5m)
```  | 
|  Memoria sobreaprovisionada  |  

```
filter @type = "REPORT"
\| stats max(@memorySize / 1024 / 1024) as provisonedMemMB,
        min(@maxMemoryUsed / 1024 / 1024) as smallestMemReqMB,
        avg(@maxMemoryUsed / 1024 / 1024) as avgMemUsedMB,
        max(@maxMemoryUsed / 1024 / 1024) as maxMemUsedMB,
        provisonedMemMB - maxMemUsedMB as overProvisionedMB
```  | 

## Visualización de registros y paneles
<a name="monitoring-logs-visualization"></a>

Para cualquier consulta de Información de registros de CloudWatch, puede exportar los resultados a formato markdown o CSV. En algunos casos, es posible que resulte más útil crear [visualizaciones a partir de consultas](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_Insights-Visualizing-Log-Data.html), siempre que exista al menos una función de agregación. La función `stats` permite definir agregaciones y agrupaciones.

El ejemplo anterior de *logInsightsJSON* filtraba según el tamaño y el tiempo de carga y excluía las primeras invocaciones. Esto dio como resultado una tabla de datos. Para monitorear un sistema de producción, puede resultar más útil visualizar los tamaños mínimo, máximo y promedio de los archivos para encontrar valores atípicos. Para ello, aplique la función de estadísticas con los agregados necesarios y agrúpelos según un valor temporal, por ejemplo, cada minuto:

Por ejemplo, fíjese en la consulta siguiente. Este es el mismo ejemplo de consulta que aparece en la sección [Registro estructurado JSON](#querying-logs-json), pero con funciones de agregación adicionales:

```
fields @message
| filter @message like /INFO/
| filter uploadedBytes > 1000000
| filter uploadTimeMS > 1000
| filter invocation != 1
| stats min(uploadedBytes), avg(uploadedBytes), max(uploadedBytes) by bin (1m)
```

Incluimos estos agregados porque puede ser más útil visualizar los tamaños mínimo, máximo y medio de los archivos para encontrar valores atípicos. Puede ver los resultados en la pestaña **Visualización**:

![\[monitoreo y observabilidad (figura 14)\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/monitoring-observability-figure-14.png)


Cuando haya terminado de crear la visualización, si lo desea, puede agregar el gráfico a un panel de CloudWatch. Para ello, elija **Agregar al panel** situado encima de la visualización. Esto agrega la consulta como un widget y permite seleccionar intervalos de actualización automáticos, lo que facilita el monitoreo continuo de los resultados:

![\[monitoreo y observabilidad (figura 15)\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/monitoring-observability-figure-15.png)
