Comment résoudre les problèmes liés à Amazon Kinesis Agent sur une machine Linux ?

Date de la dernière mise à jour : 05/05/2022

J'essaie d'utiliser Amazon Kinesis Agent sur une machine Linux. Cependant, je rencontre un problème. Comment puis-je résoudre ce problème ?

Brève description

Cet article traite des points suivants :

  • Kinesis Agent envoie des événements en double.
  • Kinesis Agent provoque des limitations d'écriture et des échecs d'enregistrement sur mon flux Amazon Kinesis.
  • Kinesis Agent n'est pas en mesure de lire ou de diffuser les fichiers journaux.
  • Mon serveur Amazon Elastic Computing (Amazon EC2) ne cesse d'être défaillant en raison d'une taille de tas Java insuffisante.
  • Mon utilisation du processeur Amazon EC2 est très élevée.

Solution

Kinesis Agent envoie des événements en double

Si vous recevez des doublons chaque fois que vous envoyez des journaux depuis Kinesis Agent, il est probable que le modèle de correspondance ne soit pas correctement qualifié lors d'une rotation de fichiers. Chaque fois que vous envoyez un journal, Kinesis Agent vérifie l'horodatage LatestUpdateTimeStamp de chaque fichier qui correspond au modèle de fichier. Par défaut, Kinesis Agent choisit le fichier mis à jour le plus récemment, identifiant un fichier actif qui correspond au modèle de rotation. Si plusieurs fichiers sont mis à jour en même temps, Kinesis Agent ne peut pas déterminer le fichier actif à suivre. Par conséquent, Kinesis Agent commence à suivre les fichiers mis à jour dès le début, ce qui entraîne plusieurs doublons.

Pour éviter ce problème, créez des flux de fichiers différents pour chaque fichier individuel, en veillant à ce que votre modèle de fichier suive les rotations.

Remarque : Si vous effectuez le suivi d'une rotation, il est recommandé d'utiliser les paramètres de rotation du journal create ou rename, au lieu de copytruncate.

Par exemple, vous pouvez utiliser un flux de fichiers similaire à celui-ci :

"flows": [
        {
            "filePattern": "/tmp/app1.log*",
            "kinesisStream": "yourkinesisstream1"
        },
        {
            "filePattern": "/tmp/app2.log*",
            "kinesisStream": "yourkinesisstream2"
        }
    ]

Kinesis Agent essaie également de relancer tous les enregistrements qu'il ne parvient pas à renvoyer en cas de problèmes réseau intermittents. Si Kinesis Agent ne reçoit pas d'accusé de réception côté serveur, il réessaie en créant des doublons. Dans cet exemple, l'application en aval doit être dédupliquée.

Des doublons peuvent également se produire lorsque le fichier de point de contrôle est tempéré ou supprimé. Si un fichier de point de contrôle est stocké dans /var/run/aws-kinesis-agent, il est possible que le fichier soit nettoyé lors d'une réinstallation ou d'un redémarrage de l'instance. Lorsque vous exécutez à nouveau Kinesis Agent, l'application échoue dès que le fichier est lu, ce qui entraîne des doublons. Par conséquent, conservez le point de contrôle dans le répertoire principal de l'agent et mettez à jour la configuration de Kinesis Agent avec un nouvel emplacement.

Par exemple :

"checkpointFile": "/aws-kinesis-agent-checkpoints/checkpoints"

Kinesis Agent provoque des limitations d'écriture et des échecs d'enregistrement sur mon flux de données Amazon Kinesis

Par défaut, Kinesis Agent essaie d'envoyer les fichiers journaux le plus rapidement possible, dépassant ainsi les seuils de débit de Kinesis. Toutefois, les enregistrements ayant échoué sont mis en file d'attente et sont continuellement réessayés pour éviter toute perte de données. Lorsque la file d'attente est pleine, Kinesis Agent arrête de suivre le fichier, ce qui peut entraîner un retard de l'application.

Par exemple, si la file d'attente est pleine, votre journal ressemble à ceci :

com.amazon.kinesis.streaming.agent.Agent [WARN] Agent: Tailing is 745.005859 MB (781195567 bytes) behind.

