Dati di analisi bloccati nella coda dei messaggi non recapitabili Qpidd

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Sintomo

I dati di Analytics non sono presenti nella nuova UI di Edge perché il server Qpidd non trasferisce i messaggi di Analytics a PostgreSQL. In Edge, il componente edge-qpid-server corrisponde al server Qpidd.

Qpidd gestisce due code per ogni gruppo di analisi:

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

    Questa coda contiene i messaggi di Analytics inviati dai processori di messaggi e dai router. I messaggi vengono estratti da qui da edge-qpid-server, che li analizza e li inserisce in PostgreSQL. Una volta elaborati correttamente, i messaggi vengono rimossi dalla coda.

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

    Questa coda è la coda di messaggi non recapitabili. Funge da destinazione per i messaggi che edge-qpid-server non è riuscito a elaborare e che quindi non vuole più ricevere. In genere viene compilata quando viene superato il conteggio massimo delle consegne o se PostgreSQL ha rifiutato l'inserimento di nuovi dati a causa di errori di runtime.

Messaggio di errore

La causa principale potrebbe essere dovuta a vari errori di runtime del componente edge-qpid-server. In genere, se edge-qpid-server riceve un errore di runtime da PostgreSQL, crea la coda di messaggi non recapitabili, se non esiste già, e poi vi invia il seguente messaggio:

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.

Possibili cause

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Messaggi bloccati nella coda di messaggi non recapitabili di qpidd edge-qpid-server non è riuscito a comprendere i messaggi letti dal broker Qpidd o non è riuscito a rendere persistenti i messaggi in PostgreSQL. Utenti di Edge Private Cloud

Passaggi comuni per la diagnosi

Esegui il seguente comando sul nodo Qpid per visualizzare le statistiche della coda Qpidd:

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

L'output restituisce l'insieme di code registrate con il broker. Se la coda con un nome che termina con -dl contiene messaggi (Q-Depth(Messages) in Edge for Private Cloud 4.53.00 e versioni successive o msg in Edge for Private Cloud 4.52.x e versioni precedenti), i messaggi sono bloccati nella coda di messaggi non recapitabili.

Esempio di output in Edge for Private Cloud 4.53.00 e versioni successive (inclusa la 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   |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+

Esempio di output in Edge for Private Cloud 4.52.x e versioni precedenti (broker C++ legacyqpidd):

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

Causa: messaggi bloccati nella coda di messaggi non recapitabili di qpidd

Diagnosi

Questa condizione può verificarsi nei seguenti scenari:

  1. In passato è stato eseguito un upgrade durante il quale PostgreSQL era inattivo.
  2. Un'interruzione temporanea di PostgreSQL a causa di problemi di rete.
  3. edge-qpid-server ha tentato di inviare un messaggio a PostgreSQL, ma PostgreSQL ha restituito un errore di runtime.

Risoluzione

Segui i passaggi per la tua versione di Edge for Private Cloud per spostare i messaggi bloccati dalla coda di messaggi non recapitabili alla coda di analisi principale.

Edge for Private Cloud 4.53.00 e versioni successive (inclusa la 4.54.00)

Edge for Private Cloud 4.53.00 e versioni successive (inclusa la 4.54.00) utilizza Apache Qpid Broker-J (10.0.1 nella 4.54.00 e 8.0.6 nella 4.53.x). La CLI qpid-tool legacy è stata rimossa in Edge for Private Cloud 4.53.00 e versioni successive e non può essere utilizzata. Utilizza invece l'API REST di gestione HTTP di Apache Qpid Broker-J (moveMessages) o la console di gestione web di Qpid per spostare i messaggi dalla coda di messaggi non recapitabili alla coda di analisi principale:

  1. Prendi nota dei nomi esatti della coda principale e della coda di messaggi non recapitabili dall'output dei passaggi comuni per la diagnosi (ad esempio, ax-q-axgroup001-consumer-group-001 e ax-q-axgroup001-consumer-group-001-dl oppure ax-q-axgroup-001-consumer-group-001 e ax-q-axgroup-001-consumer-group-001-dl).

  2. Sul nodo Qpid, esegui il seguente comando curl per richiamare l'operazione moveMessages sulla coda di messaggi non recapitabili tramite l'API di gestione HTTP di Qpid Broker-J (porta 8090 per impostazione predefinita):

    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

    Dove:

    • QPID_USER e QPID_PASSWORD sono le credenziali di gestione di Qpid configurate in /opt/apigee/customer/application/qpidd.properties o /opt/apigee/token/application/qpidd.properties (il valore predefinito è guest:guest).
    • Sostituisci ax-q-axgroup001-consumer-group-001 e ax-q-axgroup001-consumer-group-001-dl se i nomi delle code di analisi in qpid-stat -q sono diversi.
    • Per spostare i messaggi in batch, includi "limit" nel corpo della richiesta JSON (ad esempio, "limit": 100000).
    • Se SSL/TLS è abilitato nell'API di gestione di Qpid (conf_qpidd_qpid_management.https.enabled=true), utilizza https:// e passa --cacert (o -k) a curl.
  3. Verifica l'output del comando. Una chiamata riuscita restituisce un array JSON degli ID dei messaggi interni spostati:

    [ 3, 4, 5 ]

    Se l'array restituito è vuoto ([]), non sono presenti messaggi nella coda di messaggi non recapitabili da spostare.

  4. Attendi 5 minuti, quindi esegui /opt/apigee/apigee-qpidd/bin/qpid-stat -q da Passaggi comuni per la diagnosi. Verifica che i messaggi nella coda principale (ax-q-axgroup001-consumer-group-001) vengano elaborati e che Q-Depth(Messages) nella coda di messaggi non recapitabili (ax-q-axgroup001-consumer-group-001-dl) rimanga a 0.

Edge for Private Cloud 4.52.x e versioni precedenti

  1. Prendi nota del nome delle code dai passaggi comuni per la diagnosi. Ad esempio:

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. Esegui il comando qpid-tool per inserire un prompt qpid interattivo:

    qpid-tool

    Questo comando restituisce quanto segue:

    Management Tool for QPID
    qpid:
  3. Esegui list broker per ottenere un elenco dei broker attivi:

    list broker

    Questo comando restituisce quanto segue:

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

    Dove la colonna ID specifica l'ID del broker.

  4. Prendi nota dell'ID del broker. Nell'esempio è 125.

  5. Esegui il seguente comando per spostare i messaggi dalla coda di messaggi non recapitabili alla coda effettiva:

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

    Questo comando restituisce quanto segue:

    OK (0) - {}

    Se non è presente alcun output, non è stato eseguito alcun intervento, il che significa che non sono presenti messaggi da spostare. Se non vedi OK (0), devi contattare l'assistenza di Apigee Edge.

  6. Esci dal terminale qpid-tool:

    quit
  7. Attendi 5 minuti, quindi esegui di nuovo i passaggi per la diagnosi da Passaggi comuni per la diagnosi. Verifica che i messaggi nella coda effettiva vengano elaborati e che il conteggio msg dei messaggi non recapitabili rimanga a 0.

Se il problema persiste, vai alla sezione successiva.

Informazioni di diagnostica da raccogliere

Se il problema persiste dopo aver seguito le istruzioni precedenti, raccogli le seguenti informazioni di diagnostica e condividile con l'assistenza di Apigee Edge:

  • Log di Qpidd: /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge for Private Cloud 4.53.00 e versioni successive) e /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • Log di PostgreSQL: /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Log di edge-qpid-server: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Log di edge-postgres-server: /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Statistiche della coda Qpidd:

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • Gruppo di analisi restituito dal seguente comando curl:

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