Dane Analytics utknęły w kolejce niedostarczonych wiadomości w Qpidd

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Krótki opis problemu

W nowym interfejsie Edge brakuje danych Analytics, ponieważ serwer Qpidd nie przesyła wiadomości Analytics do PostgreSQL. W Edge komponent edge-qpid-server odpowiada serwerowi Qpidd.

Qpidd utrzymuje 2 kolejki dla każdej grupy Analytics:

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

    Ta kolejka zawiera wiadomości analityczne wysyłane z procesorów komunikatów i routerów. Wiadomości są stąd pobierane przez edge-qpid-server, który je analizuje i wstawia do PostgreSQL. Po pomyślnym przetworzeniu wiadomości są usuwane z kolejki.

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

    Ta kolejka to kolejka niedostarczonych wiadomości. Służy jako miejsce docelowe dla wiadomości, których nie udało się przetworzyć w edge-qpid-server i których nie chce on już otrzymywać. Zwykle jest ona wypełniana, gdy zostanie przekroczona maksymalna liczba dostaw lub gdy PostgreSQL odrzuci wstawienie nowych danych z powodu błędów środowiska wykonawczego.

Komunikat o błędzie

Główną przyczyną mogą być różne błędy środowiska wykonawczego komponentu edge-qpid-server. Zwykle, jeśli edge-qpid-server otrzyma błąd środowiska wykonawczego z PostgreSQL, tworzy kolejkę niedostarczonych wiadomości (jeśli jeszcze nie istnieje), a następnie wysyła do niej ten komunikat:

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.

Możliwe przyczyny

Przyczyna Opis Instrukcje rozwiązywania problemów, których dotyczy problem
Wiadomości utknęły w kolejce niedostarczonych wiadomości qpidd edge-qpid-server nie mógł zrozumieć wiadomości odczytanych z brokera Qpidd lub nie mógł zapisać wiadomości w PostgreSQL. Użytkownicy Edge Private Cloud

Typowe czynności diagnostyczne

Aby wyświetlić statystyki kolejki Qpidd, uruchom to polecenie w węźle Qpid:

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

Dane wyjściowe zawierają zestaw kolejek zarejestrowanych u brokera. Jeśli kolejka o nazwie kończącej się na -dl zawiera wiadomości (Q-Depth(Messages) w Edge dla chmury prywatnej w wersji 4.53.00 i nowszych lub msg w Edge dla chmury prywatnej w wersji 4.52.x i starszych), oznacza to, że wiadomości utknęły w kolejce niedostarczonych wiadomości.

