Exemples de requêtes - Amazon CloudWatch Logs

Exemples de requêtes

Cette section contient une liste de commandes de requête générales et utiles que vous pouvez exécuter dans la Console CloudWatch. Pour plus d'informations sur l'exécution d'une commande de requête, consultez Didacticiel : Exécution et modification d'un exemple de requête dans le Guide de l'utilisateur Amazon CloudWatch Logs.

Requêtes générales

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

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

Obtenez la liste du nombre d'exceptions par heure :

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

Obtenez la liste des événements de 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 fenêtre de capture.

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

Requêtes pour les journaux Route 53

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 awsRegion="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

Rechercher les entrées de journal dans lesquelles TLS 1.0 ou 1.1 a été utilisé

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

Rechercher le nombre d'appels par service qui ont utilisé les versions TLS 1.0 ou 1.1

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

Requêtes pour passerelle NAT

Si vous remarquez des coûts supérieurs à la normale dans votre facture AWS, vous pouvez utiliser CloudWatch Logs Insights pour trouver les meilleurs contributeurs. Pour plus d'informations sur les commandes de requête suivantes, consultez Comment puis-je trouver les meilleurs contributeurs au trafic via la passerelle NAT de mon VPC ? à la page d'assistance premium AWS.

Recherchez les instances qui envoient le plus de trafic via votre passerelle NAT.

Note

Dans les commandes de requête suivantes, remplacez « x.x.x.x » par l'adresse IP privée de votre passerelle NAT et remplacez « y.y » par les deux premiers octets de votre plage CIDR VPC.

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

Déterminez le trafic qui va vers et en provenance des instances de vos passerelles 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

Déterminez les destinations Internet avec lesquelles les instances de votre VPC communiquent le plus souvent pour les chargements et les téléchargements.

For uploads (Pour chargements)

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

Pour les téléchargements

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

Requêtes pour les journaux du serveur Apache

Vous pouvez utiliser CloudWatch Logs Insights pour interroger les journaux du serveur Apache. Pour plus d'informations sur les requêtes suivantes, consultez Simplification des journaux du serveur Apache avec CloudWatch Logs Insights dans le blog Cloud Operations & Migrations AWS.

Trouvez les champs les plus pertinents, afin de pouvoir consulter vos journaux d'accès et vérifier le trafic dans le chemin /admin de votre application.

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

Trouvez le nombre de requêtes GET uniques qui ont accédé à votre page principale avec le code d'état « 200 » (succès).

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

Recherchez le nombre de fois où votre service Apache a redémarré.

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

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èresloggingType et loggingTime, loggingMessage, filtre vers le bas pour enregistrer les événements qui contiennent des chaînes ERROR ou INFO, puis affiche uniquement les champs loggingType et loggingMessage 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