Consultas de exemplo - Amazon CloudWatch Logs

Consultas de exemplo

Esta seção contém uma lista de comandos de consulta gerais e úteis que você pode executar no console do CloudWatch. Para obter informações sobre como executar um comando de consulta, consulte Tutorial: executar e modificar um exemplo de consulta no Guia do usuário do Amazon CloudWatch Logs.

Para obter mais informações sobre a sintaxe das consultas, consulte Sintaxe de consulta da linguagem do CloudWatch Logs Insights.

Consultas gerais

Encontre os 25 eventos de log adicionados mais recentemente.

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

Obtenha uma lista do número de exceções por hora.

filter @message like /Exception/ | stats count(*) as exceptionCount by bin(1h) | sort exceptionCount desc

Obtenha uma lista de eventos de log que não sejam exceções.

fields @message | filter @message not like /Exception/

Obtenha o evento de log mais recente para cada valor exclusivo do campo server.

fields @timestamp, server, severity, message | sort @timestamp asc | dedup server

Obtenha o evento de log mais recente para cada valor exclusivo do campo server para cada tipo severity.

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

Consultas de logs do Lambda

Determine a quantidade de memória provisionada excessivamente.

filter @type = "REPORT" | stats max(@memorySize / 1000 / 1000) as provisonedMemoryMB, min(@maxMemoryUsed / 1000 / 1000) as smallestMemoryRequestMB, avg(@maxMemoryUsed / 1000 / 1000) as avgMemoryUsedMB, max(@maxMemoryUsed / 1000 / 1000) as maxMemoryUsedMB, provisonedMemoryMB - maxMemoryUsedMB as overProvisionedMB

Crie um relatório de latência.

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

Procure invocações de funções lentas e elimine solicitações duplicadas que podem surgir de novas tentativas ou código no lado do cliente. Nessa consulta, @duration está em milissegundos.

fields @timestamp, @requestId, @message, @logStream | filter @type = "REPORT" and @duration > 1000 | sort @timestamp desc | dedup @requestId | limit 20

Consultas para logs de fluxo da Amazon VPC

Encontre as 15 principais transferências de pacotes nos hosts:

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

Encontre as 15 principais transferências de bytes para hosts em uma determinada sub-rede.

filter isIpv4InSubnet(srcAddr, "192.0.2.0/24") | stats sum(bytes) as bytesTransferred by dstAddr | sort bytesTransferred desc | limit 15

Encontre os endereços IP que usam o UDP como um protocolo de transferência de dados.

filter protocol=17 | stats count(*) by srcAddr

Encontre os endereços IP nos quais os registros do fluxo foram ignorados durante a janela de captura.

filter logStatus="SKIPDATA" | stats count(*) by bin(1h) as t | sort t

Encontre um único registro para cada conexão para ajudar a solucionar problemas de conectividade com a rede.

fields @timestamp, srcAddr, dstAddr, srcPort, dstPort, protocol, bytes | filter logStream = 'vpc-flow-logs' and interfaceId = 'eni-0123456789abcdef0' | sort @timestamp desc | dedup srcAddr, dstAddr, srcPort, dstPort, protocol | limit 20

Consultas de logs do Route 53

Encontre a distribuição de registros por hora por tipo de consulta.

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

Encontre os 10 resolvedores DNS com o maior número de solicitações.

stats count(*) as numRequests by resolverIp | sort numRequests desc | limit 10

Encontre o número de registros por domínio e subdomínio em que o servidor deixou de concluir a solicitação DNS.

filter responseCode="SERVFAIL" | stats count(*) by queryName

Consultas de logs do CloudTrail

Encontre o número de entradas de log de cada serviço, tipo de evento e da região da AWS.

stats count(*) by eventSource, eventName, awsRegion

Encontre os hosts do Amazon EC2 que foram iniciados ou interrompidos em determinada região da AWS.

filter (eventName="StartInstances" or eventName="StopInstances") and awsRegion="us-east-2"

Encontre as regiões da AWS, os nomes de usuário e os ARNs de usuários do IAM recém-criados.

filter eventName="CreateUser" | fields awsRegion, requestParameters.userName, responseElements.user.arn

Encontre o número de registros em que ocorreu uma exceção durante a invocação da API UpdateTrail.

filter eventName="UpdateTrail" and ispresent(errorCode) | stats count(*) by errorCode, errorMessage

Encontre entradas de log em que TLS 1.0 ou 1.1 foi usado

filter tlsDetails.tlsVersion in [ "TLSv1", "TLSv1.1" ] | stats count(*) as numOutdatedTlsCalls by userIdentity.accountId, recipientAccountId, eventSource, eventName, awsRegion, tlsDetails.tlsVersion, tlsDetails.cipherSuite, userAgent | sort eventSource, eventName, awsRegion, tlsDetails.tlsVersion

