Exemples de requêtes - Amazon CloudWatch Logs

Exemples de requêtes

Cette section inclut des exemples de requêtes qui illustrent la puissance de CloudWatch Logs Insights.

Requêtes générales

Recherchez les 25 derniers événements du journal ajoutés.

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

Obtenez une liste du nombre d'exceptions par heure.

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

Obtenez une liste des événements du journal qui ne sont pas des exceptions.

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

Requêtes pour les journaux Lambda

Déterminez la quantité de mémoire sur-allouée.

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

Créez un rapport de latence.

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

Requêtes pour les journaux de flux Amazon VPC

Recherchez les 15 premiers transferts de paquets entre les hôtes :

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

Trouvez les 15 premiers transferts d'octets pour des hôtes sur un sous-réseau donné.

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

Recherchez les adresses IP qui utilisent UDP comme protocole de transfert de données.

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

Recherchez les adresses IP auxquelles les enregistrements de flux ont été ignorés durant la période de capture.

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

Requêtes pour les journaux Route

Recherchez la distribution d'enregistrements par heure par type de requête.

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

Recherchez les 10 premiers résolveurs DNS avec le plus grand nombre de demandes.

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

Recherchez le nombre d'enregistrements par domaine et sous-domaine où le serveur n'a pas pu terminer la demande DNS.

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

Requêtes pour les journaux CloudTrail

Recherchez le nombre d'entrées de journal pour chaque service, type d'événement et région AWS.

stats count(*) by eventSource, eventName, awsRegion

Recherchez les hôtes Amazon EC2 qui ont été démarrés ou arrêtés dans une région AWS donnée.

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

Recherchez les régions AWS, les noms d'utilisateur et les ARN des utilisateurs IAM nouvellement créés.

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

Recherchez le nombre d'enregistrements où une exception s'est produite lors de l'appel de l'API UpdateTrail.

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

Exemples de la commande d'analyse

Utilisez une expression glob pour extraire les champs éphémères @user, @method et @latency à partir du champ de journal @message et renvoyez la latence moyenne pour chaque combinaison unique de @method et @user.

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

Utilisez une expression régulière pour extraire les champs éphémères @user2, @method2 et @latency2 à partir du champ du journal @message et renvoyez la latence moyenne pour chaque combinaison unique de @method2 et @user2.

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

Extrait les champs éphémèresloggingTime et loggingType, loggingMessage, filtre vers le bas pour enregistrer les événements qui contiennent des chaînes ERROR ou INFO, puis affiche uniquement les champs loggingMessage et loggingType pour les événements qui contiennent une chaîne ERROR.

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