Данные Аналитики застряли в очереди недоставленных сообщений Qpidd

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Symptom

В новом интерфейсе Edge отсутствуют данные Аналитики, поскольку сервер Qpidd не передает сообщения Аналитики в PostgreSQL. В Edge edge-qpid-server компонент соответствует серверу Qpidd.

Qpidd поддерживает две очереди для каждой группы аналитики:

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

    В этой очереди хранятся сообщения аналитики, отправленные из Message Processor и Router. Сообщения извлекаются из него edge-qpid-server, который анализирует их и вставляет в PostgreSQL. После успешной обработки сообщения удаляются из очереди.

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

    Эта очередь является очередью недоставленных сообщений. Он используется для хранения сообщений, которые edge-qpid-server не удалось обработать и которые больше не нужны. Обычно это происходит, когда превышено максимальное количество отправок или если PostgreSQL отклоняет вставку новых данных из-за ошибок выполнения.

Сообщение об ошибке

Основной причиной могут быть различные ошибки выполнения, связанные с компонентом edge-qpid-server. Если edge-qpid-server получает от PostgreSQL ошибку времени выполнения, то создает очередь недоставленных сообщений, если ее ещё нет, и отправляет в нее следующее сообщение:

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.

Возможные причины

Причина Описание Инструкции по устранению неполадок применимы к
Сообщения застряли в очереди недоставленных сообщений qpidd edge-qpid-server не удалось распознать сообщения, полученные от брокера Qpidd, или сохранить их в PostgreSQL. Пользователи Edge Private Cloud

Общие шаги диагностики

Чтобы посмотреть статистику очереди Qpidd, выполните на узле Qpid следующую команду:

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

В выходных данных будет набор очередей, зарегистрированных у брокера. Если в очереди с названием, заканчивающимся на -dl, есть сообщения (Q-Depth(Messages) в Edge for Private Cloud 4.53.00 и более поздних версиях или msg в Edge for Private Cloud 4.52.x и более ранних версиях), значит сообщения застряли в очереди недоставленных сообщений.

Пример выходных данных в Edge для частного облака 4.53.00 и более поздних версий (включая 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   |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+

Пример выходных данных в Edge для Private Cloud 4.52.x и более ранних версий (устаревший брокер 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

Причина: сообщения застряли в очереди недоставленных сообщений qpidd

диагностика;

Это может произойти в следующих случаях:

  1. Ранее было выполнено обновление, во время которого PostgreSQL был недоступен.
  2. Временный сбой PostgreSQL из-за проблем с сетью.
  3. edge-qpid-server попытался отправить сообщение в PostgreSQL, но PostgreSQL вернул ошибку выполнения.

Разрешение

Следуйте инструкциям для вашей версии Edge for Private Cloud, чтобы переместить застрявшие сообщения из очереди недоставленных сообщений обратно в основную очередь аналитики.

Edge for Private Cloud 4.53.00 и более поздних версий (включая 4.54.00)

В Edge для частного облака версии 4.53.00 и более поздних (включая 4.54.00) используется Apache Qpid Broker-J (10.0.1 в версии 4.54.00 и 8.0.6 в версии 4.53.x). Устаревшая версия интерфейса командной строки qpid-tool удалена в Edge для частного облака 4.53.00 и более поздних версий и не может использоваться. Вместо этого используйте Apache Qpid Broker-J HTTP Management REST API (moveMessages) или веб-консоль управления Qpid, чтобы переместить сообщения из очереди недоставленных сообщений обратно в основную очередь аналитики:

  1. Запишите точные названия основной очереди и очереди недоставленных сообщений из выходных данных, полученных на этапе Общие действия по диагностике (например, ax-q-axgroup001-consumer-group-001 и ax-q-axgroup001-consumer-group-001-dl или ax-q-axgroup-001-consumer-group-001 и ax-q-axgroup-001-consumer-group-001-dl).

  2. На узле Qpid выполните следующую команду curl, чтобы вызвать операцию moveMessages в очереди недоставленных сообщений через Qpid Broker-J HTTP Management API (по умолчанию используется порт 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

    Где:

    • QPID_USER и QPID_PASSWORD – учетные данные для управления Qpid, настроенные в /opt/apigee/customer/application/qpidd.properties или /opt/apigee/token/application/qpidd.properties (по умолчанию guest:guest).
    • Замените ax-q-axgroup001-consumer-group-001 и ax-q-axgroup001-consumer-group-001-dl, если названия очереди аналитики в qpid-stat -q отличаются.
    • Чтобы переместить сообщения пакетами, включите "limit" в тело запроса JSON (например, "limit": 100000).
    • Если в Qpid Management API (conf_qpidd_qpid_management.https.enabled=true) включен протокол SSL/TLS, используйте https:// и передайте --cacert (или -k) в curl.
  3. Проверьте результат выполнения команды. При успешном вызове возвращается массив JSON с идентификаторами перемещенных внутренних сообщений:

    [ 3, 4, 5 ]

    Если возвращенный массив пуст ([]), значит в очереди недоставленных сообщений не было сообщений для перемещения.

  4. Подождите пять минут и выполните команду /opt/apigee/apigee-qpidd/bin/qpid-stat -q из раздела Общие действия по диагностике. Убедитесь, что сообщения в основной очереди (ax-q-axgroup001-consumer-group-001) обрабатываются и что значение Q-Depth(Messages) в очереди недоставленных сообщений (ax-q-axgroup001-consumer-group-001-dl) остается равным 0.

Edge for Private Cloud 4.52.x и более ранние версии

  1. Запишите названия очередей из раздела Общие шаги диагностики. Пример:

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. Выполните команду qpid-tool, чтобы перейти к интерактивному запросу qpid:

    qpid-tool

    Эта команда возвращает следующий результат:

    Management Tool for QPID
    qpid:
  3. Чтобы получить список активных брокеров, выполните команду list broker:

    list broker

    Эта команда возвращает следующий результат:

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

    где в столбце ID указан идентификатор брокера.

  4. Запишите идентификатор брокера. В нашем примере это 125.

  5. Чтобы переместить сообщения из очереди недоставленных сообщений обратно в основную очередь, выполните следующую команду:

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

    Эта команда возвращает следующий результат:

    OK (0) - {}

    Если вы не видите результата выполнения команды, значит перемещать было нечего. Если вы не видите OK (0), обратитесь в службу поддержки Apigee Edge.

  6. Закройте терминал qpid-tool:

    quit
  7. Подождите пять минут и повторите действия, описанные в разделе Общие действия по диагностике. Убедитесь, что сообщения в очереди обрабатываются и количество сообщений в очереди недоставленных писем остается на уровне msg0.

Если проблема не исчезнет, перейдите к следующему разделу.

Необходимо собрать диагностическую информацию

Если после выполнения инструкций выше проблема не исчезла, соберите следующую диагностическую информацию и передайте ее в службу поддержки Apigee Edge:

  • Журналы Qpidd: /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge для Private Cloud 4.53.00 и более поздних версий) и /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log.
  • Журналы PostgreSQL: /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Журналы Edge-qpid-server: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Журналы сервера edge-postgres: /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Статистика очереди Qpidd:

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • Группа Аналитики, возвращенная следующей командой curl:

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