Lenguaje de consulta estructurada (SQL) de OpenSearch Service. - Amazon CloudWatch Logs

Lenguaje de consulta estructurada (SQL) de OpenSearch Service.

Esta sección contiene una introducción básica a la consulta de registros de CloudWatch mediante OpenSearch SQL. Ofrece una opción que es conocida si se está acostumbrado a trabajar con bases de datos relacionales. OpenSearch SQL ofrece un subconjunto de funciones de SQL, lo que lo convierte en una buena opción para realizar consultas ad hoc y tareas de análisis de datos. Con OpenSearch SQL, puede usar comandos como SELECT, FROM, WHERE, GROUP BY, HAVING y varios otros comandos y funciones de SQL disponibles. Se puede ejecutar JOIN entre grupos de registros, correlacionar datos entre grupos de registros mediante subconsultas y utilizar el amplio conjunto de funciones JSON, matemáticas, de cadena, condicionales y otras funciones de SQL para realizar análisis eficaces de los datos de registro y de seguridad.

Se puede usar OpenSearch SQL solo para consultas de grupos de registros de la clase de registro estándar.

nota

En la siguiente tabla se enumeran los comandos y funciones de SQL compatibles con Registros de CloudWatch. Para obtener información sobre todos los comandos de OpenSearch SQL, incluida la sintaxis, consulte Comandos de SQL compatibles en la Guía para desarrolladores de OpenSearch Service.

Para obtener información sobre otros lenguajes de consulta que se pueden utilizar, consulte Información de registros de CloudWatch, OpenSearch Service PPL y Metrics Insights de CloudWatch.

Comandos SQL compatibles

nota

En la columna de comandos de la consulta de muestra, reemplace <logGroup> según sea necesario en función del origen de datos que esté consultando.

Comando o función Consulta de ejemplo Descripción

SELECT

SELECT `@message`, Operation FROM `LogGroupA`

Muestra los valores proyectados.

FROM

SELECT `@message`, Operation FROM `LogGroupA`

Cláusula integrada que especifica las tablas o las vistas de origen desde las que se van a recuperar los datos y admite varios tipos de uniones y subconsultas.

WHERE

SELECT * FROM `LogGroupA` WHERE Operation = 'x'

Filtra los eventos del registro en función de los criterios de campo proporcionados.

GROUP BY

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream`

Los grupos registran los eventos según la categoría y encuentran el promedio en función de las estadísticas.

HAVING

SELECT `@logStream`, COUNT(*) as log_count FROM `LogGroupA` GROUP BY `@logStream` HAVING log_count > 100

Filtra los resultados en función de las condiciones de agrupación.

ORDER BY

SELECT * FROM `LogGroupA` ORDER BY `@timestamp` DESC

Ordena los resultados en función de los campos de la cláusula ORDER BY. Puede especificar un orden tanto ascendente como descendente.

JOIN

SELECT A.`@message`, B.`@timestamp`FROM `LogGroupA` as A INNER JOIN `LogGroupB` as B ON A.`requestId` = B.`requestId`

Une los resultados de dos tablas en función de los campos en común. Debe especificarse Inner JOIN o Left Outer Join

LIMIT

Select * from `LogGroupA` limit 10

Limita los resultados de la consulta a las N primeras filas.

Funciones de cadena

SELECT upper(Operation) , lower(Operation), Operation FROM `LogGroupA`

Funciones integradas en SQL que pueden manipular y transformar cadenas y datos de texto en consultas SQL. Por ejemplo, convertir mayúsculas y minúsculas, combinar cadenas, extraer partes y limpiar el texto.

Funciones de datos

SELECT current_date() as today, date_add(current_date(), 30) as thirty_days_later, last_day(current_date()) as month_end FROM `LogGroupA`

Funciones integradas para administrar y transformar los datos de fecha y hora en las consultas de SQL. Por ejemplo, date_add, date_format, datediff y current_date.

Funciones condicionales

SELECT Operation, IF(Error > 0, 'High', 'Low') as error_category FROM `LogGroupA`;

Funciones integradas que realizan acciones en función de condiciones específicas o que evalúan las expresiones de forma condicional. Por ejemplo, CASE e IF.

Funciones de agregación

SELECT AVG(bytes) as bytesWritten FROM `LogGroupA`

Funciones integradas que realizan cálculos en varias filas para generar un único valor resumido. Por ejemplo, SUM, COUNT, AVG, MAX y MIN.

Funciones JSON

SELECT get_json_object(json_column, '$.name') as name FROM `LogGroupA`

Funciones integradas para analizar, extraer, modificar y consultar datos con formato JSON en consultas SQL (por ejemplo, from_json, to_json, get_json_object, json_tuple) que permiten manipular las estructuras JSON en los conjuntos de datos.

Funciones de matriz

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

Funciones integradas para trabajar con columnas de tipo matriz en consultas SQL, lo que permite realizar operaciones como acceder, modificar y analizar los datos de la matriz (p. ej., size, explode, array_contains).

Funciones de ventana

SELECT field1, field2, RANK() OVER (ORDER BY field2 DESC) as field2Rank FROM `LogGroupA`;

Funciones integradas que realizan cálculos en un conjunto específico de filas relacionadas con la fila (ventana) actual, lo que permite realizar operaciones como la clasificación, los totales acumulados y los promedios móviles. Por ejemplo, ROW_NUMBER, RANK, LAG y LEAD

Funciones de conversión

SELECT CAST('123' AS INT) as converted_number, CAST(123 AS STRING) as converted_string FROM `LogGroupA`

Funciones integradas para convertir datos de un tipo a otro en las consultas SQL, lo que permite la transformación de los tipos de datos y las conversiones de formato. Por ejemplo, CAST, TO_DATE, TO_TIMESTAMP y BINARY.

Funciones de predicados

SELECT scores, size(scores) as length, array_contains(scores, 90) as has_90 FROM `LogGroupA`;

Funciones integradas que evalúan las condiciones y devuelven valores booleanos (verdadero/falso) en función de criterios o patrones específicos. Por ejemplo, IN, LIKE, BETWEEN, IS NULL y EXISTS.

Selección de varios grupos de registros

SELECT lg1.field1, lg1.field2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'])` as lg1 where lg1.field3= "Success"

