Data analisis macet di antrean surat mati Qpidd

Anda melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Gejala

Data analisis tidak ada di UI Edge Baru karena server Qpidd tidak mentransfer pesan analisis ke PostgreSQL. Di Edge, komponen edge-qpid-server sesuai dengan server Qpidd.

Qpidd mempertahankan dua antrean untuk setiap grup analisis:

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

    Antrean ini menyimpan pesan analisis yang dikirim dari Pemroses Pesan dan Router. Pesan diambil dari sini oleh edge-qpid-server yang mengurai pesan dan memasukkannya ke PostgreSQL. Setelah berhasil diproses, pesan akan dihapus dari antrean.

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

    Antrean ini adalah antrean pesan yang tidak terkirim. Antrean ini bertindak sebagai tujuan untuk pesan yang gagal diproses oleh edge-qpid-server dan dengan demikian tidak lagi ingin diterima. Antrean ini biasanya diisi saat jumlah pengiriman maksimum terlampaui, atau jika PostgreSQL menolak penyisipan data baru karena error runtime.

Pesan Error

Penyebab utamanya bisa jadi karena berbagai error runtime dari komponen edge-qpid-server. Biasanya, jika edge-qpid-server menerima error runtime dari PostgreSQL, antrean pesan yang tidak terkirim akan dibuat jika belum ada, lalu mengirim pesan berikut ke sana:

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.

Kemungkinan Penyebab

Penyebab Deskripsi Petunjuk Pemecahan Masalah yang Berlaku Untuk
Pesan yang terhenti di antrean pesan yang tidak terkirim qpidd edge-qpid-server tidak dapat memahami pesan yang dibacanya dari broker Qpidd atau tidak dapat mempertahankan pesan ke PostgreSQL. Pengguna Edge Private Cloud

Langkah-Langkah Diagnosis Umum

Jalankan perintah berikut di node Qpid untuk melihat statistik antrean Qpidd:

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

Output akan menampilkan kumpulan antrean yang terdaftar di broker. Jika antrean dengan nama yang diakhiri dengan -dl memiliki pesan yang diisi (Q-Depth(Messages) di Edge untuk Private Cloud 4.53.00 dan yang lebih baru, atau msg di Edge untuk Private Cloud 4.52.x dan yang lebih lama), pesan akan terhenti di antrean pesan yang tidak terkirim.

