Datos de Analytics atascados en la cola de mensajes no entregados por QPIdd

Estás viendo la documentación de Apigee Edge.
Ir a la documentación de Apigee X.
info

Síntoma

Faltan datos de estadísticas en la nueva IU de Edge porque el servidor Qpidd no transfiere mensajes de estadísticas a PostgreSQL. En Edge, el componente edge-qpid-server corresponde al servidor Qpidd.

Qpidd mantiene dos colas para cada grupo de estadísticas:

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

    Esta cola contiene mensajes de análisis enviados desde los Message Processors y los routers. El componente edge-qpid-server extrae los mensajes de aquí, los analiza y los inserta en PostgreSQL. Una vez que los mensajes se procesan correctamente, se quitan de la cola.

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

    Esta cola es la cola de mensajes no entregados. Actúa como el destino de los mensajes que edge-qpid-server no pudo procesar y, por lo tanto, ya no desea recibir. Por lo general, se propaga cuando se supera el recuento máximo de entrega o si PostgreSQL rechazó la inserción de datos nuevos debido a errores de tiempo de ejecución.

Mensaje de error

La causa principal podría deberse a varios errores de tiempo de ejecución del componente edge-qpid-server. Por lo general, si edge-qpid-server recibe un error de tiempo de ejecución de PostgreSQL, crea la cola de mensajes no entregados si aún no existe y, luego, envía el siguiente mensaje allí:

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.

Causas posibles

Causa Descripción Instrucciones de solución de problemas aplicables a
Mensajes atascados en la cola de mensajes no entregados de qpidd edge-qpid-server no pudo comprender los mensajes que leyó del agente de Qpidd o no pudo conservar los mensajes en PostgreSQL. Usuarios de la nube privada de Edge

Pasos comunes de diagnóstico

Ejecuta el siguiente comando en el nodo Qpid para ver las estadísticas de la cola de Qpidd:

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

El resultado muestra el conjunto de colas registradas con el agente. Si la cola con un nombre que termina en -dl tiene mensajes propagados (Q-Depth(Messages) en Edge para la nube privada 4.53.00 y versiones posteriores, o msg en Edge para la nube privada 4.52.x y versiones anteriores), los mensajes están atascados en la cola de mensajes no entregados.

