Analytics-Daten bleiben in der Qpidd-Warteschlange für unzustellbare Nachrichten hängen

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu Apigee X.
info

Symptom

Analysedaten fehlen in der neuen Edge-UI, weil der Qpidd-Server keine Analysenachrichten an PostgreSQL überträgt. In Edge entspricht die Komponente edge-qpid-server dem Qpidd-Server.

Qpidd verwaltet zwei Warteschlangen für jede Analysegruppe:

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

    Diese Warteschlange enthält Analysenachrichten, die von den Message Processors und Routern gesendet wurden. Nachrichten werden von edge-qpid-server abgerufen, der sie parst und in PostgreSQL einfügt. Nachdem Nachrichten erfolgreich verarbeitet wurden, werden sie aus der Warteschlange entfernt.

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

    Diese Warteschlange ist die Warteschlange für unzustellbare Nachrichten. Sie dient als Ziel für Nachrichten, die von edge-qpid-server nicht verarbeitet werden konnten und die daher nicht mehr empfangen werden sollen. Diese Warteschlange wird in der Regel gefüllt, wenn die maximale Anzahl von Zustellversuchen überschritten wird oder wenn PostgreSQL das Einfügen neuer Daten aufgrund von Laufzeitfehlern abgelehnt hat.

Fehlermeldung

Die Ursache können verschiedene Laufzeitfehler der Komponente edge-qpid-server sein. Wenn edge-qpid-server einen Laufzeitfehler von PostgreSQL erhält, wird in der Regel die Warteschlange für unzustellbare Nachrichten erstellt, falls sie noch nicht vorhanden ist, und dann wird die folgende Nachricht dorthin gesendet:

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.

Mögliche Ursachen

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Nachrichten in der Warteschlange für unzustellbare Nachrichten von Qpidd edge-qpid-server konnte die Nachrichten, die er vom Qpidd-Broker gelesen hat, nicht verstehen oder konnte die Nachrichten nicht in PostgreSQL speichern. Edge Private Cloud-Nutzer

Allgemeine Diagnoseschritte

Führen Sie den folgenden Befehl auf dem Qpid-Knoten aus, um die Warteschlangenstatistiken von Qpidd aufzurufen:

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

Die Ausgabe enthält die Warteschlangen, die beim Broker registriert sind. Wenn die Warteschlange mit einem Namen, der auf -dl endet, Nachrichten enthält (Q-Depth(Messages) in Edge for Private Cloud 4.53.00 und höher oder msg in Edge for Private Cloud 4.52.x und früher), befinden sich Nachrichten in der Warteschlange für unzustellbare Nachrichten.

