Comment déterminer la limitation dans mes journaux CloudWatch Logs ?

Dernière mise à jour : 06/04/2022

J'ai reçu une erreur RequestLimitExceeded ou ThrottlingException lorsque je travaillais avec des journaux Amazon CloudWatch, et mon appel d'API a été limité. Comment puis-je empêcher la limitation de mes journaux CloudWatch ?

Brève description

Lorsque vous travaillez avec des journaux CloudWatch, vous pouvez dépasser la limite de débit de l'API. Lorsque cela se produit, vous recevez une erreur RequestLimitExceeded ou ThrottlingException, et votre appel d'API est limité. Vous devez identifier où et quand la limitation se produit afin de pouvoir résoudre ces erreurs et faire des demandes d'augmentation des limites de débit de manière réfléchie.

Solution

Limitation intermittente des journaux CloudWatch lors de l'accès aux journaux

Vous pouvez utiliser les appels d'API FilterLogEvents ou GetLogEvents pour répertorier vos événements de journaux ou vos flux de journaux. Ces appels d'API ont une limite stricte et ne sont pas éligibles à une augmentation des limites. Cela signifie que si vous utilisez l'API FilterLogEvents pour rechercher des événements de journaux à partir d'un groupe de journaux spécifié, le quaAPI par défaut a un quota par défaut de 5 transactions par seconde (TPS) par compte/région. Si vous atteignez cette limite, vous recevez l'erreur RateExceeded.

Utilisez ces bonnes pratiques pour éviter les erreurs de limitation dans ce cas d'utilisation :

Erreurs ThrottlingException lors de l'utilisation d'une application/d'un script pour récupérer les données dans le journal CloudWatch

Pour collecter les journaux CloudWatch, vous pouvez développer un collecteur de scripts. Ce script tente d'effectuer un appel d'API DescribeLogStream ou GetLogEvents pour extraire des données de différents flux de journaux ou de différentes périodes dans le même groupe de journaux. Les appels d'API tels que FilterLogEvents, GetLogEvents et DescribeLogStreams sont conçus pour une intervention humaine et non pour l'automatisation. Vous recevez donc une erreur et l'appel d'API est limité.

Utilisez ces bonnes pratiques pour éviter la limitation dans ce cas d'utilisation :

  • Utilisez le backoff exponentiel et les nouvelles tentatives lorsque vous effectuez un appel d'API. Pour plus d'informations, consultez les sections Backoff exponentiel et gigue et Nouvelles tentatives après erreur et backoff exponentiel dans AWS.
  • Distribuez vos appels d'API au fil du temps. Essayez de planifier des actions avec une certaine randomisation afin qu'elles soient réparties sur une période de temps.
  • Ajoutez des intervalles de repos entre les appels d'API consécutifs. Ajoutez un certain délai entre les appels d'API envoyés depuis le même script ou la même application. Si les appels d'API sont tous envoyés en succession rapide, des erreurs de débits sont plus susceptibles de se produire.
  • Dans certains cas, vous pouvez utiliser une solution SIEM telle que Splunk pour récupérer les journaux depuis CloudWatch. Les solutions SIEM sont utilisées pour collecter des données provenant de plusieurs systèmes et analyser ces données afin de détecter un comportement inhabituel. Vous pouvez rencontrer des limitations d'API lorsque vous utilisez le plugin Splunk. Pour éviter ce problème, créez un filtre d'abonnement aux journaux CloudWatch avec Amazon Kinesis Data Firehose et envoyez les données de journaux à Splunk. Pour plus d'informations, consultez la documentation de Splunk pour Configurer les entrées Kinesis pour le module complémentaire Splunk pour AWS (Langue Français non garanti).

Erreurs de limitation lors de l'intégration des appels d'API PutLogEvents avec la fonction Lambda

L'appel d'API PutLogEvents est utilisé pour charger les journaux dans un flux de journaux spécifié par lots de 1 Mo. Cette API a deux limites de débit :

  • 5 demandes par seconde par flux de journaux. Les demandes supplémentaires sont limitées. Ce quota ne peut pas être modifié.
  • 800 transactions par seconde, par compte et par région. Cela s'applique sauf pour les régions suivantes où le quota est de 1 500 transactions par seconde, par compte et par région : USA Est (Virginie du Nord), USA Ouest (Oregon) et Europe (Irlande). Vous pouvez demander une augmentation des quotas.

Pour plus d'informations à ce sujet et pour demander une augmentation des quotas, consultez la section Quotas CloudWatch Logs.

Pour écrire des journaux dans le flux de journaux spécifié, vous devez inclure le jeton de séquence dans la demande. Ce jeton de séquence a été extrait pour la dernière fois de la réponse à l'appel précédent. Dans certains cas, vous pouvez utiliser l'API DescribeLogStreams pour obtenir le prochain jeton de séquence pour le flux de journaux avant d'appeler PutLogEvent. L'API PutLogEvent a une limite beaucoup plus élevée que DescribeLogsStream, ce qui entraîne une limitation. Pour atténuer ce problème, utilisez l'API PutLogEvents pour obtenir la séquence au lieu de DescribeLogStreams. Vous recevez un code d'état 400 lorsque vous utilisez l'API PutLogEvents sans jeton de séquence, mais avec ce message d'erreur, vous obtenez le jeton de séquence suivant. Vous pouvez à nouveau utiliser ce jeton de séquence avec l'API PutLogEvents.

Suivez ces conseils pour éviter la limitation dans ce cas d'utilisation :

  • Essayez de combiner plusieurs événements de journaux dans le même appel d'API.
  • Répartissez les appels d'API sur un plus grand nombre de flux de journaux.
  • Appliquez la logique des nouvelles tentatives avec un backoff exponentiel et une gigue. Pour plus d'informations, consultez la section Gestion et surveillance de la limitation des API dans vos charges de travail.
  • Répartissez vos appels d'API uniformément dans le temps.

Gérer vos quotas de service CloudWatch Logs

AWS définit des quotas pour les services afin de protéger les performances et de garantir la disponibilité. CloudWatch dispose de quotas pour les métriques, les alarmes, les demandes d'API et les notifications d'alarme par e-mail. Suivez ces étapes pour visualiser vos quotas de service et définir des alarmes si vous atteignez le seuil :

  1. Connectez-vous à la console Quotas de service.
  2. Dans le panneau de navigation, choisissez Services AWS.
  3. Dans la liste des services AWS, recherchez Amazon CloudWatch Logs.
  4. Dans la liste Quotas de service, vous pouvez voir le nom du quota de service, la valeur appliquée (si elle est disponible), le quota AWS par défaut et si la valeur du quota est ajustable.
  5. Pour afficher plus d'informations sur un quota de service, comme sa description, choisissez le nom du quota.
  6. Une fois que vous avez choisi le nom du quota, vous pouvez voir plus d'informations sur ce quota. Par exemple, si vous choisissez la limite GetLogEvents dans les transactions par seconde, vous voyez :
    • Description
    • Code de quota
    • ARN de quota
    • Utilisation : %
    • Valeur du quota appliqué
    • Valeur du quota AWS par défaut
    • Ajustable : O/N
  7. Dans la section Alarmes Amazon CloudWatch, choisissez Créer une alarme, puis saisissez un seuil d'alarme et un nom d'alarme.

Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?