Przykładowe dane wyjściowe w Edge dla chmury prywatnej w wersji 4.53.00 i nowszych (w tym 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   |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+

Przykładowe dane wyjściowe w Edge dla chmury prywatnej w wersji 4.52.x i starszych (starszy broker 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

Przyczyna: wiadomości utknęły w kolejce niedostarczonych wiadomości qpidd

Diagnostyka

Ta sytuacja może wystąpić w tych przypadkach:

  1. W przeszłości przeprowadzono uaktualnienie, podczas którego PostgreSQL był niedostępny.
  2. Tymczasowa awaria PostgreSQL z powodu problemów z siecią.
  3. Komponent edge-qpid-server próbował wysłać wiadomość do PostgreSQL, ale PostgreSQL zwrócił błąd środowiska wykonawczego.

Rozdzielczość

Aby przenieść utknięte wiadomości z kolejki niedostarczonych wiadomości z powrotem do głównej kolejki Analytics, wykonaj czynności odpowiednie dla Twojej wersji Edge dla chmury prywatnej.

Edge dla chmury prywatnej w wersji 4.53.00 i nowszych (w tym 4.54.00)

Edge dla chmury prywatnej w wersji 4.53.00 i nowszych (w tym 4.54.00) używa Apache Qpid Broker-J (10.0.1 w wersji 4.54.00 i 8.0.6 w wersji 4.53.x). W Edge dla chmury prywatnej w wersji 4.53.00 i nowszych usunięto starszy interfejs CLI qpid-tool, którego nie można już używać. Zamiast tego użyj interfejsu Apache Qpid Broker-J HTTP Management REST API (moveMessages) lub konsoli Qpid Web Management Console, aby przenieść wiadomości z kolejki niedostarczonych wiadomości z powrotem do głównej kolejki Analytics:

  1. Zapisz dokładne nazwy kolejki głównej i kolejki niedostarczonych wiadomości z danych wyjściowych Typowych czynności diagnostycznych (np. ax-q-axgroup001-consumer-group-001 i ax-q-axgroup001-consumer-group-001-dl lub ax-q-axgroup-001-consumer-group-001 i ax-q-axgroup-001-consumer-group-001-dl).

  2. W węźle Qpid uruchom to polecenie curl, aby wywołać operację moveMessages w kolejce niedostarczonych wiadomości za pomocą interfejsu Qpid Broker-J HTTP Management API (domyślnie port 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

    Gdzie:

    • QPID_USER i QPID_PASSWORD to dane logowania do zarządzania Qpid skonfigurowane w pliku /opt/apigee/customer/application/qpidd.properties lub /opt/apigee/token/application/qpidd.properties (domyślnie guest:guest).
    • Jeśli nazwy kolejek Analytics w qpid-stat -q się różnią, zastąp ax-q-axgroup001-consumer-group-001 i ax-q-axgroup001-consumer-group-001-dl.
    • Aby przenosić wiadomości w partiach, dodaj parametr "limit" do treści żądania JSON (np. "limit": 100000).
    • Jeśli w interfejsie Qpid Management API jest włączony protokół SSL/TLS (conf_qpidd_qpid_management.https.enabled=true), użyj https:// i przekaż --cacert (lub -k) do curl.
  3. Sprawdź dane wyjściowe polecenia. Pomyślne wywołanie zwraca tablicę JSON przeniesionych wewnętrznych identyfikatorów wiadomości:

    [ 3, 4, 5 ]

    Jeśli zwrócona tablica jest pusta ([]), oznacza to, że w kolejce niedostarczonych wiadomości nie ma wiadomości do przeniesienia.

  4. Zaczekaj 5 minut, a potem uruchom /opt/apigee/apigee-qpidd/bin/qpid-stat -q z Typowych czynności diagnostycznych. Sprawdź, czy wiadomości w kolejce głównej (ax-q-axgroup001-consumer-group-001) są przetwarzane i czy Q-Depth(Messages) w kolejce niedostarczonych wiadomości (ax-q-axgroup001-consumer-group-001-dl) pozostaje na poziomie 0.

Edge dla chmury prywatnej w wersji 4.52.x i starszych

  1. Zapisz nazwy kolejek z Typowych czynności diagnostycznych. Na przykład:

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. Uruchom polecenie qpid-tool, aby otworzyć interaktywny wiersz poleceń qpid:

    qpid-tool

    To polecenie zwraca te dane:

    Management Tool for QPID
    qpid:
  3. Uruchom list broker, aby uzyskać listę aktywnych brokerów:

    list broker

    To polecenie zwraca te dane:

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

    Kolumna ID określa identyfikator brokera.

  4. Zapisz identyfikator brokera. W tym przykładzie jest to 125.

  5. Aby przenieść wiadomości z kolejki niedostarczonych wiadomości z powrotem do kolejki głównej, uruchom to polecenie:

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

    To polecenie zwraca te dane:

    OK (0) - {}

    Jeśli nie ma danych wyjściowych, oznacza to, że nie ma nic do zrobienia, czyli nie ma wiadomości do przeniesienia. Jeśli nie widzisz OK (0), skontaktuj się z zespołem pomocy Apigee Edge.

  6. Zamknij terminal qpid-tool:

    quit
  7. Zaczekaj 5 minut, a potem ponownie wykonaj czynności diagnostyczne z Typowych czynności diagnostycznych. Sprawdź, czy wiadomości w kolejce głównej są przetwarzane, i upewnij się, że liczba msg w kolejce niedostarczonych wiadomości pozostaje na poziomie 0.

Jeśli problem nadal występuje, przejdź do następnej sekcji.

Informacje diagnostyczne, które należy zebrać

Jeśli problem nadal występuje po wykonaniu powyższych instrukcji, zbierz te informacje diagnostyczne i udostępnij je zespołowi pomocy Apigee Edge:

  • Logi Qpidd: /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge dla chmury prywatnej w wersji 4.53.00 i nowszych) oraz /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • Logi PostgreSQL: /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Logi edge-qpid-server: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Logi edge-postgres-server: /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Statystyki kolejki Qpidd:

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • Grupa Analytics zwrócona przez to polecenie curl:

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