Données d'analyse bloquées dans la file d'attente de lettres mortes Qpidd

Vous consultez la documentation Apigee Edge.
Accédez à la documentation Apigee X.

Problème constaté

Les données d'analyse sont manquantes dans l'interface utilisateur Edge, car le serveur Qpidd ne transfère pas les messages d'analyse vers PostgreSQL. Dans Edge, le composant edge-qpid-server correspond au serveur Qpidd.

Qpidd gère deux files d'attente pour chaque groupe d'analyse :

  • ax-q-axgroup001-consumer-group-001

    Cette file d'attente contient les messages d'analyse envoyés par les processeurs et les routeurs de messages. Les messages sont extraits de cet emplacement par edge-qpid-server, qui les analyse et les insère dans PostgreSQL. Une fois les messages traités, ils sont supprimés de la file d'attente.

  • ax-q-axgroup001-consumer-group-001-dl

    Cette file d'attente est la file d'attente de lettres mortes. Il sert de destination aux messages que edge-qpid-server n'a pas pu traiter et qu'il ne souhaite donc plus recevoir. Cette valeur est généralement renseignée lorsque le nombre maximal de tentatives de distribution est dépassé ou si PostgreSQL a refusé l'insertion de nouvelles données en raison d'erreurs d'exécution.

Message d'erreur

La cause première peut être due à diverses erreurs d'exécution du composant edge-qpid-server. En règle générale, si edge-qpid-server reçoit une erreur d'exécution de PostgreSQL, il crée la file d'attente des messages non distribués si elle n'existe pas déjà, puis y envoie le message suivant :

yyyy-MM-dd HH:mm:ss,SSS ax-q-axgroup001-consumer-group-001-persistpool-thread-6 WARN c.a.a.m.MessageConsumer - MessageConsumer.process() : Sending message batch to the DLQ.

Causes possibles :

Cause Description Instructions de dépannage applicables
Messages bloqués dans la file d'attente de lettres mortes de qpidd edge-qpid-server n'a pas pu comprendre les messages qu'il a lus à partir du courtier Qpidd ou n'a pas pu conserver les messages dans PostgreSQL. Utilisateurs Edge Private Cloud

Étapes de diagnostic courantes

Exécutez la commande suivante pour afficher les statistiques de la file d'attente Qpidd :

qpid-stat -q

Le résultat renvoie l'ensemble des files d'attente enregistrées auprès du courtier. Si la file d'attente dont le nom se termine par "-dl" contient des messages, cela signifie que des messages sont bloqués dans la file d'attente de lettres mortes.

Queues
  queue                                     dur  autoDel  excl  msg   msgIn  msgOut  bytes  bytesIn  bytesOut   cons  bind
  ========================================================================================================================
  ax-q-axgroup-001-consumer-group-001       Y                   0     185    185     0       13.8m   13.8m      6      2
  ax-q-axgroup-001-consumer-group-001-dl    Y                   0     70     70      0        3.9m    3.9m      0      2

Cause : messages bloqués dans la file d'attente de lettres mortes de qpidd

Diagnostic

Cette situation peut se produire dans les scénarios suivants :

  1. Une mise à niveau a eu lieu dans le passé, pendant laquelle PostgreSQL était hors service.
  2. Une indisponibilité temporaire de PostgreSQL en raison de problèmes réseau.
  3. edge-qpid-server a tenté d'envoyer un message à PostgreSQL, mais PostgreSQL a renvoyé une erreur d'exécution.

Solution

  1. Notez le nom des files d'attente dans les étapes de diagnostic courantes. Exemple :

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. Exécutez la commande qpid-tool pour saisir une invite qpid interactive :

    qpid-tool

    Cette commande renvoie les éléments suivants :

    Management Tool for QPID
    qpid:
  3. Exécutez list broker pour obtenir la liste des courtiers actifs :

    list broker

    Cette commande renvoie les éléments suivants :

    Object Summary:
    ID   Created   Destroyed  Index
    =======================================
    125  21:00:00  -          amqp-broker

    Où la colonne ID spécifie l'ID du courtier.

  4. Notez l'ID du courtier. Dans l'exemple, il s'agit de 125.

  5. Exécutez la commande suivante pour déplacer les messages de la file d'attente des messages non distribués vers la file d'attente réelle :

    call 125 queueMoveMessages ax-q-axgroup-001-consumer-group-001-dl ax-q-axgroup-001-consumer-group-001 100000 {}

    Cette commande renvoie les éléments suivants :

    OK (0) - {}

    Si aucun résultat n'est généré, cela signifie qu'il n'y avait rien à faire, c'est-à-dire aucun message à déplacer. Si OK(0) ne s'affiche pas, contactez l'assistance Apigee Edge.

  6. Quittez le terminal qpid-tool.

    quit
  7. Patientez cinq minutes, puis exécutez à nouveau les étapes de diagnostic décrites dans Étapes de diagnostic courantes. Vérifiez que les messages de la file d'attente réelle sont traités et assurez-vous que le nombre de messages de la file d'attente de messages non distribués reste à 0.

Si le problème persiste, passez à la section suivante.

Vous devez collecter des informations de diagnostic

Si le problème persiste, même après avoir suivi les instructions ci-dessus, veuillez rassembler les informations de diagnostic suivantes. Contactez l'assistance Apigee Edge et partagez les informations suivantes :

  • Journaux Qpidd : /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • Journaux PostgreSQL : /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Journaux du serveur Edge-qpid : /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Journaux du serveur Edge-postgres :/opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Statistiques de la file d'attente Qpidd :

    qpid-stat -q
  • Groupe Analytics renvoyé par la commande curl suivante :

    curl -u sysadminEmail:password http://mgmt:8080/v1/analytics/groups/ax