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**.
info

Problème constaté

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

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

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

    Cette file d'attente contient les messages Analytics envoyés par les processeurs de messages et les routeurs. Les messages sont extraits de cette file d'attente 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. Elle sert de destination aux messages que edge-qpid-server n'a pas pu traiter et qu'il ne souhaite donc plus recevoir. Elle est généralement remplie lorsque le nombre maximal de tentatives de remise 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 du problème 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 de lettres mortes 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 broker Qpidd ou n'a pas pu conserver les messages dans PostgreSQL. Utilisateurs d'Edge pour le cloud privé

Étapes de diagnostic courantes

Exécutez la commande suivante sur le nœud Qpid pour afficher les statistiques de la file d'attente Qpidd :

/opt/apigee/apigee-qpidd/bin/qpid-stat -q

Le résultat renvoie l'ensemble des files d'attente enregistrées auprès du broker. Si la file d'attente dont le nom se termine par -dl contient des messages (Q-Depth(Messages) dans Edge pour le cloud privé 4.53.00 et versions ultérieures, ou msg dans Edge pour le cloud privé 4.52.x et versions antérieures), cela signifie que les messages sont bloqués dans la file d'attente de lettres mortes.

Exemple de résultat dans Edge pour le cloud privé 4.53.00 et versions ultérieures (y compris 4.54.00, Apache Qpid Broker-J) :

+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+
|               Queue Name              | Messages Enqueued | Total Enqueued(B) | Messages Dequeued | Total Dequeued(B) | Consumers | Bindings | Q-Depth(Messages) | Q-Depth(B) |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+
|   ax-q-axgroup001-consumer-group-001  |        185        |      13800000     |        185        |      13800000     |     6     |    1     |         0         |     0      |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+
| ax-q-axgroup001-consumer-group-001-dl |         70        |      3900000      |         0         |         0         |     0     |    1     |         70        |  3900000   |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+

Exemple de résultat dans Edge pour le cloud privé 4.52.x et versions antérieures (ancien broker C++ qpidd):

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 condition peut se produire dans les cas suivants :

  1. Une mise à niveau a eu lieu dans le passé, pendant laquelle PostgreSQL était hors service.
  2. Une panne 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

Suivez les étapes correspondant à votre version d'Edge pour le cloud privé afin de déplacer les messages bloqués de la file d'attente de lettres mortes vers la file d'attente Analytics principale.

Edge pour le cloud privé 4.53.00 et versions ultérieures (y compris 4.54.00)

Edge pour le cloud privé 4.53.00 et versions ultérieures (y compris 4.54.00) utilise Apache Qpid Broker-J (10.0.1 dans la version 4.54.00 et 8.0.6 dans la version 4.53.x). L'ancienne CLI qpid-tool est supprimée dans Edge pour le cloud privé 4.53.00 et versions ultérieures, et ne peut pas être utilisée. Utilisez plutôt l'API REST de gestion HTTP Apache Qpid Broker-J (moveMessages) ou la console de gestion Web Qpid pour déplacer les messages de la file d'attente de lettres mortes vers la file d'attente Analytics principale :

  1. Notez les noms exacts de la file d'attente principale et de la file d'attente de lettres mortes à partir du résultat des étapes de diagnostic courantes (par exemple, ax-q-axgroup001-consumer-group-001 et ax-q-axgroup001-consumer-group-001-dl, ou ax-q-axgroup-001-consumer-group-001 et ax-q-axgroup-001-consumer-group-001-dl).

  2. Sur le nœud Qpid, exécutez la commande curl suivante pour appeler l'opération moveMessages sur la file d'attente de lettres mortes via l'API de gestion HTTP Qpid Broker-J (port 8090 par défaut) :

    curl -u QPID_USER:QPID_PASSWORD -X POST \
      -H "Content-Type: application/json" \
      -d '{"destination": "ax-q-axgroup001-consumer-group-001"}' \
      http://127.0.0.1:8090/api/latest/queue/default/default/ax-q-axgroup001-consumer-group-001-dl/moveMessages

    Où :

    • QPID_USER et QPID_PASSWORD sont les identifiants de gestion Qpid configurés dans /opt/apigee/customer/application/qpidd.properties ou /opt/apigee/token/application/qpidd.properties (la valeur par défaut est guest:guest).
    • Remplacez ax-q-axgroup001-consumer-group-001 et ax-q-axgroup001-consumer-group-001-dl si les noms de vos files d'attente Analytics dans qpid-stat -q sont différents.
    • Pour déplacer les messages par lot, incluez "limit" dans le corps de la requête JSON (par exemple, "limit": 100000).
    • Si SSL/TLS est activé sur l'API Management Qpid (conf_qpidd_qpid_management.https.enabled=true), utilisez https:// et transmettez --cacert (ou -k) à curl.
  3. Vérifiez le résultat de la commande. Un appel réussi renvoie un tableau JSON des ID de messages internes déplacés :

    [ 3, 4, 5 ]

    Si le tableau renvoyé est vide ([]), cela signifie qu'aucun message n'a été déplacé dans la file d'attente de lettres mortes.

  4. Attendez cinq minutes, puis exécutez /opt/apigee/apigee-qpidd/bin/qpid-stat -q à partir des étapes de diagnostic courantes. Vérifiez que les messages de la file d'attente principale (ax-q-axgroup001-consumer-group-001) sont en cours de traitement et que Q-Depth(Messages) dans la file d'attente de lettres mortes (ax-q-axgroup001-consumer-group-001-dl) reste à 0.

Edge pour le cloud privé 4.52.x et versions antérieures

  1. Notez le nom des files d'attente à partir des é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 accéder à 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 brokers 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 broker.

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

  5. Exécutez la commande suivante pour déplacer les messages de la file d'attente de lettres mortes 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 affiché, cela signifie qu'aucune action n'a été effectuée, c'est-à-dire qu'aucun message n'a été déplacé. Si vous ne voyez pas OK (0), contactez l'assistance Apigee Edge.

  6. Quittez le terminal qpid-tool :

    quit
  7. Attendez cinq minutes, puis exécutez à nouveau les étapes de diagnostic à partir de Étapes de diagnostic courantes. Vérifiez que les messages de la file d'attente réelle sont en cours de traitement et que le nombre de msg de lettres mortes reste à 0.

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

Vous devez collecter des informations de diagnostic

Si le problème persiste après avoir suivi les instructions précédentes, rassemblez les informations de diagnostic suivantes et partagez-les avec l'assistance Apigee Edge :

  • Journaux Qpidd : /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge pour le cloud privé 4.53.00 et versions ultérieures) et /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • Journaux PostgreSQL : /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Journaux edge-qpid-server : /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Journaux edge-postgres-server : /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Statistiques de la file d'attente Qpidd :

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • Groupe Analytics renvoyé par la commande curl suivante :

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