Dados do Google Analytics presos na fila de mensagens inativas do Qpidd

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

Sintoma

Os dados de análise estão ausentes na nova interface do Edge devido ao fato de o servidor Qpidd não transferir mensagens de análise para o PostgreSQL. No Edge, o componente edge-qpid-server corresponde ao servidor Qpidd.

O Qpidd mantém duas filas para cada grupo de análise:

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

    Essa fila contém mensagens de análise enviadas dos processadores de mensagens e roteadores. As mensagens são extraídas daqui pelo edge-qpid-server, que as analisa e as insere no PostgreSQL. Depois de processadas, as mensagens são removidas da fila.

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

    Essa fila é a fila de mensagens inativas. Ela atua como o destino de mensagens que o edge-qpid-server não conseguiu processar e, portanto, não quer mais receber. Isso geralmente é preenchido quando a contagem máxima de entrega é excedida ou se o PostgreSQL rejeitou a inserção de novos dados devido a erros de tempo de execução.

Mensagem de erro

A causa raiz pode ser devido a vários erros de tempo de execução do componente edge-qpid-server. Normalmente, se o edge-qpid-server receber um erro de tempo de execução do PostgreSQL, ele vai criar a fila de mensagens inativas, se ela ainda não existir, e enviar a seguinte mensagem para ela:

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 possíveis

Causa Descrição Instruções de solução de problemas aplicáveis a
Mensagens presas na fila de mensagens inativas do qpidd O edge-qpid-server não conseguiu entender as mensagens lidas do broker Qpidd ou não conseguiu persistir mensagens no PostgreSQL. Usuários do Edge para nuvem privada

Etapas comuns do diagnóstico

Execute o comando a seguir no nó Qpid para conferir as estatísticas da fila Qpidd:

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

A saída retorna o conjunto de filas registradas no broker. Se a fila com um nome que termina em -dl tiver mensagens preenchidas (Q-Depth(Messages) no Edge para nuvem privada 4.53.00 e versões mais recentes ou msg no Edge para nuvem privada 4.52.x e versões anteriores), as mensagens vão ficar presas na fila de mensagens inativas.

Exemplo de saída no Edge para nuvem privada 4.53.00 e versões mais recentes (incluindo 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   |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+

Exemplo de saída no Edge para nuvem privada 4.52.x e versões anteriores (broker C++qpidd legado):

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: mensagens presas na fila de mensagens inativas do qpidd

Diagnóstico

Essa condição pode ocorrer nos seguintes cenários:

  1. Um upgrade ocorreu no passado, durante o qual o PostgreSQL estava inativo.
  2. Uma interrupção temporária do PostgreSQL devido a problemas de rede.
  3. O edge-qpid-server tentou enviar uma mensagem para o PostgreSQL, mas o PostgreSQL retornou um erro de tempo de execução.

Resolução

Siga as etapas da sua versão do Edge para nuvem privada para mover as mensagens presas da fila de mensagens inativas de volta para a fila de análise principal.

Edge para nuvem privada 4.53.00 e versões mais recentes (incluindo 4.54.00)

O Edge para nuvem privada 4.53.00 e versões mais recentes (incluindo 4.54.00) usa o Apache Qpid Broker-J (10.0.1 na versão 4.54.00 e 8.0.6 na versão 4.53.x). A CLI qpid-tool legada foi removida do Edge para nuvem privada 4.53.00 e versões mais recentes e não pode ser usada. Em vez disso, use a API REST de gerenciamento HTTP do Apache Qpid Broker-J (moveMessages) ou o console de gerenciamento da Web do Qpid para mover mensagens da fila de mensagens inativas de volta para a fila de análise principal:

  1. Anote os nomes exatos da fila principal e da fila de mensagens inativas na saída das etapas comuns do diagnóstico (por exemplo, ax-q-axgroup001-consumer-group-001 e ax-q-axgroup001-consumer-group-001-dl ou ax-q-axgroup-001-consumer-group-001 e ax-q-axgroup-001-consumer-group-001-dl).

  2. No nó Qpid, execute o seguinte comando curl para invocar a operação moveMessages na fila de mensagens inativas pela API de gerenciamento HTTP do Qpid Broker-J (porta 8090 por padrão):

    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

    Em que:

    • QPID_USER e QPID_PASSWORD são as credenciais de gerenciamento do Qpid configuradas em /opt/apigee/customer/application/qpidd.properties ou /opt/apigee/token/application/qpidd.properties (o padrão é guest:guest).
    • Substitua ax-q-axgroup001-consumer-group-001 e ax-q-axgroup001-consumer-group-001-dl se os nomes da fila de análise em qpid-stat -q forem diferentes.
    • Para mover mensagens em lotes, inclua "limit" no corpo da solicitação JSON (por exemplo, "limit": 100000).
    • Se SSL/TLS estiver ativado na API de gerenciamento do Qpid (conf_qpidd_qpid_management.https.enabled=true), use https:// e transmita --cacert (ou -k) para curl.
  3. Verifique a resposta ao comando. Uma chamada bem-sucedida retorna uma matriz JSON dos IDs de mensagens internas movidas:

    [ 3, 4, 5 ]

    Se a matriz retornada estiver vazia ([]), não havia mensagens na fila de mensagens inativas para mover.

  4. Aguarde 5 minutos e execute /opt/apigee/apigee-qpidd/bin/qpid-stat -q de Etapas comuns do diagnóstico. Verifique se as mensagens na fila principal (ax-q-axgroup001-consumer-group-001) estão sendo processadas e se Q-Depth(Messages) na fila de mensagens inativas (ax-q-axgroup001-consumer-group-001-dl) permanece em 0.

Edge para nuvem privada 4.52.x e versões anteriores

  1. Anote o nome das filas nas etapas comuns do diagnóstico . Por exemplo:

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. Execute o comando qpid-tool para inserir um prompt qpid interativo:

    qpid-tool

    Este comando mostra o seguinte:

    Management Tool for QPID
    qpid:
  3. Execute list broker para receber uma lista de brokers ativos:

    list broker

    Este comando mostra o seguinte:

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

    Em que a coluna ID especifica o ID do broker.

  4. Anote o ID do broker. No exemplo, é 125.

  5. Execute o comando a seguir para mover as mensagens da fila de mensagens inativas de volta para a fila real:

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

    Este comando mostra o seguinte:

    OK (0) - {}

    Se não houver saída, não havia nada a fazer, ou seja, não havia mensagens para mover. Se você não vir OK (0), entre em contato com com o suporte do Apigee Edge.

  6. Saia do terminal qpid-tool:

    quit
  7. Aguarde 5 minutos e execute as etapas de diagnóstico novamente nas etapas comuns do diagnóstico. Verifique se as mensagens na fila real estão sendo processadas e se a contagem de msg de mensagens inativas permanece em 0.

Se o problema ainda persistir, acesse a próxima seção.

É necessário coletar informações de diagnóstico

Se o problema persistir depois de seguir as instruções anteriores, colete as seguintes informações de diagnóstico e compartilhe-as com o suporte do Apigee Edge:

  • Registros do Qpidd: /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge para nuvem privada 4.53.00 e versões mais recentes) e /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • Registros do PostgreSQL: /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Registros do Edge-qpid-server: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Registros do Edge-postgres-server: /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Estatísticas da fila Qpidd:

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • Grupo de análise retornado pelo seguinte comando curl:

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