Permite la especificación de varios grupos de registros en una sentencia SELECT

SQL compatible para consultas de varios grupos de registros

Para respaldar el caso de uso de la consulta de varios grupos de registros en SQL, puede usar el comando logGroups. Con esta sintaxis, puede consultar varios grupos de registros al especificarlos en el comando FROM.

Sintaxis:

`logGroups( logGroupIdentifier: ['LogGroup1','LogGroup2', ...'LogGroupn'] )

En esta sintaxis, puede especificar hasta 50 grupos de registros en el parámetro logGroupIdentifier. Para hacer referencia a los grupos de registros de una cuenta de supervisión, utilice ARN en lugar de nombres LogGroup.

Consulta de ejemplo:

SELECT LG1.Column1, LG1.Column2 from `logGroups( logGroupIdentifier: ['LogGroup1', 'LogGroup2'] )` as LG1 WHERE LG1.Column1 = 'ABC'

La siguiente sintaxis que implica varios grupos de registros después de la sentencia FROM NO se admite al consultar Registros de CloudWatch.

SELECT Column1, Column2 FROM 'LogGroup1', 'LogGroup2', ...'LogGroupn' WHERE Column1 = 'ABC'

Restricciones

Las siguientes restricciones se aplican cuando se utiliza OpenSearch SQL para realizar consultas en Información de registros de CloudWatch.

  • Solo se puede usar una JOIN en una sentencia SELECT.

  • Solo se admite un nivel de subconsultas anidadas.

  • No se admiten consultas de varias sentencias separadas por punto y coma (;).

  • No se admiten consultas que contengan nombres de campo idénticos pero que solo difieran en mayúsculas y minúsculas (como field1 y FIELD1).

    Por ejemplo, no se admite la siguiente consulta.

    Select AWSAccountId, AwsAccountId from LogGroup

    Sin embargo, se admite la siguiente consulta porque el nombre del campo (@logStream) es idéntico en ambos grupos de registros:

    Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id
  • Las funciones y expresiones deben funcionar con los nombres de los campos y formar parte de una sentencia SELECT con un grupo de registros especificado en la cláusula FROM.

    Por ejemplo, no se admite esta consulta:

    SELECT cos(10) FROM LogGroup

    Se admite esta consulta:

    SELECT cos(field1) FROM LogGroup
  • Cuando utilice comandos SQL o PPL, encierre determinados campos entre comillas invertidas para consultarlos correctamente. Las comillas simples son necesarias para los campos con caracteres especiales (no alfabéticos ni numéricos). Por ejemplo, incluya @message, Operation.Export y Test::Field entre comillas simples. No es necesario incluir los campos con nombres exclusivamente alfabéticos entre comillas simples.

    Ejemplo de consulta con campos sencillos:

    SELECT SessionToken, Operation, StartTime FROM `LogGroup-A` LIMIT 1000;

    Consulta similar con comillas invertidas agregadas:

    SELECT `@SessionToken`, `@Operation`, `@StartTime` FROM `LogGroup-A` LIMIT 1000;