Beispielausgabe in Edge for Private Cloud 4.53.00 und höher (einschließlich 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   |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+

Beispielausgabe in Edge for Private Cloud 4.52.x und früher (Legacy-C++ qpidd Broker):

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

Ursache: Nachrichten in der Warteschlange für unzustellbare Nachrichten von Qpidd

Diagnose

Diese Situation kann in den folgenden Szenarien auftreten:

  1. In der Vergangenheit wurde ein Upgrade durchgeführt, bei dem PostgreSQL nicht verfügbar war.
  2. Ein vorübergehender Ausfall von PostgreSQL aufgrund von Netzwerkproblemen.
  3. edge-qpid-server hat versucht, eine Nachricht an PostgreSQL zu senden, aber PostgreSQL hat einen Laufzeitfehler zurückgegeben.

Auflösung

Folgen Sie der Anleitung für Ihre Edge for Private Cloud-Version, um Nachrichten aus der Warteschlange für unzustellbare Nachrichten zurück in die Hauptwarteschlange für Analysen zu verschieben.

Edge for Private Cloud 4.53.00 und höher (einschließlich 4.54.00)

In Edge for Private Cloud 4.53.00 und höher (einschließlich 4.54.00) wird Apache Qpid Broker-J verwendet (10.0.1 in 4.54.00 und 8.0.6 in 4.53.x). Die Legacy-CLI qpid-tool wurde in Edge for Private Cloud 4.53.00 und höher entfernt und kann nicht verwendet werden. Verwenden Sie stattdessen die Apache Qpid Broker-J HTTP Management REST API (moveMessages) oder die Qpid Web Management Console, um Nachrichten aus der Warteschlange für unzustellbare Nachrichten zurück in die Hauptwarteschlange für Analysen zu verschieben:

  1. Notieren Sie sich die genauen Namen der Hauptwarteschlange und der Warteschlange für unzustellbare Nachrichten aus der Ausgabe der allgemeinen Diagnoseschritte (z. B. ax-q-axgroup001-consumer-group-001 und ax-q-axgroup001-consumer-group-001-dl oder ax-q-axgroup-001-consumer-group-001 und ax-q-axgroup-001-consumer-group-001-dl).

  2. Führen Sie auf dem Qpid-Knoten den folgenden curl-Befehl aus, um den Vorgang moveMessages in der Warteschlange für unzustellbare Nachrichten über die Qpid Broker-J HTTP Management API aufzurufen (Standardport 8090):

    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

    Wobei:

    • QPID_USER und QPID_PASSWORD die in /opt/apigee/customer/application/qpidd.properties oder /opt/apigee/token/application/qpidd.properties konfigurierten Qpid-Anmeldedaten sind (Standardeinstellung: guest:guest).
    • Ersetzen Sie ax-q-axgroup001-consumer-group-001 und ax-q-axgroup001-consumer-group-001-dl wenn sich die Namen Ihrer Analysenwarteschlangen in qpid-stat -q unterscheiden.
    • Wenn Sie Nachrichten in Batches verschieben möchten, fügen Sie "limit" in den JSON-Anfragetext ein (z. B. "limit": 100000).
    • Wenn SSL/TLS für die Qpid Management API aktiviert ist (conf_qpidd_qpid_management.https.enabled=true), verwenden Sie https:// und übergeben Sie --cacert (oder -k) an curl.
  3. Prüfen Sie die Befehlsausgabe. Ein erfolgreicher Aufruf gibt ein JSON-Array der verschobenen internen Nachrichten-IDs zurück:

    [ 3, 4, 5 ]

    Wenn das zurückgegebene Array leer ist ([]), gab es in der Warteschlange für unzustellbare Nachrichten keine Nachrichten, die verschoben werden konnten.

  4. Warten Sie 5 Minuten und führen Sie dann /opt/apigee/apigee-qpidd/bin/qpid-stat -q aus den allgemeinen Diagnoseschritten aus. Prüfen Sie, ob die Nachrichten in der Hauptwarteschlange (ax-q-axgroup001-consumer-group-001) verarbeitet werden und ob Q-Depth(Messages) in der Warteschlange für unzustellbare Nachrichten (ax-q-axgroup001-consumer-group-001-dl) bei 0 bleibt.

Edge for Private Cloud 4.52.x und früher

  1. Notieren Sie sich die Namen der Warteschlangen aus den allgemeinen Diagnoseschritten. Beispiel:

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. Führen Sie den Befehl qpid-tool aus, um eine interaktive qpid Eingabeaufforderung zu öffnen:

    qpid-tool

    Dieser Befehl gibt Folgendes zurück:

    Management Tool for QPID
    qpid:
  3. Führen Sie list broker aus, um eine Liste der aktiven Broker abzurufen:

    list broker

    Dieser Befehl gibt Folgendes zurück:

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

    In der Spalte ID wird die ID des Brokers angegeben.

  4. Notieren Sie sich die ID des Brokers. Im Beispiel ist sie 125.

  5. Führen Sie den folgenden Befehl aus, um die Nachrichten aus der Warteschlange für unzustellbare Nachrichten zurück in die eigentliche Warteschlange zu verschieben:

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

    Dieser Befehl gibt Folgendes zurück:

    OK (0) - {}

    Wenn keine Ausgabe erfolgt, gab es nichts zu tun, d. h. keine Nachrichten zu verschieben. Wenn Sie OK (0) nicht sehen, sollten Sie sich an den Apigee Edge-Support wenden.

  6. Beenden Sie das qpid-tool-Terminal:

    quit
  7. Warten Sie 5 Minuten und führen Sie dann die Diagnoseschritte aus den allgemeinen Diagnoseschritten noch einmal aus. Prüfen Sie, ob die Nachrichten in der eigentlichen Warteschlange verarbeitet werden, und stellen Sie sicher, dass die Anzahl der msg in der Warteschlange für unzustellbare Nachrichten bei 0 bleibt.

Wenn das Problem weiterhin besteht, fahren Sie mit dem nächsten Abschnitt fort.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem nach Befolgen der vorherigen Anweisungen weiterhin besteht, erfassen Sie die folgenden Diagnoseinformationen und teilen Sie sie dem Apigee Edge-Support mit:

  • Qpidd-Logs: /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge for Private Cloud 4.53.00 und höher) und /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • PostgreSQL-Logs: /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Edge-qpid-Server-Logs: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Edge-postgres-Server-Logs: /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Qpidd-Warteschlangenstatistiken:

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • Analysegruppe, die vom folgenden `curl`-Befehl zurückgegeben wird:

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