Remarque : La taille de la file d'attente est déterminée par le paramètre PublishQueueCapacity (avec la valeur par défaut définie sur « 100 »).

Pour examiner les échecs d'enregistrement ou les problèmes de performances de votre flux de données Kinesis, essayez les solutions suivantes :

  • Surveillez la métrique RecordSendErrors dans Amazon CloudWatch.
  • Consultez vos journaux Kinesis Agent pour vérifier s'il y a eu des retards. L'entrée ProvisionedThroughputExceededException n'est visible que sous le niveau de journal DEBUG. Pendant ce temps, la vitesse d'envoi des enregistrements de Kinesis Agent peut être plus lente si la majeure partie du processeur est utilisée pour analyser et transformer les données.
  • Si vous constatez que Kinesis Agent prend du retard, pensez à augmenter votre flux de diffusion Amazon Kinesis.

Kinesis Agent ne peut pas lire ou diffuser les fichiers journaux

Assurez-vous que l'instance Amazon EC2 sur laquelle votre agent Kinesis s'exécute dispose des autorisations appropriées pour accéder à votre flux de diffusion Kinesis de destination. Si Kinesis Agent ne parvient pas à lire le fichier journal, vérifiez si Kinesis Agent dispose des autorisations de lecture pour ce fichier. Pour tous les fichiers correspondant à ce modèle, l'autorisation de lecture doit être accordée à aws-kinesis-agent-user. Pour le répertoire contenant les fichiers, les autorisations de lecture et d'exécution doivent également être accordées à aws-kinesis-agent-user. Sinon, vous obtenez une erreur Access Denied ou une Java Runtime Exception.

Mon serveur Amazon EC2 ne cesse d'être défaillant en raison d'une taille de tas Java insuffisante

Si votre serveur Amazon EC2 ne cesse d'être défaillant en raison d'une taille de tas Java insuffisante, augmentez la taille de tas allouée à Amazon Kinesis Agent. Pour configurer la quantité de mémoire disponible pour Kinesis Agent, mettez à jour le fichier « start-aws-kinesis-agent ». Augmentez les valeurs définies pour les paramètres suivants :

  • JAVA_START_HEAP
  • JAVA_MAX_HEAP

Remarque : Sous Linux, le chemin d'accès au fichier pour « start-aws-kinesis-agent » est « /usr/bin/start-aws-kinesis-agent ».

Mon utilisation du processeur Amazon EC2 est très élevée

L'utilisation du processeur peut augmenter si Kinesis Agent effectue une correspondance de modèle d'expression régulière sous-optimisée et une transformation des journaux. Si vous avez déjà configuré Kinesis Agent, essayez de supprimer toutes les correspondances de modèle d'expression régulière (regex) et les transformations. Ensuite, vérifiez si vous rencontrez toujours des problèmes de processeur.

Si vous rencontrez toujours des problèmes de processeur, pensez à régler les threads et les enregistrements mis en mémoire tampon. Vous pouvez également mettre à jour certains paramètres par défaut dans le fichier de paramètres de configuration /etc/aws-kinesis/agent.json. Vous pouvez également réduire plusieurs paramètres dans le fichier de configuration de Kinesis Agent.

Voici les paramètres de configuration généraux que vous pouvez essayer de réduire :

  • sendingThreadsMaxQueueSize : taille de la file d'attente de travail du pool de threads pour l'envoi de données vers la destination. La valeur par défaut est 100.
  • maxSendingThreads : nombre de threads pour l'envoi de données vers la destination. La valeur minimale est 2. La valeur par défaut est 12 fois le nombre de cœurs de votre machine.
  • maxSendingThreadsPerCore : nombre de threads par cœur pour l'envoi de données vers la destination. La valeur par défaut est 12.
Voici les paramètres de configuration de débit que vous pouvez essayer de réduire :
  • publishQueueCapacity : nombre maximal de tampons d'enregistrements pouvant être mis en file d'attente avant d'être envoyés vers la destination. La valeur par défaut est 100.
  • minTimeBetweenFilePollsMillis : intervalle de temps pendant lequel le fichier suivi est interrogé et les nouvelles données commencent à être analysées. La valeur par défaut est 100.

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


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