

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# CloudWatch Registra la sintaxis de consulta del lenguaje Insights
<a name="CWL_QuerySyntax"></a>

 En esta sección, se proporcionan detalles sobre el lenguaje de consulta de Información de registros. La sintaxis de la consulta admite diferentes funciones y operaciones, incluidas, entre otras, funciones generales, operaciones aritméticas y de comparación y expresiones regulares.

**importante**  
Para evitar generar cargos excesivos al ejecutar consultas extensas, tenga en cuenta las siguientes prácticas recomendadas:  
Seleccione solo los grupos de registro necesarios para cada consulta.
Especifique siempre el intervalo de tiempo más breve posible para sus consultas.
Cuando utilice la consola para ejecutar consultas, cancele todas las consultas antes de cerrar la página de la consola de CloudWatch Logs Insights. De lo contrario, las consultas seguirán ejecutándose hasta que se completen.
Cuando añada un widget de CloudWatch Logs Insights a un panel, asegúrese de que el panel no se actualice con una frecuencia elevada, ya que cada actualización inicia una nueva consulta.

Para crear consultas que contengan varios comandos, separe los comandos con el carácter de barra vertical (**\$1**).

Para crear consultas que contengan comentarios, defina los comentarios con el carácter numeral (**\$1**). 

**nota**  
 CloudWatch Logs Insights descubre automáticamente los campos de diferentes tipos de registros y genera campos que comienzan con el carácter **@**. Para obtener más información sobre estos campos, consulta [Registros compatibles y campos detectados](https://docs.aws.amazon.com/en_us/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html) en la *Guía del CloudWatch usuario de Amazon*. 

En la tabla siguiente se describe cada comando de forma breve. A continuación, hay una descripción más completa de cada comando con ejemplos.

**nota**  
Todos los comandos de consulta de Logs Insights QL se admiten en los grupos de registro de la clase de registro Estándar. Los grupos de registro de la clase de registro de acceso poco frecuente admiten todos los comandos de consulta de Logs Insights QL, excepto `pattern`, `diff` y `unmask`.


|  |  | 
| --- |--- |
| **` anomaly`**  | Identifica patrones poco comunes en sus datos de registro mediante machine learning.  | 
| **` display`**  |  Muestra un campo o campos específicos en los resultados de la consulta.  | 
| **` fields`**  |  Muestra campos específicos en los resultados de la consulta y admite funciones y operaciones que puede utilizar para modificar los valores de los campos y crear nuevos campos para utilizarlos en la consulta.  | 
| **` filter`**  |  Filtra la consulta para devolver solo los eventos de registro que coincidan con una o más condiciones.  | 
| **` filterIndex`**  |  Fuerza una consulta para que intente analizar solo los grupos de registros que están indexados en el campo mencionado en un índice de campo y que también contienen un valor para ese índice de campo. Esto reduce el volumen analizado al intentar analizar solo los eventos de registro de estos grupos de registros que contienen el valor especificado en la consulta para este índice de campo.  Este comando no es compatible con los grupos de registro de la clase de registro de acceso poco frecuente. | 
| **` pattern`**  | Agrupa automáticamente los datos de registro en patrones. Un patrón es una estructura de texto compartida que se repite en los campos de registro. CloudWatch Logs Insights le proporciona formas de analizar los patrones encontrados en sus eventos de registro. Para obtener más información, consulte [Análisis del patrón](CWL_AnalyzeLogData_Patterns.md). | 
| **` diff`**  | Permite comparar los eventos de registro encontrados en el período de tiempo solicitado con los eventos de registro de un período de tiempo anterior de igual duración, de modo que pueda buscar tendencias y averiguar si algunos eventos de registro son nuevos.  | 
| **` parse`**  |  Extrae los datos de un campo de registro para crear un campo extraído que pueda procesar en su consulta. **`parse`** admite tanto el modo glob con caracteres comodín como con expresiones regulares.  | 
| **` sort`**  | Muestra los eventos de registro devueltos en orden ascendente (`asc`) o descendente (`desc`).  | 
| **` SOURCE`**  | La inclusión de `SOURCE` en una consulta es una forma útil de especificar una gran cantidad de grupos de registro en función del nombre del grupo de registro, el prefijo, los identificadores de cuenta y la clase de grupo de registro que se van a incluir en una consulta. Este comando solo se admite cuando se crea una consulta en la consola AWS CLI o mediante programación, no en la CloudWatch consola.  | 
| **` stats`**  |  Calcula estadísticas totales mediante valores en los campos de registro.  | 
| **` limit`**  | Especifica un número máximo de eventos de registro que desea que devuelva la consulta. Es ideal con **`sort`** para devolver los “20 primeros” resultados o los “20 últimos” resultados.  | 
| **` dedup`**  |  Elimina los resultados duplicados en función de valores específicos en los campos que especifique. | 
| **` unmask`**  |  Muestra todo el contenido de un evento de registro que tiene parte del contenido enmascarado debido a una política de protección de datos. Para obtener más información sobre la protección de datos en grupos de registro, consulte [Ayude a proteger los datos de registro confidenciales con el enmascaramiento](mask-sensitive-log-data.md).  | 
|   **`[unnest](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-Unnest.html)`**   |   Aplana una lista tomada como entrada para generar varios registros con un único registro para cada elemento de la lista.   | 
| **` lookup`**  | Enriquece los eventos del registro con datos de una tabla de consulta haciendo coincidir los valores de los campos. Utilice las tablas de consulta para añadir datos de referencia, como detalles de usuario, nombres de aplicaciones o información de productos, a los resultados de la consulta. | 
| **[Otras operaciones y funciones](CWL_QuerySyntax-operations-functions.md)**  | CloudWatch Logs Insights también admite numerosas funciones y operaciones de comparación, aritmética, de fecha y hora, numéricas, de cadenas, de direcciones IP y generales.  | 

En las siguientes secciones se proporcionan más detalles sobre los comandos de consulta de CloudWatch Logs Insights.

**Topics**
+ [Comandos de lenguaje de consulta de Información de registros compatibles con las clases de registro](CWL_AnalyzeLogData_Classes.md)
+ [anomalía](CWL_QuerySyntax-Anomaly.md)
+ [**display**](CWL_QuerySyntax-Display.md)
+ [fields](CWL_QuerySyntax-Fields.md)
+ [filter](CWL_QuerySyntax-Filter.md)
+ [filterIndex](CWL_QuerySyntax-FilterIndex.md)
+ [SOURCE](CWL_QuerySyntax-Source.md)
+ [pattern](CWL_QuerySyntax-Pattern.md)
+ [diferencia](CWL_QuerySyntax-Diff.md)
+ [parse](CWL_QuerySyntax-Parse.md)
+ [sort](CWL_QuerySyntax-Sort.md)
+ [stats](CWL_QuerySyntax-Stats.md)
+ [límite](CWL_QuerySyntax-Limit.md)
+ [dedup](CWL_QuerySyntax-Dedup.md)
+ [unmask](CWL_QuerySyntax-Unmask.md)
+ [unnest](CWL_QuerySyntax-Unnest.md)
+ [lookup](CWL_QuerySyntax-Lookup.md)
+ [Funciones booleanas, de comparación, numéricas, de fecha y hora y otras](CWL_QuerySyntax-operations-functions.md)
+ [Campos que contienen caracteres especiales](CWL_QuerySyntax-Guidelines.md)
+ [Uso de alias y comentarios en las consultas](CWL_QuerySyntax-alias.md)

# Comandos de lenguaje de consulta de Información de registros compatibles con las clases de registro
<a name="CWL_AnalyzeLogData_Classes"></a>

Todos los comandos de consulta de Logs Insights QL se admiten en los grupos de registro de la clase de registro Estándar. Los grupos de registro de la clase de registro de acceso poco frecuente admiten todos los comandos de consulta excepto `pattern`, `diff`, `filterIndex` y `unmask`.

# anomalía
<a name="CWL_QuerySyntax-Anomaly"></a>

 Se debe utilizar `anomaly` para identificar de manera automática los patrones inusuales y posibles problemas en sus datos de registro mediante machine learning. 

El comando `anomaly` amplía la funcionalidad `pattern` existente y aprovecha los análisis avanzados para ayudar a identificar posibles anomalías en los datos de registro. Se puede utilizar `anomaly` para reducir el tiempo que se tarda en identificar y resolver los problemas operativos al mostrar de manera automática patrones o comportamientos inusuales en sus registros.

El comando `anomaly` funciona con el comando ` pattern` para identificar primero los patrones de registro y, a continuación, detectar las anomalías en esos patrones. También puede combinar `anomaly` con los comandos ` filter` y ` sort` o para concentrar la detección de anomalías en subconjuntos específicos de los datos. 

**Entrada de comandos de anomalías**

 El comando `anomaly` se suele utilizar después del comando ` pattern` para analizar los patrones identificados en los datos de registro. El comando no exige la presencia de parámetros adicionales y analiza el resultado de los comandos anteriores de la consulta. 

**Tipos de anomalías identificadas**

 El comando `anomaly` identifica cinco tipos distintos de anomalías:
+ *Anomalías de frecuencia de patrones*: frecuencias inusuales de patrones de registro específicos, como cuando una aplicación comienza a generar más mensajes de error de lo habitual.
+ *Nuevas anomalías en los patrones*: patrones de registro nunca antes vistos que pueden indicar la aparición de nuevos tipos de errores o mensajes en los registros.
+ *Anomalías en la variación de los token*: cambios inesperados en el contenido de los mensajes de registro que pueden indicar variaciones inusuales en los formatos de registro esperados.
+ *Anomalías numéricas en los tokens*: cambios inusuales en los valores numéricos de los registros que pueden ayudar a detectar posibles problemas de rendimiento o variaciones inesperadas en las métricas.
+ *Anomalías en el código de error HTTP*: patrones relacionados con las respuestas a los errores HTTP, especialmente útiles cuando se supervisan aplicaciones web y. APIs

**Salida de comandos de anomalías**

 El comando `anomaly` conserva todos los campos de los datos de entrada y añade los resultados de la detección de anomalías para ayudar a identificar patrones inusuales en los datos de registro.

**Ejemplos**

El siguiente comando identifica los patrones en los datos de registro y, a continuación, detecta las anomalías en esos patrones:

```
fields @timestamp, @message
| pattern @message
| anomaly
```

El comando `anomaly` se puede utilizar junto con el filtrado para centrarse en tipos de registro específicos:

```
fields @timestamp, @message
| filter @type = "REPORT"
| pattern @message
| anomaly
```

El comando `anomaly` se puede combinar con la ordenación para organizar los resultados:

```
fields @timestamp, @message
| filter @type = "ERROR"
| pattern @message
| anomaly
| sort @timestamp desc
```

# **display**
<a name="CWL_QuerySyntax-Display"></a>

 Use `display` para mostrar un campo o campos específicos en los resultados de la consulta. 

 El comando `display` muestra solo los campos que especifique. Si la consulta contiene varios comandos `display`, los resultados de la consulta muestran solo el campo o los campos especificados en el comando final `display`.

 **Ejemplo: mostrar un campo** 

 El fragmento de código muestra un ejemplo de una consulta que usa el comando parse para extraer datos de `@message` con el objetivo de crear los campos extraídos `loggingType` y `loggingMessage`. La consulta devuelve todos los eventos de registro en los que los valores de `loggingType` son **ERROR**. `display` muestra solo los valores de `loggingMessage` en los resultados de la consulta. 

```
fields @message
| parse @message "[*] *" as loggingType, loggingMessage
| filter loggingType = "ERROR"
| display loggingMessage
```

**sugerencia**  
 Use `display` solo una vez en una consulta. Si usa `display` más de una vez en una consulta, los resultados de la consulta muestran los campos especificados en la última aparición del comando `display` que se está utilizando. 

# fields
<a name="CWL_QuerySyntax-Fields"></a>

 Use `fields` para mostrar campos específicos en los resultados de la consulta. 

Si su consulta tiene varios comandos `fields` y no incluye un comando `display`, los resultados mostrarán todos los campos que se especifican en los comandos `fields`.

 ** Ejemplo: mostrar campos específicos ** 

 El ejemplo siguiente muestra una consulta que devuelve 20 eventos de registro y los organiza en orden descendente. Los valores para `@timestamp` y `@message` se muestran en los resultados de la consulta. 

```
fields @timestamp, @message
| sort @timestamp desc
| limit 20
```

Se debe utilizar `fields` en lugar de `display` cuando se quieran utilizar las diferentes funciones y operaciones que admite `fields` para modificar los valores de los campos y crear nuevos campos que se puedan usar en las consultas. 

Puede utilizar el comando `fields` con la palabra clave *as* para crear campos extraídos que utilicen campos y funciones en los eventos de registro. Por ejemplo, `fields ispresent as isRes` crea un campo extraído denominado `isRes`, y ese campo extraído se puede utilizar en el resto de la consulta. 

# filter
<a name="CWL_QuerySyntax-Filter"></a>

 Use `filter` para obtener eventos de registro que coincidan con una o más condiciones. 

 ** Ejemplo: filtrar eventos de registro con una condición ** 

 El fragmento de código muestra un ejemplo de una consulta que devuelve todos los eventos de registro en los que el valor de `range` es mayor que ***3000***. La consulta limita los resultados a 20 eventos de registro y los ordena por `@timestamp` y en orden descendente. 

```
fields @timestamp, @message
| filter (range>3000)
| sort @timestamp desc
| limit 20
```

 ** Ejemplo: filtrar eventos de registro con más de una condición ** 

 Puede usar las palabras clave `and` y `or` para combinar más de una condición. 

 El fragmento de código muestra un ejemplo de una consulta que devuelve todos los eventos de registro en los que el valor de `range` es mayor que ***3000*** y el valor de `accountId` es igual que ***123456789012***. La consulta limita los resultados a 20 eventos de registro y los ordena por `@timestamp` y en orden descendente. 

```
fields @timestamp, @message
| filter (range>3000 and accountId=123456789012)
| sort @timestamp desc
| limit 20
```

## Campos indexados y comando de filtro
<a name="CWL_QuerySyntax-index"></a>

Si ha creado índices de campos para un grupo de registros, puede aprovechar esos índices de campo para aumentar la eficacia de las consultas de `filter` y reducir el volumen digitalizado. Supongamos que se ha creado un índice de campo para `requestId`. Luego, cualquier consulta de CloudWatch Logs Insights sobre ese grupo de registros que incluya `filter requestId = value` o `filter requestId IN [value, value, ...]` intente omitir el procesamiento de eventos de registro que se sepa que no incluyen el campo indexado. Al intentar analizar solo los eventos de registro que se sabe que contienen ese campo indexado, se puede reducir el volumen de análisis y la consulta es más rápida.

Para obtener más información sobre los índices de campo y cómo crearlos, consulte [Creación de índices de campo para mejorar el rendimiento de las consultas y reducir el volumen de análisis](CloudWatchLogs-Field-Indexing.md).

**importante**  
Solo las consultas que incluyan `filter fieldName =...` y `filter fieldName IN...` se verán beneficiadas con las mejores del índice de campo. Las consultas que incluyen `filter fieldName like` no emplean índices y siempre analizan todos los eventos de registros en los grupos de registros selectos.

**Ejemplo: búsqueda de eventos de registro relacionados con un identificador de solicitud determinado mediante índices** 

 En este ejemplo se supone que ha creado un índice de campo en `requestId`. En el caso de los grupos de registros que utilizan este índice de campos, la consulta aprovechará los índices de campo para intentar analizar la menor cantidad posible de eventos de registro con los que buscar eventos con `requestId` y un valor de `123456` 

```
fields @timestamp, @message
| filter requestId = "1234656"
| limit 20
```

## Coincidencias y expresiones regulares en el comando de filtro
<a name="CWL_QuerySyntax-regex"></a>

El comando de filtro admite el uso de expresiones regulares. Puede utilizar los siguientes operadores de comparación (`=`, `!=`, `<`, `<=`, `>`, `>=`) y operadores booleanos (`and`, `or` y `not`).

Puede usar la palabra clave `in` para probar si hay suscripción configurada y verificar si hay elementos en una matriz. Para comprobar los elementos de una matriz, coloque los elementos después de `in`. Puede utilizar los operadores booleanos `not`, con `in`. Puede crear consultas que utilicen `in` para devolver eventos de registro en los que los campos son coincidencias de cadenas. Los campos deben ser cadenas completas. Por ejemplo, el siguiente fragmento de código muestra una consulta que utiliza `in` para devolver eventos de registro donde el campo `logGroup` es la cadena completa `example_group`.

```
fields @timestamp, @message
| filter logGroup in ["example_group"]
```

Puede usar las frases de palabras clave `like` y `not like` para que coincidan con las subcadenas. Puede utilizar el operador de expresión regular `=~` para que coincidan con las subcadenas. Para hacer coincidir una subcadena con `like` y `not like`, encierre la subcadena que desea buscar entre comillas dobles o simples. Puede utilizar patrones de expresión regular con `like` y `not like`. Para hacer coincidir una subcadena con el operador de expresiones regulares, encierre la subcadena que desea buscar entre barras diagonales. Los siguientes ejemplos contienen fragmentos de código que muestran cómo se pueden hacer coincidir las subcadenas mediante el comando `filter`.

**Ejemplos: hacer coincidir subcadenas**

 Los siguientes ejemplos devuelven los eventos de registro en que `f1` contiene la palabra ***Exception*** (Excepción). Los tres ejemplos distinguen entre mayúsculas y minúsculas. 

El primer ejemplo hace coincidir una subcadena con `like`. 

```
fields f1, f2, f3 
| filter f1 like "Exception"
```

 El segundo ejemplo hace coincidir una subcadena con `like` y un patrón de expresiones regulares. 

```
fields f1, f2, f3 
| filter f1 like /Exception/
```

 El tercer ejemplo hace coincidir una subcadena con una expresión regular. 

```
fields f1, f2, f3 
| filter f1 =~ /Exception/
```

**Ejemplo: hacer coincidir subcadenas con comodines**

 Puede utilizar el símbolo de punto (`.`) como comodín en expresiones regulares para que coincidan con las subcadenas. En el siguiente ejemplo, la consulta devuelve coincidencias en las que el valor de `f1` comienza con la cadena `ServiceLog`. 

```
fields f1, f2, f3
| filter f1 like /ServiceLog./
```

 Puede colocar un punto antes del símbolo de punto (`.*`) para crear un cuantificador expansivo que devuelva tantas coincidencias como sea posible. Por ejemplo, la siguiente consulta devuelve coincidencias en las que el valor de `f1` no solo comienza con la cadena `ServiceLog`, sino que incluye además la cadena `ServiceLog`. 

```
fields f1, f2, f3
| filter f1 like /ServiceLog.*/
```

 Las posibles coincidencias pueden tener el siguiente formato: 
+  `ServiceLogSampleApiLogGroup` 
+  `SampleApiLogGroupServiceLog` 

**Ejemplo: excluir subcadenas de coincidencias**

En el siguiente ejemplo, se muestra una consulta que devuelve eventos de registro donde `f1` no contiene la palabra ***Exception*** (Excepción). El ejemplo distingue mayúsculas de minúsculas.

```
fields f1, f2, f3 
| filter f1 not like "Exception"
```

**Ejemplo: hacer coincidir subcadenas con patrones que no distinguen mayúsculas de minúsculas**

Puede hacer coincidir las subcadenas que no distinguen mayúsculas de minúsculas con `like` y expresiones regulares. Coloque el siguiente parámetro (**?i**) antes de la subcadena que desea buscar. En el siguiente ejemplo, se muestra una consulta que devuelve eventos de registro donde `f1` contiene la palabra ***Exception*** o ***exception*** (Excepción o excepción).

```
fields f1, f2, f3 
| filter f1 like /(?i)Exception/
```

# filterIndex
<a name="CWL_QuerySyntax-FilterIndex"></a>

 Se usa `filterIndex` para devolver solo datos indexados, mediante el forzado de una consulta a analizar solo los grupos de registros que están indexados en un campo que se especifique en la consulta. Para los grupos de registros que están indexados en este campo, se optimiza aún más la consulta al omitir los grupos de registros que no tienen ningún evento de registro que contenga el campo especificado en la consulta del campo indexado. Se reduce aún más el volumen analizado al intentar analizar solo los eventos de registro de estos grupos de registros que coincidan con el valor especificado en la consulta para este índice de campos. Para obtener más información sobre los índices de campo y cómo crearlos, consulte [Creación de índices de campo para mejorar el rendimiento de las consultas y reducir el volumen de análisis](CloudWatchLogs-Field-Indexing.md).

El uso de `filterIndex` con campos indexados puede ayudar a consultar grupos de registros que incluyen petabytes de datos de registro de manera eficiente, ya que limita el espacio de búsqueda real a los grupos de registros y los eventos de registro que tienen índices de campo.

Por ejemplo, supongamos que se ha creado un índice de campos para `IPaddress` en algunos de los grupos de registro de su cuenta. A continuación, se puede crear la siguiente consulta y elegir consultar todos los grupos de registros de la cuenta para buscar eventos de registro que incluyan el valor `198.51.100.0` del campo `IPaddress`.

```
fields @timestamp, @message
| filterIndex IPaddress = "198.51.100.0"
| limit 20
```

El comando `filterIndex` hace que esta consulta intente omitir todos los grupos de registros que no están indexados para `IPaddress`. Además, dentro de los grupos de registros que están indexados, la consulta omite los eventos de registro que tienen un campo `IPaddress`, pero que no consideran a `198.51.100.0` como el valor de ese campo.

Utilice el operador `IN` para ampliar los resultados a cualquiera de los múltiples valores de los campos indexados. El siguiente ejemplo busca eventos de registro que incluyen el valor `198.51.100.0` o `198.51.100.1` en el campo `IPaddress`. 

```
fields @timestamp, @message 
| filterIndex IPaddress in ["198.51.100.0", "198.51.100.1"]
| limit 20
```

CloudWatch Los registros proporcionan índices de campos predeterminados para todos los grupos de registros de la clase de registros estándar. Los índices de campo predeterminados están disponibles automáticamente para los siguientes campos: 
+ `@logStream`
+ `@aws.region`
+ `@aws.account`
+ `@source.log`
+ `@data_source_name`
+ `@data_source_type`
+ `@data_format`
+ `traceId`
+ `severityText`
+ `attributes.session.id`

CloudWatch Los registros también proporcionan índices de campo predeterminados para determinadas combinaciones de nombres y tipos de fuentes de datos. Los índices de campo predeterminados están disponibles automáticamente para las siguientes combinaciones de nombre y tipo de fuente de datos:


| Nombre y tipo de fuente de datos | Índices de campo predeterminados | 
| --- | --- | 
|  `amazon_vpc.flow`  |  `action` `logStatus` `region` `flowDirection` `type`  | 
|  `amazon_route53.resolver_query`  |  `query_type` `transport` `rcode`  | 
|  `aws_waf.access`  |  `action` `httpRequest.country`  | 
|  `aws_cloudtrail.data` ` aws_cloudtrail.management`  |  `eventSource` `eventName` `awsRegion` `userAgent` `errorCode` `eventType` `managementEvent` `readOnly` `eventCategory` `requestId`  | 

Los índices de campos predeterminados se suman a cualquier índice de campo personalizado que defina en su política. Los índices de campo predeterminados no se incluyen en la [cuota de índices de campo](CloudWatchLogs-Field-Indexing-Syntax.md). 

## filterIndex comparado con el filtro
<a name="CWL_QuerySyntax-FilterIndex-Filter"></a>

Para ilustrar la diferencia entre `filterIndex` y `filter`, se pueden tener en cuenta las siguientes consultas de ejemplo. Supongamos que se ha creado un índice de campos para `IPaddress`, para cuatro de los grupos de registros, pero no para un quinto grupo de registros. La siguiente consulta mediante `filterIndex` omitirá la exploración del grupo de registros que no tiene el campo indexado. Para cada grupo de registro indexado, se intenta analizar solo los eventos de registro que tienen el campo indexado y, además, solo devuelve los resultados de una vez creado el índice de campos.

```
fields @timestamp, @message 
| filterIndex IPaddress = "198.51.100.0" 
| limit 20
```

Por el contrario, si se utiliza `filter` en lugar de `filterIndex` para una consulta de los mismos cinco grupos de registros, la consulta intentará analizar no solo los eventos de registro que contienen el valor de los grupos de registros indexados, sino que también analizará el quinto grupo de registros que no esté indexado y analizará todos los eventos de registro de ese quinto grupo de registros.

```
fields @timestamp, @message 
| filter IPaddress = "198.51.100.0" 
| limit 20
```

# SOURCE
<a name="CWL_QuerySyntax-Source"></a>

Incluirlo `SOURCE` en una consulta es una forma útil de especificar las fuentes de and/or datos de los grupos de registros que se van a incluir en una consulta cuando se utiliza la API AWS CLI o para crear una consulta. El `SOURCE` comando solo se admite en la API AWS CLI and, no en la CloudWatch consola. Cuando usa la CloudWatch consola para iniciar una consulta, usa la interfaz de la consola para especificar los grupos de registros. 

Consulte los grupos de registros

A fin de utilizar `SOURCE` para especificar los grupos de registros que se van a consultar, se pueden utilizar las siguientes palabras clave:
+ `namePrefix` ejecuta la consulta en grupos de registros que tienen nombres que comienzan por la cadena que se especifique. Si se omite, se consultarán todos los grupos de registros.

  Puede incluir hasta cinco prefijos en la lista.
+ `accountIdentifier`ejecuta la consulta en los grupos de registros de la AWS cuenta especificada. Esto solo funciona cuando se ejecuta la consulta en una cuenta de supervisión. Si se omite, la opción predeterminada es consultar todas las cuentas de origen vinculadas y la cuenta de supervisión actual. Para obtener más información sobre la observabilidad entre cuentas, consulta la observabilidad [CloudWatch entre](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Unified-Cross-Account.html) cuentas.

  Se pueden incluir hasta 20 identificadores de cuenta en la lista.
+ `logGroupClass` ejecuta la consulta en grupos de registros que se encuentran en la clase de registro especificada, ya sea de acceso estándar o de acceso poco frecuente. Si se omite esto, se usa la clase de registro predeterminada, que es Estándar. Para obtener más información acerca de las clases de registros, consulte [Clases de registro](CloudWatch_Logs_Log_Classes.md).

Como se puede especificar un gran número de grupos de registros para consultarlos de esta manera, se recomienda que utilice `SOURCE` únicamente en consultas que aprovechen los índices de campos que se hayan creado. Para obtener más información acerca de la indexación de campos en grupos de registro, consulte [Creación de índices de campo para mejorar el rendimiento de las consultas y reducir el volumen de análisis](CloudWatchLogs-Field-Indexing.md)

En el siguiente ejemplo se seleccionan todos los grupos de registro de la cuenta. Si se trata de una cuenta de supervisión, entonces se seleccionarán todos los grupos de registros de la supervisión y todas las cuentas de origen. Si el número total de grupos de registros supera los 10 000, aparecerá un error que pedirá que se reduzca el número de grupos de registros mediante un método de selección de grupos de registros diferente.

```
SOURCE logGroups()
```

En el siguiente ejemplo, se seleccionan los grupos de registros de la cuenta de origen `111122223333`. Si inicias una consulta en una cuenta de supervisión en el marco de la observabilidad CloudWatch multicuenta, los grupos de registros de todas las cuentas de origen y de la cuenta de supervisión se seleccionan de forma predeterminada.

```
SOURCE logGroups(accountIdentifiers:['111122223333'])
```

En el siguiente ejemplo, se seleccionan los grupos de registros en función de los prefijos de los nombres.

```
SOURCE logGroups(namePrefix: ['namePrefix1', 'namePrefix2'])
```

En el siguiente ejemplo se seleccionan todos los grupos de registro de la clase de registro de acceso poco frecuente. Si no incluye el identificador `class`, la consulta se aplica únicamente a los grupos de registro en la clase de registro Estándar, que es la predeterminada. 

```
SOURCE logGroups(class: ['INFREQUENT_ACCESS'])
```

En el siguiente ejemplo, se seleccionan los grupos de registros de la cuenta 111122223333 que comienzan con prefijos de nombre específicos y pertenecen a la clase de registro Estándar. La clase no se menciona en el comando porque Estándar es el valor predeterminado de la clase de registro. 

```
SOURCE logGroups(accountIdentifiers:['111122223333'], namePrefix: ['namePrefix1', 'namePrefix2']
```

El último ejemplo muestra cómo utilizar el `SOURCE` comando con el `start-query` AWS CLI comando.

```
aws logs start-query 
--region us-east-1 
--start-time 1729728200 
--end-time 1729728215 
--query-string "SOURCE logGroups(namePrefix: ['Query']) | fields @message | limit 5"
```

Consulta del origen de datos

`SOURCE`Para especificar las fuentes de datos que se van a consultar, puede utilizar la `dataSource` palabra clave. Puede incluir hasta diez fuentes de datos en la lista.

 En el siguiente ejemplo, se selecciona la fuente de `amazon_vpc.flow` datos. 

```
SOURCE dataSource(['amazon_vpc.flow'])
```

 En el siguiente ejemplo, se selecciona la fuente de `amazon_vpc.flow` datos y se limitan los grupos de registros en función de un prefijo de nombre de grupo de registros. 

```
SOURCE dataSource(['amazon_vpc.flow']) logGroups(namePrefix: ['namePrefix1'])
```

# pattern
<a name="CWL_QuerySyntax-Pattern"></a>

 Use `pattern` para agrupar automáticamente los datos de registro en patrones. 

Un patrón es una estructura de texto compartida que se repite entre los campos de registro. Se puede utilizar `pattern` para mostrar las tendencias emergentes, supervisar los errores conocidos e identificar las líneas de registro que se producen con frecuencia o son costosas. CloudWatch Logs Insights también proporciona una experiencia de consola que puede utilizar para buscar y analizar más a fondo los patrones de sus eventos de registro. Para obtener más información, consulte [Análisis del patrón](CWL_AnalyzeLogData_Patterns.md).

Dado que el comando `pattern` identifica automáticamente los patrones comunes, puede usarlo como punto de partida para buscar y analizar sus registros. También puede combinar `pattern` con los comandos ` filter`, ` parse` o ` sort` para identificar patrones en consultas más precisas. 

**Entrada del comando pattern**

 El comando `pattern` espera una de las siguientes entradas: el campo `@message`, un campo extraído creado mediante el comando ` parse` o una cadena manipulada mediante una o más [funciones de cadena](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-operations-functions.html#CWL_QuerySyntax-string-functions). 

Si CloudWatch Logs no puede deducir el tipo de datos que representa un token dinámico, lo muestra como <Token- *number* > e *number* indica en qué parte del patrón aparece este token, en comparación con los demás tokens dinámicos.

Algunos ejemplos comunes de tokens dinámicos son los códigos de error, las direcciones IP, las marcas de tiempo y las solicitudes. IDs

**Salida del comando pattern**

 El comando `pattern` produce la salida siguiente:
+ `@pattern`: una estructura de texto compartida que se repite entre los campos de eventos de registro. Los campos que varían dentro de un patrón, como un ID de solicitud o una marca de tiempo, se representan con *tokens*. Si CloudWatch los registros pueden determinar el tipo de datos que representa un token dinámico, mostrará el token como. `<string-number>` *string*Es una descripción del tipo de datos que representa el token. *number*Muestra en qué parte del patrón aparece este token, en comparación con los otros tokens dinámicos.

  CloudWatch Los registros asignan a la cadena una parte del nombre en función del análisis del contenido de los eventos del registro que lo contienen.

  Si CloudWatch Logs no puede deducir el tipo de datos que representa un token dinámico, lo muestra como <Token- *number* > e *number* indica en qué parte del patrón aparece este token, en comparación con los demás tokens dinámicos.

  Por ejemplo, `[INFO] Request time: <Time-1> ms` es una salida potencial para el mensaje de registro `[INFO] Request time: 327 ms`.
+ `@ratio`: proporción de eventos de registro de un periodo de tiempo seleccionado y los grupos de registro especificados que coinciden con un patrón identificado. Por ejemplo, si la mitad de los eventos de registro de los grupos de registro y el periodo de tiempo seleccionados coinciden con el patrón, `@ratio` devuelve `0.50`
+ `@sampleCount`: recuento del número de eventos de registro de un periodo de tiempo seleccionado y los grupos de registro especificados que coinciden con un patrón identificado.
+ `@severityLabel`: gravedad o nivel del registro, que indica el tipo de información que contiene un registro. Por ejemplo, `Error`, `Warning`, `Info` o `Debug`.

**Ejemplos**

El siguiente comando identifica los registros con estructuras similares en los grupos de registro especificados durante el intervalo de tiempo seleccionado y los agrupa por patrón y recuento

```
pattern @message
```

El comando `pattern` se puede utilizar en combinación con el comando ` filter` 

```
filter @message like /ERROR/
| pattern @message
```

El comando `pattern` se puede utilizar con los comandos ` parse` y ` sort` 

```
filter @message like /ERROR/
| parse @message 'Failed to do: *' as cause
| pattern cause
| sort @sampleCount asc
```

# diferencia
<a name="CWL_QuerySyntax-Diff"></a>

Permite comparar los eventos de registro que se encuentren en el período de tiempo solicitado con los eventos de registro de un período de tiempo anterior de igual duración. De esta forma, puede buscar tendencias y determinar si los eventos de registro específicos son nuevos.

Agregue un modificador al comando `diff` para especificar el período con el que desee comparar la información:
+ `diff` compara los eventos de registro en el intervalo de tiempo seleccionado actualmente con los eventos de registro del intervalo de tiempo inmediatamente anterior.
+ `diff previousDay` compara los eventos de registro en el intervalo de tiempo seleccionado actualmente con los eventos de registro que tienen la misma hora pero son del día anterior.
+ `diff previousWeek` compara los eventos de registro en el intervalo de tiempo seleccionado actualmente con los eventos de registro que tienen la misma hora pero son de la semana anterior.
+ `diff previousMonth` compara los eventos de registro en el intervalo de tiempo seleccionado actualmente con los eventos de registro que tienen la misma hora pero son del mes anterior.

Para obtener más información, consulte [Comparación (diferencia) con intervalos de tiempo anteriores](CWL_AnalyzeLogData_Compare.md).

# parse
<a name="CWL_QuerySyntax-Parse"></a>

 Use `parse` para extraer datos de un campo de registro y crear un campo extraído que pueda procesar en su consulta. **`parse`** admite tanto el modo glob con caracteres comodín como expresiones regulares. Para obtener información acerca de la sintaxis de la expresión regular, consulte [Sintaxis de expresiones regulares (regex) compatibles](FilterAndPatternSyntax.md#regex-expressions).

 Puede analizar los campos JSON anidados con una expresión regular. 

**Ejemplo: análisis de un campo JSON anidado**

 El fragmento de código muestra cómo analizar un evento de registro JSON que se ha aplanado durante la incorporación. 

```
{'fieldsA': 'logs', 'fieldsB': [{'fA': 'a1'}, {'fA': 'a2'}]}
```

 El fragmento de código muestra una consulta con una expresión regular que extrae los valores de `fieldsA` y `fieldsB` con el objetivo de crear los campos extraídos `fld` y `array`. 

```
parse @message "'fieldsA': '*', 'fieldsB': ['*']" as fld, array
```

**Grupos de captura con nombres**

Cuando se usa **`parse`** con una expresión regular, puede usar grupos de captura con nombre para capturar un patrón en un campo. La sintaxis es `parse @message (?<Name>pattern)`

El siguiente ejemplo usa un grupo de captura en un registro de flujo de la VPC para extraer el ENI en un campo denominado `NetworkInterface`.

```
parse @message /(?<NetworkInterface>eni-.*?) / | display NetworkInterface, @message
```

**nota**  
 Los eventos de registro JSON se aplanan durante la ingesta. Actualmente, no se admite el análisis de campos JSON anidados con una expresión glob. Solo puede analizar eventos de registro JSON que no incluyan más de 200 campos de eventos de registro. Cuando analice los campos JSON anidados, debe dar formato a la expresión regular de la consulta para que coincida con el formato de su evento de registro JSON. 

## Ejemplos del comando para analizar
<a name="CWL_QuerySyntax-parse-examples"></a>

**Utilice una expresión glob para extraer los campos `@user`, `@method` y `@latency` del campo de registro `@message` y devolver la latencia promedio para cada combinación única de `@method` y `@user`.** 

```
parse @message "user=*, method:*, latency := *" as @user,
    @method, @latency | stats avg(@latency) by @method,
    @user
```

**Utilice una expresión regular para extraer los campos `@user2`, `@method2` y `@latency2` del campo de registro `@message` y devolver la latencia promedio para cada combinación única de `@method2` y `@user2`.**

```
parse @message /user=(?<user2>.*?), method:(?<method2>.*?),
    latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, 
    @user2
```

**Extrae los campos `loggingTime`, `loggingType` y `loggingMessage`, filtra hasta los eventos de registro que contienen cadenas `ERROR` o `INFO` y, a continuación, muestra solo los campos `loggingMessage` y `loggingType` para los eventos que contienen una cadena `ERROR`.**

```
FIELDS @message
    | PARSE @message "* [*] *" as loggingTime, loggingType, loggingMessage
    | FILTER loggingType IN ["ERROR", "INFO"]
    | DISPLAY loggingMessage, loggingType = "ERROR" as isError
```

# sort
<a name="CWL_QuerySyntax-Sort"></a>

 Use `sort` para mostrar eventos de registro en orden ascendente (`asc`) o descendente (`desc`) por un campo especificado. Puede usarlo con el comando `limit` para crear consultas de los “primeros N” o los “últimos N”. 

El algoritmo de clasificación es una versión actualizada de la clasificación natural. Si ordena en orden ascendente, se utiliza la siguiente lógica.
+  Todos los valores no numéricos aparecen antes que todos los valores numéricos. Los *valores numéricos* son valores que incluyen únicamente números, no una mezcla de números y otros caracteres.
+ Para los valores que no son numéricos, el algoritmo agrupa los caracteres numéricos consecutivos y los caracteres alfabéticos consecutivos en fragmentos separados para compararlos. Ordena las partes no numéricas por sus valores Unicode y ordena las partes numéricas primero por su longitud y, después, por su valor numérico.

Para obtener más información sobre el orden Unicode, consulte [Lista de caracteres Unicode](https://en.wikipedia.org/wiki/List_of_Unicode_characters).

Por ejemplo, la información siguiente es el resultado de una clasificación en orden ascendente.

```
!:	>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> sorted by unicode order
#
*%04
0#	>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Alphanumeric starting with numbers
5A
111A   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  Starts with more digits than 5A, so it sorted to be later than 5A
2345_
@	>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2345 is compared with @ in the unicode order, 
@_
A	>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Values starting with letters
A9876fghj
a12345hfh
0	>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Number values
01
1
2
3
```

Si ordena en orden descendente, los resultados de la clasificación se invertirán.

Por ejemplo, la siguiente consulta para los registros de flujo de Amazon VPC busca las 15 transferencias principales de paquetes entre hosts.

```
stats sum(packets) as packetsTransferred by srcAddr, dstAddr
    | sort packetsTransferred  desc
    | limit 15
```

# stats
<a name="CWL_QuerySyntax-Stats"></a>

 Utilice `stats` para crear visualizaciones de los datos de registro, como gráficos de barras, gráficos de líneas y gráficos de áreas apiladas. Esto le ayuda a identificar de forma más eficiente los patrones en los datos de registro. CloudWatch Logs Insights genera visualizaciones para las consultas que utilizan la `stats` función y una o más funciones de agregación. 

Por ejemplo, la siguiente consulta en un grupo de registro de Route 53 devuelve visualizaciones que muestran la distribución de los registros de Route 53 por hora, por tipo de consulta.

```
stats count(*) by queryType, bin(1h)
```

Todas estas consultas pueden generar gráficos de barras. Si la consulta utiliza la función `bin()` para agrupar los datos en función de un mismo campo a lo largo del tiempo, también puede ver gráficos de líneas y gráficos de áreas apiladas.

La función `bin` admite las siguientes unidades de tiempo y abreviaturas. Para todas las unidades y abreviaturas que incluyan más de un carácter, se admite agregar s para pluralizar. Así que tanto `hr` como `hrs` funcionan para especificar las horas.
+ `millisecond` `ms` `msec`
+ `second` `s` `sec`
+ `minute` `m` `min`
+ `hour` `h` `hr`
+ `day` `d` 
+ `week` `w` 
+ `month` `mo` `mon`
+ `quarter` `q` `qtr`
+ `year` `y` `yr`

**Topics**
+ [Visualización de datos de series temporales](#CWL_Insights-Visualizing-TimeSeries)
+ [Visualización de datos de registro agrupados por campos](#CWL_Insights-Visualizing-ByFields)
+ [Utilice varios comandos de estadísticas en una sola consulta](#CWL_QuerySyntax-stats-multi)
+ [Funciones para usar con estadísticas](#CWL_QuerySyntax-stats-functions)

## Visualización de datos de series temporales
<a name="CWL_Insights-Visualizing-TimeSeries"></a>

Las visualizaciones de series temporales funcionan con las consultas que tienen las siguientes características:
+ La consulta contiene una o varias funciones de agregación. Para obtener más información, consulte [Aggregation Functions in the Stats Command](#CWL_Insights_Aggregation_Functions).
+ La consulta utiliza la función `bin()` para agrupar los datos por un campo. 

Estas consultas pueden generar gráficos de líneas, de áreas apiladas, de barras y circulares. 

**Ejemplos**

Para ver un tutorial completo, consulte [Tutorial: Ejecutar una consulta que produce una visualización de serie temporal](CWL_AnalyzeLogData_VisualizationQuery.md). 

Aquí hay más consultas de ejemplo que funcionan para la visualización de series temporales.

La siguiente consulta genera una visualización de los valores medios del campo `myfield1`, con un punto de datos creado cada cinco minutos. Cada punto de datos es la agregación de las medias de los valores `myfield1` de los registros de los últimos cinco minutos.

```
stats avg(myfield1) by bin(5m)
```

La siguiente consulta genera una visualización de los tres valores basados en diferentes campos, con un punto de datos creado cada cinco minutos. La visualización se genera porque la consulta contiene las funciones de agregación y utiliza `bin()` como campo de agrupación.

```
stats avg(myfield1), min(myfield2), max(myfield3) by bin(5m)
```

**Restricciones de los gráficos de líneas y de áreas apiladas**

Las consultas que agregan información de entradas de registro pero no utilizan la función `bin()` pueden generar gráficos de barras. Sin embargo, las consultas no pueden generar gráficos de líneas ni gráficos de áreas apiladas. Para obtener más información sobre estos tipos de consultas, visite [Visualización de datos de registro agrupados por campos](#CWL_Insights-Visualizing-ByFields).

## Visualización de datos de registro agrupados por campos
<a name="CWL_Insights-Visualizing-ByFields"></a>

Puede generar gráficos de barras para consultas que utilizan la función `stats` y una o varias funciones de agregación. Para obtener más información, consulte [Aggregation Functions in the Stats Command](#CWL_Insights_Aggregation_Functions).

Para ver la visualización, ejecute la consulta. A continuación, elija la pestaña **Visualization (Visualización)**, seleccione la flecha situada junto a **Line (Línea)** y haga clic en **Bar (Barra)**. Las visualizaciones de los gráficos de barras tienen un límite máximo de 100 barras.

**Ejemplos**

Para ver un tutorial completo, consulte [Tutorial: Ejecutar una consulta que produce una visualización agrupada por campos de registro](CWL_AnalyzeLogData_VisualizationFieldQuery.md). Los párrafos siguientes incluyen más consultas de ejemplo de visualizaciones por campos.

La siguiente consulta de registro de flujo de VPC busca el número medio de bytes transferidos por sesión en cada dirección de destino.

```
stats avg(bytes) by dstAddr
```

También puede generar un gráfico que contenga varias barras para cada valor resultante. Por ejemplo, la siguiente consulta de registro de flujo de VPC busca el número medio y máximo de bytes transferidos por sesión en cada dirección de destino.

```
stats avg(bytes), max(bytes) by dstAddr
```

En la siguiente consulta, se busca el número de registros de Amazon Route 53 para cada tipo de consulta.

```
stats count(*) by queryType
```

## Utilice varios comandos de estadísticas en una sola consulta
<a name="CWL_QuerySyntax-stats-multi"></a>

Puede usar hasta dos comandos `stats` en una sola consulta. Esto le permite realizar una agregación adicional en el resultado de la primera agregación.

**Ejemplo: consulta con dos comandos `stats`**

Por ejemplo, la siguiente consulta busca primero el volumen de tráfico total en los intervalos de 5 minutos y, a continuación, calcula el volumen de tráfico más alto, más bajo y medio de esos intervalos de 5 minutos.

```
FIELDS strlen(@message) AS message_length
| STATS sum(message_length)/1024/1024 as logs_mb BY bin(5m)
| STATS max(logs_mb) AS peak_ingest_mb, 
        min(logs_mb) AS min_ingest_mb, 
        avg(logs_mb) AS avg_ingest_mb
```

**Ejemplo: combine varios comandos de estadísticas con otras funciones, como `filter`, `fields`, `bin`**

Puede combinar dos comandos `stats` con otros comandos, como `filter` y `fields`, en una sola consulta. Por ejemplo, la siguiente consulta busca el número de direcciones IP distintas en las sesiones y busca el número de sesiones por plataforma de cliente, filtra esas direcciones IP y, finalmente, busca el promedio de solicitudes de sesión por plataforma del cliente.

```
STATS count_distinct(client_ip) AS session_ips, 
      count(*) AS requests BY session_id, client_platform
| FILTER session_ips > 1
| STATS count(*) AS multiple_ip_sessions, 
        sum(requests) / count(*) AS avg_session_requests BY client_platform
```

Puede utilizar funciones `bin` y `dateceil` en consultas con varios comandos `stats`. Por ejemplo, la siguiente consulta combina primero los mensajes en bloques de 5 minutos, luego agrega esos bloques de 5 minutos en bloques de 10 minutos y calcula los volúmenes de tráfico más altos, más bajos y promedio dentro de cada bloque de 10 minutos.

```
FIELDS strlen(@message) AS message_length
| STATS sum(message_length) / 1024 / 1024 AS logs_mb BY BIN(5m) as @t
| STATS max(logs_mb) AS peak_ingest_mb, 
        min(logs_mb) AS min_ingest_mb,
        avg(logs_mb) AS avg_ingest_mb BY dateceil(@t, 10m)
```

**Notas y limitaciones**

Una consulta puede tener un máximo de dos comandos `stats`. Esta cuota no se puede cambiar. 

Si utiliza un comando `sort` o `limit`, debe aparecer después del segundo comando `stats`. Si está antes del segundo comando `stats`, la consulta no es válida.

Cuando una consulta tiene dos comandos `stats`, los resultados parciales de la consulta no comienzan a mostrarse hasta que se completa la primera agregación `stats`.

En el segundo comando `stats` de una consulta única, solo puede hacer referencia a los campos definidos en el primer comando `stats`. Por ejemplo, la siguiente consulta no es válida porque el campo `@message` no estará disponible después de la primera agregación `stats`.

```
FIELDS @message
| STATS SUM(Fault) by Operation
# You can only reference `SUM(Fault)` or Operation at this point
| STATS MAX(strlen(@message)) AS MaxMessageSize # Invalid reference to @message
```

Todos los campos a los que haga referencia después del primer comando `stats` deben definirse en ese primer comando `stats`.

```
STATS sum(x) as sum_x by y, z
| STATS max(sum_x) as max_x by z
# You can only reference `max(sum_x)`, max_x or z at this point
```

**importante**  
La función `bin` siempre utiliza el campo `@timestamp` de forma implícita. Esto significa que no se puede usar `bin` en el segundo comando `stats` sin usar el primer comando `stats` para propagar el campo `timestamp`. Por ejemplo, la siguiente consulta no es válida.  

```
FIELDS strlen(@message) AS message_length
 | STATS sum(message_length) AS ingested_bytes BY @logStream
 | STATS avg(ingested_bytes) BY bin(5m) # Invalid reference to @timestamp field
```
En su lugar, defina el campo `@timestamp` en el primer comando `stats` y, a continuación, podrá usarlo con `dateceil` en el segundo comando `stats`, como en el siguiente ejemplo.  

```
FIELDS strlen(@message) AS message_length
 | STATS sum(message_length) AS ingested_bytes, max(@timestamp) as @t BY @logStream
 | STATS avg(ingested_bytes) BY dateceil(@t, 5m)
```

## Funciones para usar con estadísticas
<a name="CWL_QuerySyntax-stats-functions"></a><a name="CWL_Insights_Aggregation_Functions"></a>

CloudWatch Logs Insights admite funciones de agregación de estadísticas y funciones de no agregación de estadísticas.

 Utilice las funciones de agregación de estadísticas en el comando `stats` y como argumentos para otras funciones. 


| Función | Tipo de resultado | Description (Descripción) | 
| --- | --- | --- | 
|  `avg(fieldName: NumericLogField)` |  número |  La media de los valores en el campo especificado.  | 
|  `count()` `count(fieldName: LogField)` |  número |  Cuenta los eventos de registro. `count()` (o `count(*)`) cuenta todos los eventos devueltos por la consulta, mientras que `count(fieldName)` cuenta todos los registros que incluyen el nombre de campo especificado.  | 
|  `count_distinct(fieldName: LogField)` |  número |  Devuelve el número de valores únicos para el campo. Si el campo tiene una cardinalidad muy alta (contiene muchos valores únicos), el valor devuelto por `count_distinct` es solo una aproximación.  | 
|  `max(fieldName: LogField)` |  LogFieldValue |  El máximo de los valores para este campo de registro en los registros consultados.  | 
|  `min(fieldName: LogField)` |  LogFieldValue |  El mínimo de los valores para este campo de registro en los registros consultados.  | 
|  `pct(fieldName: LogFieldValue, percent: number)` |  LogFieldValue |  Un percentil indica el peso relativo de un valor en un conjunto de datos. Por ejemplo, `pct(@duration, 95)` devuelve el valor `@duration` en que el 95 % de los valores de `@duration` son inferiores a este valor y un 5 por ciento son superiores a este valor.  | 
|  `stddev(fieldName: NumericLogField)` |  número |  El desvío estándar de los valores en el campo especificado.  | 
|  `sum(fieldName: NumericLogField)` |  número |  La suma de los valores en el campo especificado.  | 

 **Funciones sin agregación de estadísticas** <a name="CWL_Insights_Non-Aggregation_Functions"></a>

 Utilice las funciones de no agregación en el comando `stats` y como argumentos para otras funciones. 


| Función | Tipo de resultado | Description (Descripción) | 
| --- | --- | --- | 
|  `earliest(fieldName: LogField)` |  LogField |  Devuelve el valor de `fieldName` desde el evento de registro que tiene la primera marca temporal en los registros consultados.  | 
|  `latest(fieldName: LogField)` |  LogField |  Devuelve el valor de `fieldName` desde el evento de registro que tiene la última marca temporal en los registros consultados.  | 
|  `sortsFirst(fieldName: LogField)` |  LogField |  Devuelve el valor de `fieldName` que ordena en primer lugar los registros consultados.  | 
|  `sortsLast(fieldName: LogField)` |  LogField |  Devuelve el valor de `fieldName` que ordena al final los registros consultados.  | 

# límite
<a name="CWL_QuerySyntax-Limit"></a>

 Use `limit` para especificar el número de eventos de registro que desea que devuelva la consulta. Si omite `limit`, la consulta devolverá hasta 10 000 eventos de registro en los resultados. 

Por ejemplo, el siguiente ejemplo devuelve solo los 25 eventos de registro más recientes

```
fields @timestamp, @message | sort @timestamp desc | limit 25
```

# dedup
<a name="CWL_QuerySyntax-Dedup"></a>

 Utilice `dedup` para eliminar los resultados duplicados en función de valores específicos en los campos que indique. Puede utilizar `dedup` con uno o más campos. Si especifica un campo con `dedup`, solo se devolverá un evento de registro por cada valor único de ese campo. Si especifica varios campos, se devolverá un evento de registro por cada combinación única de valores para esos campos.

Los resultados duplicados se descartan según el orden de clasificación y solo se conserva el primer resultado del orden de clasificación. Le recomendamos que ordene los resultados antes de someterlos al comando `dedup`. Si los resultados no se ordenan antes de analizarlos con `dedup`, se utiliza el orden de clasificación descendente predeterminado de `@timestamp`. 

Los valores nulos no se consideran duplicados para la evaluación. Se conservan los eventos de registro con valores nulos para cualquiera de los campos especificados. Para eliminar campos con valores nulos, utilice **`filter`** mediante la función `isPresent(field)`. 

El único comando de consulta que puede utilizar en una consulta después del comando `dedup` es `limit`.

Cuando se utiliza `dedup` en una consulta, la consola muestra un mensaje como **Mostrar X de Y registros, donde X** es el número de resultados deduplicados e Y es el número total de registros coincidentes antes de la deduplicación. Esto indica que se eliminaron los registros duplicados y no significa que falten datos.

 **Ejemplo: Vea solo el evento de registro más reciente para cada valor único del campo denominado `server`** 

 En el siguiente ejemplo, se muestran los campos `timestamp`, `server`, `severity` y `message` solo para el evento más reciente de cada valor único de `server`. 

```
fields @timestamp, server, severity, message 
| sort @timestamp desc 
| dedup server
```

Para ver más ejemplos de consultas de CloudWatch Logs Insights, consulte[Consultas generales](CWL_QuerySyntax-examples.md#CWL_QuerySyntax-examples-general). 

# unmask
<a name="CWL_QuerySyntax-Unmask"></a>

 `unmask` se utiliza para mostrar todo el contenido de un evento de registro que tiene parte del contenido enmascarado debido a una política de protección de datos. Para ejecutar este comando, debe tener el permiso `logs:Unmask`.

Para obtener más información sobre la protección de datos en grupos de registro, consulte [Ayude a proteger los datos de registro confidenciales con el enmascaramiento](mask-sensitive-log-data.md). 

# unnest
<a name="CWL_QuerySyntax-Unnest"></a>

 Se debe utilizar `unnest` para aplanar una lista tomada como entrada y generar varios registros con un único registro para cada elemento de la lista. En función de la cantidad de elementos que contenga un campo, este comando descarta el registro actual y genera nuevos registros. Cada registro incluye el `unnested_field`, que representa un elemento. Todos los demás campos provienen del registro original. 

 La entrada para `unnest` es `LIST`, que proviene de la función `jsonParse`. Para obtener más información, consulte [Tipos de estructura](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-operations-functions.html#CWL_QuerySyntax-structure-types). Cualquier otro tipo, como `MAP`, `String` y `numbers`, se trata como una lista con un elemento en `unnest`. 

**Estructura de comandos**  
 En el ejemplo siguiente, se describe el formato de este comando. 

```
unnest field into unnested_field
```

**Consulta de ejemplo**  
 En el siguiente ejemplo, se analiza una cadena de objeto JSON y se amplía una lista de eventos de campo. 

```
fields jsonParse(@message) as json_message 
| unnest json_message.events into event
| display event.name
```

El evento de registro de esta consulta de ejemplo podría ser una cadena JSON de la siguiente manera:

```
{
   "events": [
        {
            "name": "exception"
        },
        {
            "name": "user action"
        }
   ]
}
```

En este caso, la consulta de ejemplo genera dos registros en el resultado de la consulta, uno con `event.name` como `exception` y otro con `event.name` como **acción del usuario**

**Consulta de ejemplo**  
 En el siguiente ejemplo, se aplana una lista y, a continuación, se filtran los elementos. 

```
fields jsonParse(@message) as js 
| unnest js.accounts into account 
| filter account.type = "internal"
```

**Consulta de ejemplo**  
 En el siguiente ejemplo, se aplana una lista para su agregación. 

```
fields jsonParse(trimmedData) as accounts 
| unnest accounts into account 
| stats sum(account.droppedSpans) as n by account.accountId 
| sort n desc 
| limit 10
```

# lookup
<a name="CWL_QuerySyntax-Lookup"></a>

Se utiliza `lookup` para enriquecer los resultados de la consulta con datos de referencia de una tabla de consulta. Una tabla de consulta contiene datos CSV que subes a Amazon CloudWatch Logs. Cuando se ejecuta una consulta, el `lookup` comando compara un campo del registro de eventos con un campo de la tabla de consulta y agrega los campos de salida especificados a los resultados.

Utilice tablas de consulta para escenarios de enriquecimiento de datos, como mapear los detalles de un usuario IDs a otro, los códigos de producto a la información del producto o los códigos de error a las descripciones de los errores.

## Creación y administración de tablas de consulta
<a name="CWL_QuerySyntax-Lookup-tables"></a>

Antes de poder utilizar el `lookup` comando en una consulta, debe crear una tabla de consulta. Puede crear y gestionar tablas de búsqueda desde la CloudWatch consola o mediante la API de Amazon CloudWatch Logs.

**Para crear una tabla de consulta (consola)**  


1. Abra la CloudWatch consola en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Configuración** y, a continuación, elija la pestaña **Registros**.

1. Desplázate hasta **Tablas de búsqueda** y selecciona **Administrar**.

1. Seleccione **Crear tabla de consulta**.

1. Introduzca un nombre para la tabla de consulta. El nombre solo puede contener caracteres alfanuméricos, guiones y guiones bajos.

1. (Opcional) Introduzca una descripción.

1. Cargue un archivo CSV. El archivo debe incluir una fila de encabezado con los nombres de las columnas, utilizar la codificación UTF-8 y no superar los 10 MB.

1. (Opcional) Especifique una AWS KMS clave para cifrar los datos de la tabla.

1. Seleccione **Crear**.

Después de crear una tabla de consulta, puede verla en el editor de consultas de CloudWatch Logs Insights. Seleccione la pestaña **Tablas de búsqueda** para buscar las tablas disponibles y sus campos.

Para actualizar una tabla de consulta, selecciónela y elija **Acciones**, **Actualizar**. Cargue un nuevo archivo CSV para reemplazar todo el contenido existente. Para eliminar una tabla de consulta, selecciona **Acciones**, **Eliminar**.

**nota**  
Puede crear hasta 100 tablas de búsqueda por cuenta y por cuenta Región de AWS. Los archivos CSV pueden ocupar hasta 10 MB. También puedes gestionar las tablas de búsqueda mediante la API de Amazon CloudWatch Logs. Para obtener más información, consulta [CreateLookupTable](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLookupTable.html)la *referencia de la API CloudWatch de Amazon Logs*.

**nota**  
Si la tabla de consulta está cifrada con una clave de KMS, la persona que llama debe tener el `kms:Decrypt` permiso sobre la clave (la clave de KMS utilizada para cifrar la tabla de consulta) para utilizar la `StartQuery` API con una consulta que haga referencia a esa tabla de consulta. Para obtener más información, consulte [Cifre las tablas de búsqueda en CloudWatch los registros mediante AWS Key Management Service](encrypt-lookup-tables-kms.md).

## Sintaxis de consulta para la búsqueda
<a name="CWL_QuerySyntax-Lookup-syntax"></a>

**Estructura de comandos**  
A continuación se muestra el formato de este comando.

```
lookup table lookup-field as log-field [,...] output-mode output-field[,...]
```

El comando utiliza los siguientes argumentos:
+ `table`— El nombre de la tabla de consulta que se va a utilizar.
+ `lookup-field`— El campo de la tabla de consulta con el que se va a comparar.
+ `log-field`— El campo del registro de eventos que debe coincidir. La coincidencia es exacta y distingue mayúsculas de minúsculas.
+ `output-mode`— Especifique si `OUTPUT` desea añadir los campos de salida a los resultados. Si ya existe un campo con el mismo nombre en el registro de eventos, se sobrescribe.
+ `output-field`— Uno o más campos de la tabla de consulta para añadirlos a los resultados.

**Ejemplo: enriquece los eventos del registro con los detalles del usuario**  
Supongamos que tiene un grupo de registros con eventos que contienen un `id` campo y una tabla de consulta `user_data` con las columnas `id``name`,`email`, y`department`. La siguiente consulta enriquece cada evento de registro con el nombre, el correo electrónico y el departamento del usuario de la tabla de búsqueda.

```
fields action, status, name, email, department
| lookup user_data id OUTPUT name, email, department
```

**Ejemplo: utilice la búsqueda con agregación**  
Puede utilizar los campos de salida de la búsqueda con funciones de agregación. La siguiente consulta enriquece los eventos del registro con los detalles del usuario y, a continuación, cuenta los eventos agrupados por dirección de correo electrónico.

```
fields user_id, action, username, email, department
| lookup user_data user_id OUTPUT username, email, department
| stats count(*) by email
```

**Ejemplo: utilice la búsqueda con un filtro**  
Puede filtrar los resultados en función de los campos devueltos por la búsqueda. La siguiente consulta enriquece el registro de eventos y, a continuación, filtra para mostrar solo los eventos de un departamento específico.

```
fields user_id, action
| lookup user_data user_id OUTPUT username, email, department
| filter department = "Engineering"
```

# Funciones booleanas, de comparación, numéricas, de fecha y hora y otras
<a name="CWL_QuerySyntax-operations-functions"></a>

 CloudWatch Logs Insights admite muchas otras operaciones y funciones en las consultas, como se explica en las siguientes secciones. 

**Topics**
+ [Operadores aritméticos](#CWL_QuerySyntax-operations-arithmetic)
+ [Operadores booleanos](#CWL_QuerySyntax-operations-Boolean)
+ [Operadores de comparación](#CWL_QuerySyntax-operations-comparison)
+ [Operadores numéricos](#CWL_QuerySyntax-operations-numeric)
+ [Tipos de estructura](#CWL_QuerySyntax-structure-types)
+ [Funciones DateTime](#CWL_QuerySyntax-datetime)
+ [Funciones generales](#CWL_QuerySyntax-general-functions)
+ [Funciones JSON](#CWL_QuerySyntax-json-functions)
+ [Funciones de cadena de dirección IP](#CWL_QuerySyntax-IPaddress-functions)
+ [Funciones de cadena](#CWL_QuerySyntax-string-functions)

## Operadores aritméticos
<a name="CWL_QuerySyntax-operations-arithmetic"></a>

 Los operadores aritméticos aceptan tipos de datos numéricos como argumentos y devuelven resultados numéricos. Utilice operadores aritméticos en los comandos `filter` y `fields` y como argumentos para otras funciones. 


| Operación | Description (Descripción) | 
| --- | --- | 
|  `a + b` |  Suma  | 
|  `a - b` |  Resta  | 
|  `a * b` |  Multiplicación  | 
|  `a / b` |  División  | 
|  `a ^ b` |   Potencia (`2 ^ 3` devuelve `8`)   | 
|  `a % b` |   Resto o módulo (`10 % 3` devuelve `1`)   | 

## Operadores booleanos
<a name="CWL_QuerySyntax-operations-Boolean"></a>

 Utilice los operadores booleanos `and`, `or` y `not`. 

**nota**  
 Utilice operadores booleanos solo en funciones que devuelvan el valor **TRUE** o **FALSE**. 

## Operadores de comparación
<a name="CWL_QuerySyntax-operations-comparison"></a>

 Los operadores de comparación aceptan todos los tipos de datos como argumentos y devuelven un resultado booleano. Utilice operadores de comparación en el comando `filter` y como argumentos para otras funciones. 


| Operador | Description (Descripción) | 
| --- | --- | 
|   `=`   |   Igualdad   | 
|   `!=`   |   Desigualdad   | 
|   `<`   |   Menor que   | 
|  `>` |   Mayor que   | 
|  `<=` |   Menor o igual que   | 
|   `>=`   |   Mayor o igual que   | 

## Operadores numéricos
<a name="CWL_QuerySyntax-operations-numeric"></a>

 Las operaciones numéricas aceptan tipos de datos numéricos como argumentos y devuelven resultados numéricos. Utilice operaciones numéricas en los comandos `filter` y `fields` y como argumentos para otras funciones. 


| Operación | Tipo de resultado | Description (Descripción) | 
| --- | --- | --- | 
|   `abs(a: number)`   |   número   |   Valor absoluto   | 
|   `ceil(a: number)`   |   número   |   Redondeo a valor máximo (menor número entero que es mayor que el valor de `a`).   | 
|   `floor(a: number)`   |  número |   Redondeo a valor mínimo (mayor número entero que es menor que el valor de `a`).   | 
|   `greatest(a: number, ...numbers: number[])`   |   número   |   Devuelve el valor más alto   | 
|   `least(a: number, ...numbers: number[])`   |  número |   Devuelve el valor más bajo   | 
|   `log(a: number)`   |   número   |   Registro natural   | 
|   `sqrt(a: number)`   |   número   |   Raíz cuadrada   | 

## Tipos de estructura
<a name="CWL_QuerySyntax-structure-types"></a>

 Un mapa o una lista es un tipo de estructura de CloudWatch Logs Insights que permite acceder a los atributos de las consultas y utilizarlos. 

**Ejemplo: obtención de un mapa o una lista**  
 Se usa `jsonParse` para analizar un campo que es una cadena json y convertirlo en un mapa o una lista. 

```
fields jsonParse(@message) as json_message
```

**Ejemplo: acceso a los atributos**  
 Utilice el operador de acceso por puntos (map.attribute) para acceder a los elementos de un mapa. Si un atributo de un mapa contiene caracteres especiales, utilice acentos graves para incluir el nombre del atributo (map.attributes.`special.char`). 

```
fields jsonParse(@message) as json_message
| stats count() by json_message.status_code
```

 Utilice el operador de acceso entre corchetes (list[index]) para recuperar un elemento en una posición específica de la lista. 

```
fields jsonParse(@message) as json_message
| filter json_message.users[1].action = "PutData"
```

 Coloque los caracteres especiales entre acentos graves (``) cuando haya caracteres especiales en el nombre de la clave. 

```
fields jsonParse(@message) as json_message
| filter json_message.`user.id` = "123"
```

**Ejemplo: resultados vacíos**  
 Los mapas y las listas se consideran nulos para las funciones de cadena, número, y fecha y hora. 

```
fields jsonParse(@message) as json_message
| display toupper(json_message)
```

 La comparación del mapa y la lista con cualquier otro campo da como resultado `false`. 

**nota**  
 No se admite el uso de mapas y listas en `dedup`, `pattern`,`sort` y `stats`. 

## Funciones DateTime
<a name="CWL_QuerySyntax-datetime"></a>

 **Funciones DateTime** 

 Utilice funciones datetime en los comandos `fields` y `filter` y como argumentos para otras funciones. Utilice estas funciones para crear buckets de hora para consultas con funciones de agregación. Utilice períodos de tiempo que tengan un número y uno de los siguientes valores:
+ `ms` para milisegundos 
+ `s` para segundos 
+ `m` para minutos 
+ `h` para horas 

 Por ejemplo, `10m` es 10 minutos y `1h` es 1 hora. 

**nota**  
Utilice la unidad de tiempo más adecuada para su función de fecha y hora. CloudWatch Los registros limitan la solicitud en función de la unidad de tiempo que elija. Por ejemplo, pone un límite de 60 como valor máximo para cualquier solicitud que utilice `s`. Por lo tanto, si lo especificas`bin(300s)`, CloudWatch Logs en realidad lo implementa como 60 segundos, ya que 60 es el número de segundos en un minuto, por lo que CloudWatch Logs no utilizará un número superior a 60`s`. Para crear un bucket de 5 minutos, utilice `bin(5m)` en su lugar.  
El límite de `ms` es 1000, el límite de `s` y `m` es 60 y el límite de `h` es 24.

En la siguiente tabla, se incluye una lista de las distintas funciones datetime que se pueden usar en comandos de consulta. La tabla enumera el tipo de resultado de cada función y contiene una descripción de cada función. 

**sugerencia**  
 Al crear un comando de consulta, puede utilizar el selector de intervalos de tiempo para seleccionar un periodo de tiempo que desea consultar. Por ejemplo, puede establecer un periodo entre intervalos de 5 a 30 minutos; intervalos de 1, 3 y 12 horas; o un marco temporal personalizado. También puede establecer periodos de tiempo entre fechas específicas. 


| Función | Tipo de resultado | Description (Descripción) | 
| --- | --- | --- | 
|  `bin(period: Period)` |  Timestamp |  Redondea el valor de `@timestamp` según el periodo de tiempo indicado y, a continuación, trunca. Por ejemplo, `bin(5m)` redondea el valor de `@timestamp` a los 5 minutos más cercanos. Puede usarlo para agrupar varias entradas de registro en una consulta. En el siguiente ejemplo, se devuelve el número de excepciones por hora: <pre>filter @message like /Exception/ <br />    | stats count(*) as exceptionCount by bin(1h)<br />    | sort exceptionCount desc</pre> La función `bin` admite las siguientes unidades de tiempo y abreviaturas. Para todas las unidades y abreviaturas que incluyan más de un carácter, se admite agregar s para pluralizar. Así que tanto `hr` como `hrs` funcionan para especificar las horas. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-operations-functions.html)  | 
|  `datefloor(timestamp: Timestamp, period: Period)` |  Timestamp |  Trunca la marca temporal según el periodo indicado. Por ejemplo, `datefloor(@timestamp, 1h)` trunca todos los valores de `@timestamp` en la parte inferior de la hora.  | 
|  `dateceil(timestamp: Timestamp, period: Period)` |  Timestamp |  Redondea hacia arriba la marca temporal según el periodo indicado y, a continuación, trunca. Por ejemplo, `dateceil(@timestamp, 1h)` trunca todos los valores de `@timestamp` en la parte superior de la hora.  | 
|  `fromMillis(fieldName: number)` |  Timestamp |  Interpreta el campo de entrada como el número de milisegundos desde la fecha de inicio de Unix y lo convierte en una marca de tiempo.  | 
|  `toMillis(fieldName: Timestamp)` |  número |  Convierte la marca de tiempo que se encontró en el campo con nombre asignado en un número que representa los milisegundos desde la fecha de inicio de Unix. Por ejemplo, `toMillis(@timestamp)` convierte la marca temporal `2022-01-14T13:18:031.000-08:00` a `1642195111000`.  | 
|  `now()`  |  número  |  Devuelve la hora en que se inició el procesamiento de la consulta, en segundos por época. Esta función no toma argumentos. Puede usarlo para filtrar los resultados de la consulta según la hora actual. Por ejemplo, la siguiente consulta devuelve todos los errores 4xx de las últimas dos horas: <pre>parse @message "Status Code: *;" as statusCode\n <br />| filter statusCode >= 400 and statusCode <= 499  \n <br />| filter toMillis(@timestamp) >= (now() * 1000 - 7200000)</pre> El ejemplo siguiente devuelve todas las entradas de registro de las últimas cinco horas que contienen la palabra `error` o `failure` <pre>fields @timestamp, @message <br />| filter @message like /(?i)(error|failure)/ <br />| filter toMillis(@timestamp) >= (now() * 1000 - 18000000)</pre>  | 

**nota**  
 Actualmente, CloudWatch Logs Insights no admite el filtrado de registros con marcas de tiempo legibles por humanos. 

## Funciones generales
<a name="CWL_QuerySyntax-general-functions"></a>

 **Funciones generales** 

 Utilice funciones generales en los comandos `fields` y `filter` y como argumentos para otras funciones. 


| Función | Tipo de resultado | Description (Descripción) | 
| --- | --- | --- | 
|   `ispresent(fieldName: LogField)`   |   Booleano   |   Devuelve `true` si el campo existe   | 
|   `coalesce(fieldName: LogField, ...fieldNames: LogField[])`   |   LogField   |   Devuelve el primer valor no nulo de la lista   | 

## Funciones JSON
<a name="CWL_QuerySyntax-json-functions"></a>

 **Funciones JSON** 

 Utilice funciones JSON en los comandos `fields` y `filter` y como argumentos para otras funciones. 


| Función | Tipo de resultado | Description (Descripción) | 
| --- | --- | --- | 
|   `jsonParse(fieldName: string)`   |   Mapa \$1 Lista \$1 Vacío   |   Devuelve un mapa o una lista cuando la entrada es una representación en cadena de un objeto JSON o una matriz JSON. Devuelve un valor vacío si la entrada no es una de las representaciones.   | 
|   `jsonStringify(fieldName: Map \| List)`   |   Cadena   |   Devuelve una cadena JSON de un mapa o de una lista de datos.   | 

## Funciones de cadena de dirección IP
<a name="CWL_QuerySyntax-IPaddress-functions"></a>

 **Funciones de cadena de dirección IP** 

 Utilice funciones de cadena de dirección IP en los comandos `filter` y `fields` y como argumentos para otras funciones. 


| Función | Tipo de resultado | Description (Descripción) | 
| --- | --- | --- | 
|  `isValidIp(fieldName: string)` |  booleano |  Devuelve `true` si el campo es una IPv6 dirección IPv4 OR válida.  | 
|  `isValidIpV4(fieldName: string)` |  booleano |  Devuelve `true` si el campo es una IPv4 dirección válida.  | 
|  `isValidIpV6(fieldName: string)` |  booleano |  Devuelve `true` si el campo es una IPv6 dirección válida.  | 
|  `isIpInSubnet(fieldName: string, subnet: string)` |  booleano |  Devuelve `true` si el campo es una IPv6 dirección IPv4 o dirección válida dentro de la subred v4 o v6 especificada. Al especificar la subred, utilice la notación CIDR como `192.0.2.0/24` o `2001:db8::/32`, donde `192.0.2.0` o `2001:db8::` es el inicio del bloque de CIDR.  | 
|  `isIpv4InSubnet(fieldName: string, subnet: string)` |  booleano |  Devuelve `true` si el campo es una IPv4 dirección válida dentro de la subred v4 especificada. Al especificar la subred, utilice la notación CIDR como `192.0.2.0/24`, donde `192.0.2.0` es el inicio del bloque de CIDR.  | 
|  `isIpv6InSubnet(fieldName: string, subnet: string)` |  booleano |  Devuelve `true` si el campo es una IPv6 dirección válida dentro de la subred v6 especificada. Al especificar la subred, utilice la notación CIDR como `2001:db8::/32`, donde `2001:db8::` es el inicio del bloque de CIDR.  | 

## Funciones de cadena
<a name="CWL_QuerySyntax-string-functions"></a>

 **Funciones de cadena** 

 Utilice funciones de cadena en los comandos `fields` y `filter` y como argumentos para otras funciones. 


| Función | Tipo de resultado | Description (Descripción) | 
| --- | --- | --- | 
|  `isempty(fieldName: string)` |  Número |  Devuelve `1` si el campo no se encuentra o es una cadena vacía.  | 
|  `isblank(fieldName: string)` |  Número |  Devuelve `1` si el campo no se encuentra, es una cadena vacía o solo contiene espacio en blanco.  | 
|  `concat(str: string, ...strings: string[])` |  cadena |  Concatena las cadenas.  | 
|  `ltrim(str: string)` `ltrim(str: string, trimChars: string)` |  cadena |  Si la función no tiene un segundo argumento de cadena, elimina los espacios en blanco de la izquierda de la cadena. Si la función tiene un segundo argumento de cadena, no elimina espacios en blanco. En su lugar, elimina los caracteres de `trimChars` desde la izquierda de `str`. Por ejemplo, `ltrim("xyZxyfooxyZ","xyZ")` devuelve `"fooxyZ"`.  | 
|  `rtrim(str: string)` `rtrim(str: string, trimChars: string)` |  cadena |  Si la función tiene un segundo argumento de cadena, elimina los espacios en blanco de la derecha de la cadena. Si la función tiene un segundo argumento de cadena, no elimina espacios en blanco. En su lugar, elimina los caracteres de `trimChars` desde la derecha de `str`. Por ejemplo, `rtrim("xyZfooxyxyZ","xyZ")` devuelve `"xyZfoo"`.  | 
|  `trim(str: string)` `trim(str: string, trimChars: string)` |  cadena |  Si la función no tiene un segundo argumento, elimina espacios en blanco de ambos extremos de la cadena. Si la función tiene un segundo argumento de cadena, no elimina espacios en blanco. En su lugar, elimina los caracteres de `trimChars` desde ambos lados de `str`. Por ejemplo, `trim("xyZxyfooxyxyZ","xyZ")` devuelve `"foo"`.  | 
|  `strlen(str: string)` |  número |  Devuelve la longitud de la cadena puntos de código Unicode.  | 
|  `toupper(str: string)` |  cadena |  Convierte la cadena en mayúsculas.  | 
|  `tolower(str: string)` |  cadena |  Convierte la cadena de caracteres en minúsculas.  | 
|  `substr(str: string, startIndex: number)` `substr(str: string, startIndex: number, length: number)` |  cadena |  Devuelve una subcadena del índice especificado por el argumento numérico al final de la cadena. Si la función tiene un segundo argumento numérico, contiene la longitud de la subcadena que debe recuperarse. Por ejemplo, `substr("xyZfooxyZ",3, 3)` devuelve `"foo"`.  | 
|  `replace(fieldName: string, searchValue: string, replaceValue: string)` |  cadena |  Sustituye todas las instancias de `searchValue` en `fieldName: string` por `replaceValue`. Por ejemplo, la función `replace(logGroup,"smoke_test","Smoke")` busca eventos de registro en los que el campo `logGroup` contiene el valor de cadena `smoke_test` y reemplaza el valor por la cadena `Smoke`.  | 
|  `strcontains(str: string, searchValue: string)` |  número |  Devuelve 1 si `str` contiene `searchValue` y 0 en los demás casos.  | 

# Campos que contienen caracteres especiales
<a name="CWL_QuerySyntax-Guidelines"></a>

Si un campo contiene caracteres no alfanuméricos distintos al símbolo `@` o al punto (`.`), debe rodearlo con caracteres de comillas invertidas (```). Por ejemplo, el campo de registro `foo-bar` debe aparecer entre acentos graves (``foo-bar``), porque contiene un carácter no alfanumérico, el guion (`-`).

# Uso de alias y comentarios en las consultas
<a name="CWL_QuerySyntax-alias"></a>

 Cree consultas que contengan alias. Utilice alias para cambiar el nombre de los campos de registro o al extraer valores en campos. Utilice la palabra clave `as` para asignar un alias a un resultado o campo de registro. Puede utilizar más de un alias en una consulta. Puede utilizar alias en los siguientes comandos: 
+  `fields` 
+  `parse` 
+  `sort` 
+  ` stats ` 

 En los siguientes ejemplos, se muestra cómo crear consultas que contienen alias. 

 **Ejemplo** 

 La consulta contiene un alias en el comando `fields`. 

```
fields @timestamp, @message, accountId as ID
| sort @timestamp desc
| limit 20
```

 La consulta devuelve los valores de los campos `@timestamp`, `@message` y `accountId`. Los resultados se muestran en orden descendente y su número se limita a 20. Los valores de `accountId` aparecen bajo el alias `ID`. 

 **Ejemplo** 

 La consulta contiene alias en los comandos `sort` y `stats`. 

```
stats count(*) by duration as time 
| sort time desc
```

 La consulta cuenta el número de veces que el campo `duration` aparece en el grupo de registro y muestra los resultados en orden descendente. Los valores de `duration` aparecen bajo el alias `time`. 

## Uso de comentarios
<a name="CWL_QuerySyntax-comments"></a>

 CloudWatch Logs Insights admite comentarios en las consultas. Utilice el carácter de la almohadilla (**\$1**) para desactivar los comentarios. Puede utilizar comentarios para que haga caso omiso de determinadas líneas en consultas o consultas de documentos. 

 **Ejemplo: consulta** 

 Cuando se ejecuta la siguiente consulta, se hace caso omiso de la segunda línea. 

```
fields @timestamp, @message, accountId
# | filter accountId not like "7983124201998"
| sort @timestamp desc
| limit 20
```