OpenSearch Structured Query Language (SQL) - Amazon CloudWatch Logs

OpenSearch Structured Query Language (SQL)

Esta seção contém uma introdução básica à consulta do CloudWatch Logs usando a OpenSearch SQL. Ela fornece uma opção mais conhecida se você estiver acostumado a trabalhar com bancos de dados relacionais. A OpenSearch SQL oferece um subconjunto da funcionalidade SQL, tornando-a uma boa opção para realizar consultas ad hoc e tarefas de análise de dados. Com a OpenSearch SQL, você pode usar comandos como SELECT, FROM, WHERE, GROUP BY, HAVING e vários outros comandos e funções SQL. Você pode executar JOINs em grupos de logs, correlacionar dados entre grupos de logs usando sub-consultas e usar o amplo conjunto de funções JSON, de matemáticas, de strings, condicionais e outras funções SQL para realizar análises poderosas em dados de log e de segurança.

Você pode usar a OpenSearch SQL somente para consultas de grupos de logs na Classe de Log Padrão.

nota

A tabela a seguir lista os comandos e funções SQL compatíveis com o CloudWatch Logs. Para obter informações sobre todos os comandos da OpenSearch SQL, incluindo a sintaxe, consulte Comandos SQL compatíveis no Guia do desenvolvedor do OpenSearch Service.

Para obter informações sobre outras linguagens de consulta que você pode usar, consulte CloudWatch Logs Insights, OpenSearch Service PPL e CloudWatch Metrics Insights.

Comandos SQL compatíveis

nota

Na coluna de consulta de exemplo, substitua <logGroup> conforme necessário, dependendo da fonte de dados que você está consultando.

Comando ou função Consulta de exemplo Descrição

SELECT

SELECT `@message`, Operation FROM `LogGroupA`

Exibe os valores projetados.

FROM

SELECT `@message`, Operation FROM `LogGroupA`

Cláusula integrada que especifica a(s) tabela(s) ou visualização(ões) de origem a partir da(s) qual(is) recuperar dados, oferecendo suporte a vários tipos de junções e sub-consultas.

WHERE

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

Filtra eventos de logs com base nos critérios de campo fornecidos.

GROUP BY

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

Agrupa eventos de logs com base na categoria e encontra a média com base nas estatísticas.

HAVING

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

Filtra os resultados com base nas condições de agrupamento.

ORDER BY

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

Ordena os resultados com base nos campos da cláusula ORDER BY. É possível classificar em ordem crescente ou decrescente.

JOIN

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

Une os resultados de duas tabelas com base em campos comuns. Deve-se especificar Inner JOIN ou Left Outer Join

LIMIT

Select * from `LogGroupA` limit 10

Limita os resultados da consulta exibidos às primeiras N linhas.

Funções de string

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

Funções integradas na SQL que podem manipular e transformar dados de string e texto em consultas SQL. Por exemplo, converter maiúsculas e minúsculas, combinar strings, extrair partes e apagar texto.

Funções de data

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

Funções integradas para manipular e transformar dados de data e carimbo de data/hora em consultas SQL. Por exemplo: date_add, date_format, datediff e current_date.

Funções condicionais

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

Funções integradas que executam ações com base em condições especificadas ou que avaliam expressões condicionalmente. Por exemplo: CASE e IF.

Funções agregadas

SELECT AVG(bytes) as bytesWritten FROM `LogGroupA`

Funções integradas que realizam cálculos em várias linhas para produzir um único valor resumido. Por exemplo: SUM, COUNT, AVG, MAX e MIN.

Funções JSON

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

Funções integradas para analisar, extrair, modificar e consultar dados formatados em JSON em consultas SQL (por exemplo, from_json, to_json, get_json_object, json_tuple), permitindo a manipulação de estruturas JSON em conjuntos de dados.

Funções de array

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

Funções integradas para trabalhar com colunas do tipo array em consultas SQL, permitindo operações como acessar, modificar e analisar dados de matriz (por exemplo, size, explode, array_contains).

Funções de janela

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

Funções integradas que executam cálculos em um conjunto específico de linhas relacionadas à linha (janela) atual, permitindo operações como classificação, totais acumulados e médias móveis. Por exemplo: ROW_NUMBER, RANK, LAG e LEAD

Funções de conversão

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

Funções integradas para converter dados de um tipo para outro em consultas SQL, permitindo transformações de tipos de dados e conversões de formato. Por exemplo: CAST, TO_DATE, TO_TIMESTAMP e BINARY.

Funções de predicado

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

Funções integradas que avaliam condições e retornam valores booleanos (verdadeiro/falso) com base em critérios ou padrões especificados. Por exemplo: IN, LIKE, BETWEEN, IS NULL e EXISTS.

Selecione vários grupos de logs

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

Permite que você especifique vários grupos de logs em uma instrução SELECT

SQL compatível para consultas de vários grupos de logs

Para oferecer suporte ao caso de uso para consultar vários grupos de logs no SQL, você pode usar o comando logGroups. Usando essa sintaxe, é possível consultar vários grupos de logs especificando-os no comando FROM.

Sintaxe:

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

Nessa sintaxe, é possível especificar até 50 grupos de logs no parâmetro logGroupIdentifier. Para referenciar grupos de logs em uma conta de monitoramento, use ARNs em vez de nomes LogGroup.

Consulta de exemplo:

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

A sintaxe a seguir envolvendo vários grupos de logs após a declaração FROM NÃO é suportada ao consultar o CloudWatch Logs.

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

Restrições

As restrições a seguir se aplicam quando você usa a OpenSearch SQL para fazer consultas no CloudWatch Logs Insights.

  • É possível incluir somente um JOIN em uma instrução SELECT.

  • Somente um nível de sub-consultas aninhadas é suportado.

  • Não há suporte para várias consultas de instruções separadas por ponto e vírgula (;).

  • Não há suporte para consultas contendo nomes de campo idênticos, mas que diferem somente em maiúsculas e minúsculas (como campo1 e CAMPO1).

    Por exemplo, a consulta a seguir não é suportada:

    Select AWSAccountId, AwsAccountId from LogGroup

    No entanto, a consulta a seguir é compatível porque o nome do campo (@logStream) é idêntico nos dois grupos de logs:

    Select a.`@logStream`, b.`@logStream` from Table A INNER Join Table B on a.id = b.id
  • Funções e expressões devem operar em nomes de campo e fazer parte de uma instrução SELECT com um grupo de logs especificado na cláusula FROM.

    Por exemplo, esta consulta não é suportada:

    SELECT cos(10) FROM LogGroup

    Esta consulta é suportada:

    SELECT cos(field1) FROM LogGroup
  • Ao usar comandos SQL ou PPL, coloque certos campos entre crases para consultá-los com êxito. As crases são necessárias para campos com caracteres especiais (não alfabéticos e não numéricos). Por exemplo, coloque @message, Operation.Export e Test::Field entre crases. Você não precisa colocar entre crases os campos com nomes puramente alfabéticos.

    Exemplo de consulta com campos simples:

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

    Consulta semelhante com crases adicionadas:

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