Contoh output di Edge untuk Private Cloud 4.53.00 dan yang lebih baru (termasuk 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   |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+

Contoh output di Edge untuk Private Cloud 4.52.x dan yang lebih lama (broker C++qpidd lama):

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

Penyebab: Pesan yang terhenti di antrean pesan yang tidak terkirim qpidd

Diagnosis

Kondisi ini dapat terjadi dalam skenario berikut:

  1. Upgrade telah dilakukan pada masa lalu, saat PostgreSQL tidak berfungsi.
  2. Gangguan sementara PostgreSQL karena masalah jaringan.
  3. edge-qpid-server mencoba mengirim pesan ke PostgreSQL, tetapi PostgreSQL menampilkan error runtime.

Resolusi

Ikuti langkah-langkah untuk versi Edge for Private Cloud Anda guna memindahkan pesan yang terhenti dari antrean pesan yang tidak terkirim kembali ke antrean analisis utama.

Edge for Private Cloud 4.53.00 dan yang lebih baru (termasuk 4.54.00)

Edge for Private Cloud 4.53.00 dan yang lebih baru (termasuk 4.54.00) menggunakan Apache Qpid Broker-J (10.0.1 di 4.54.00 dan 8.0.6 di 4.53.x). CLI qpid-tool lama dihapus di Edge untuk Private Cloud 4.53.00 dan yang lebih baru serta tidak dapat digunakan. Sebagai gantinya, gunakan Apache Qpid Broker-J HTTP Management REST API (moveMessages) atau Qpid Web Management Console untuk memindahkan pesan dari antrean pesan yang tidak terkirim kembali ke antrean analisis utama:

  1. Catat nama persis antrean utama dan antrean pesan yang tidak terkirim dari output Langkah-Langkah Diagnosis Umum (misalnya, ax-q-axgroup001-consumer-group-001 dan ax-q-axgroup001-consumer-group-001-dl, atau ax-q-axgroup-001-consumer-group-001 dan ax-q-axgroup-001-consumer-group-001-dl).

  2. Di node Qpid, jalankan perintah curl berikut untuk memanggil operasi moveMessages di antrean pesan yang tidak terkirim melalui Qpid Broker-J HTTP Management API (port 8090 secara default):

    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

    Dengan:

    • QPID_USER dan QPID_PASSWORD adalah kredensial pengelolaan Qpid yang dikonfigurasi di /opt/apigee/customer/application/qpidd.properties atau /opt/apigee/token/application/qpidd.properties (defaultnya adalah guest:guest).
    • Ganti ax-q-axgroup001-consumer-group-001 dan ax-q-axgroup001-consumer-group-001-dl jika nama antrean analisis Anda di qpid-stat -q berbeda.
    • Untuk memindahkan pesan dalam batch, sertakan "limit" dalam isi permintaan JSON (misalnya, "limit": 100000).
    • Jika SSL/TLS diaktifkan di Qpid Management API (conf_qpidd_qpid_management.https.enabled=true), gunakan https:// dan teruskan --cacert (atau -k) ke curl.
  3. Verifikasi output perintah. Panggilan yang berhasil akan menampilkan array JSON dari ID pesan internal yang dipindahkan:

    [ 3, 4, 5 ]

    Jika array yang ditampilkan kosong ([]), tidak ada pesan di antrean pesan yang tidak terkirim untuk dipindahkan.

  4. Tunggu 5 menit, lalu jalankan /opt/apigee/apigee-qpidd/bin/qpid-stat -q dari Langkah-Langkah Diagnosis Umum. Pastikan pesan di antrean utama (ax-q-axgroup001-consumer-group-001) sedang diproses dan Q-Depth(Messages) di antrean pesan yang tidak terkirim (ax-q-axgroup001-consumer-group-001-dl) tetap di 0.

Edge for Private Cloud 4.52.x dan yang lebih lama

  1. Catat nama antrean dari Langkah-Langkah Diagnosis Umum. Contoh:

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. Jalankan perintah qpid-tool untuk memasukkan perintah qpid interaktif:

    qpid-tool

    Perintah ini akan menampilkan hal berikut:

    Management Tool for QPID
    qpid:
  3. Jalankan list broker untuk mendapatkan daftar broker aktif:

    list broker

    Perintah ini akan menampilkan hal berikut:

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

    Dengan kolom ID yang menentukan ID broker.

  4. Catat ID broker. Dalam contoh ini, ID-nya adalah 125.

  5. Jalankan perintah berikut untuk memindahkan pesan dari antrean pesan yang tidak terkirim kembali ke antrean sebenarnya:

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

    Perintah ini akan menampilkan hal berikut:

    OK (0) - {}

    Jika tidak ada output, berarti tidak ada yang perlu dilakukan, yang berarti tidak ada pesan untuk dipindahkan. Jika Anda tidak melihat OK (0), Anda harus menghubungi Dukungan Apigee Edge.

  6. Tutup terminal qpid-tool:

    quit
  7. Tunggu 5 menit, lalu jalankan kembali langkah-langkah diagnosis dari Langkah-Langkah Diagnosis Umum. Pastikan pesan di antrean sebenarnya sedang diproses dan pastikan jumlah msg pesan yang tidak terkirim tetap di 0.

Jika masalah masih berlanjut, buka bagian berikutnya.

Informasi Diagnostik yang Harus Dikumpulkan

Jika masalah berlanjut setelah mengikuti petunjuk sebelumnya, kumpulkan informasi diagnostik berikut dan bagikan kepada Dukungan Apigee Edge:

  • Log Qpidd: /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge untuk Private Cloud 4.53.00 dan yang lebih baru) dan /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • Log PostgreSQL: /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Log Edge-qpid-server: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Log Edge-postgres-server: /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Statistik antrean Qpidd:

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • Grup analisis yang ditampilkan oleh perintah curl berikut:

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