Ejemplo de resultado en Edge para la nube privada 4.53.00 y versiones posteriores (incluidas 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   |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+

Ejemplo de resultado en Edge para la nube privada 4.52.x y versiones anteriores (agente heredado de 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

Causa: Mensajes atascados en la cola de mensajes no entregados de qpidd

Diagnóstico

Esta condición puede ocurrir en las siguientes situaciones:

  1. Se realizó una actualización en el pasado, durante la cual PostgreSQL dejó de funcionar.
  2. Una interrupción temporal de PostgreSQL debido a problemas de red.
  3. El componente edge-qpid-server intentó enviar un mensaje a PostgreSQL, pero PostgreSQL mostró un error de tiempo de ejecución.

Solución

Sigue los pasos para tu versión de Edge para la nube privada para mover los mensajes atascados de la cola de mensajes no entregados a la cola de estadísticas principal.

Edge para la nube privada 4.53.00 y versiones posteriores (incluidas 4.54.00)

Edge para la nube privada 4.53.00 y versiones posteriores (incluidas 4.54.00) usa Apache Qpid Broker-J (10.0.1 en 4.54.00 y 8.0.6 en 4.53.x). Se quitó la CLI qpid-tool heredada en Edge para la nube privada 4.53.00 y versiones posteriores, y no se puede usar. En su lugar, usa la API de REST de administración HTTP de Apache Qpid Broker-J (moveMessages) o la consola de administración web de Qpid para mover los mensajes de la cola de mensajes no entregados a la cola de estadísticas principal:

  1. Anota los nombres exactos de la cola principal y la cola de mensajes no entregados del resultado de los pasos comunes de diagnóstico (por ejemplo, ax-q-axgroup001-consumer-group-001 y ax-q-axgroup001-consumer-group-001-dl, o ax-q-axgroup-001-consumer-group-001 y ax-q-axgroup-001-consumer-group-001-dl).

  2. En el nodo Qpid, ejecuta el siguiente comando curl para invocar la operación moveMessages en la cola de mensajes no entregados a través de la API de Management HTTP de Qpid Broker-J (puerto 8090 de forma predeterminada):

    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

    Donde:

    • QPID_USER y QPID_PASSWORD son las credenciales de administración de Qpid configuradas en /opt/apigee/customer/application/qpidd.properties o /opt/apigee/token/application/qpidd.properties (el valor predeterminado es guest:guest).
    • Reemplaza ax-q-axgroup001-consumer-group-001 y ax-q-axgroup001-consumer-group-001-dl si los nombres de la cola de estadísticas en qpid-stat -q difieren.
    • Para mover mensajes en lotes, incluye "limit" en el cuerpo de la solicitud JSON (por ejemplo, "limit": 100000).
    • Si SSL/TLS está habilitado en la API de Management de Qpid (conf_qpidd_qpid_management.https.enabled=true), usa https:// y pasa --cacert (o -k) a curl.
  3. Verifica el resultado del comando. Una llamada exitosa muestra un array JSON de los IDs de mensajes internos movidos:

    [ 3, 4, 5 ]

    Si el array que se muestra está vacío ([]), no había mensajes en la cola de mensajes no entregados para mover.

  4. Espera 5 minutos y, luego, ejecuta /opt/apigee/apigee-qpidd/bin/qpid-stat -q desde los pasos comunes de diagnóstico. Verifica que los mensajes de la cola principal (ax-q-axgroup001-consumer-group-001) se estén procesando y que Q-Depth(Messages) en la cola de mensajes no entregados (ax-q-axgroup001-consumer-group-001-dl) permanezca en 0.

Edge para la nube privada 4.52.x y versiones anteriores

  1. Anota el nombre de las colas de los pasos comunes de diagnóstico. Por ejemplo:

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. Ejecuta el comando qpid-tool para ingresar un mensaje qpid interactivo:

    qpid-tool

    Este comando muestra lo siguiente:

    Management Tool for QPID
    qpid:
  3. Ejecuta list broker para obtener una lista de los agentes activos:

    list broker

    Este comando muestra lo siguiente:

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

    En el ejemplo anterior, la columna ID especifica el ID del agente.

  4. Anota el ID del agente. En el ejemplo, es 125.

  5. Ejecuta el siguiente comando para mover los mensajes de la cola de mensajes no entregados a la cola real:

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

    Este comando muestra lo siguiente:

    OK (0) - {}

    Si no hay resultado, no había nada que hacer, lo que significa que no hay mensajes para mover. Si no ves OK (0), debes comunicarte con el equipo de asistencia de Apigee Edge.

  6. Sal de la terminal qpid-tool:

    quit
  7. Espera 5 minutos y, luego, vuelve a ejecutar los pasos de diagnóstico de los pasos comunes de diagnóstico. Verifica que los mensajes de la cola real se estén procesando y asegúrate de que el recuento de msg de mensajes no entregados permanezca en 0.

Si el problema persiste, ve a la siguiente sección.

Se debe recopilar información de diagnóstico

Si el problema persiste después de seguir las instrucciones anteriores, recopila la siguiente información de diagnóstico y compártela con el equipo de asistencia de Apigee Edge:

  • Registros de Qpidd: /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge para la nube privada 4.53.00 y versiones posteriores) y /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • Registros de PostgreSQL: /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Registros de Edge-qpid-server: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Registros de Edge-postgres-server: /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Estadísticas de la cola de Qpidd:

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • Grupo de estadísticas que muestra el siguiente comando curl:

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