Encontre o número de chamadas por serviço que usaram o TLS versões 1.0 ou 1.1

filter tlsDetails.tlsVersion in [ "TLSv1", "TLSv1.1" ] | stats count(*) as numOutdatedTlsCalls by eventSource | sort numOutdatedTlsCalls desc

Consultas de Amazon API Gateway

Encontre os 10 últimos erros 4XX

fields @timestamp, status, ip, path, httpMethod | filter status>=400 and status<=499 | sort @timestamp desc | limit 10

Identifique as 10 solicitações Amazon API Gateway de mais longa duração no seu grupo de logs de acesso do Amazon API Gateway

fields @timestamp, status, ip, path, httpMethod, responseLatency | sort responseLatency desc | limit 10

Retorne a lista dos caminhos de API mais populares no seu grupo de logs de acesso do Amazon API Gateway

stats count(*) as requestCount by path | sort requestCount desc | limit 10

Crie um relatório de latência de integração para seu grupo de logs de acesso do Amazon API Gateway

filter status=200 | stats avg(integrationLatency), max(integrationLatency), min(integrationLatency) by bin(1m)

Consultas para gateway NAT

Se você notar custos mais altos do que o normal em sua fatura da AWS, é possível usar o CloudWatch Logs Insights para encontrar os principais responsáveis. Para obter mais informações sobre os comandos de consulta a seguir, consulte Como posso encontrar os principais responsáveis pelo tráfego por meio do gateway NAT na minha VPC? na página de suporte premium da AWS.

nota

Nos comandos de consulta a seguir, substitua “x.x.x.x” pelo IP privado do gateway NAT e substitua “y.y” pelos dois primeiros octetos do intervalo CIDR da VPC.

Encontre as instâncias que estão enviando mais tráfego por meio de seu gateway NAT.

filter (dstAddr like 'x.x.x.x' and srcAddr like 'y.y.') | stats sum(bytes) as bytesTransferred by srcAddr, dstAddr | sort bytesTransferred desc | limit 10

Determine o tráfego de/para as instâncias em seus gateways NAT.

filter (dstAddr like 'x.x.x.x' and srcAddr like 'y.y.') or (srcAddr like 'xxx.xx.xx.xx' and dstAddr like 'y.y.') | stats sum(bytes) as bytesTransferred by srcAddr, dstAddr | sort bytesTransferred desc | limit 10

Determine os destinos da Internet com os quais as instâncias em sua VPC se comunicam com mais frequência para uploads e downloads.

Para uploads

filter (srcAddr like 'x.x.x.x' and dstAddr not like 'y.y.') | stats sum(bytes) as bytesTransferred by srcAddr, dstAddr | sort bytesTransferred desc | limit 10

Para downloads

filter (dstAddr like 'x.x.x.x' and srcAddr not like 'y.y.') | stats sum(bytes) as bytesTransferred by srcAddr, dstAddr | sort bytesTransferred desc | limit 10

Consultas para logs do servidor Apache

Você pode usar o CloudWatch Logs Insights para consultar logs do servidor Apache. Para obter mais informações sobre as consultas a seguir, consulte Simplifying Apache server logs with CloudWatch Logs Insights (Simplificar logs do servidor Apache com o CloudWatch Logs Insights) no Cloud Operations & Migrations Blog da AWS .

Encontre os campos mais relevantes para que você possa revisar seus logs de acesso e verificar se há tráfego no caminho /admin da aplicação.

fields @timestamp, remoteIP, request, status, filename| sort @timestamp desc | filter filename="/var/www/html/admin" | limit 20

Encontre o número de solicitações GET exclusivas que acessaram sua página principal com o código de status “200” (sucesso).

fields @timestamp, remoteIP, method, status | filter status="200" and referrer= http://34.250.27.141/ and method= "GET" | stats count_distinct(remoteIP) as UniqueVisits | limit 10

Encontre o número de vezes que o serviço Apache foi reiniciado.

fields @timestamp, function, process, message | filter message like "resuming normal operations" | sort @timestamp desc | limit 20

Consultas do Amazon EventBridge

Obtenha o número de eventos do EventBridge agrupados por tipo de detalhes de evento

fields @timestamp, @message | stats count(*) as numberOfEvents by `detail-type` | sort numberOfEvents desc

Exemplos do comando de análise

Use uma expressão de glob para extrair os campos @user, @method e @latency do campo de log @message e retornar a latência média para cada combinação exclusiva de @method e @user.

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

Use uma expressão regular para extrair os campos @user2, @method2 e @latency2 do campo de log @message e retornar a latência média para cada combinação exclusiva de @method2 e @user2.

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

Extrai os campos loggingTimeloggingType e loggingMessage, aplica o filtro para eventos de logs que contêm strings ERROR ou INFO e exibe apenas os campos loggingMessageloggingType para eventos que contêm uma string ERROR.

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