ข้อมูล Analytics ติดอยู่ในคิวจดหมายที่ส่งไม่ได้ของ Qpidd

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

ลักษณะปัญหา

ไม่มีข้อมูล Analytics ใน UI ของ Edge ใหม่เนื่องจากเซิร์ฟเวอร์ Qpidd ไม่ได้โอนข้อความ Analytics ไปยัง PostgreSQL ใน Edge คอมโพเนนต์ edge-qpid-server จะสอดคล้องกับเซิร์ฟเวอร์ Qpidd

Qpidd จะดูแลคิว 2 คิวสำหรับกลุ่ม Analytics แต่ละกลุ่ม ดังนี้

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

    คิวนี้เก็บข้อความ Analytics ที่พุชจาก 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 for Private Cloud

ขั้นตอนการวินิจฉัยที่พบบ่อย

เรียกใช้คำสั่งต่อไปนี้ในโหนด Qpid เพื่อดูสถิติคิว Qpidd

/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 for Private Cloud 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 for 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 เวอร์ชันของคุณเพื่อย้ายข้อความที่ติดค้างจากคิวข้อความที่ส่งไม่ได้กลับไปยังคิว Analytics หลัก

Edge for Private Cloud 4.53.00 ขึ้นไป (รวมถึง 4.54.00)

Edge for Private Cloud 4.53.00 ขึ้นไป (รวมถึง 4.54.00) ใช้ Apache Qpid Broker-J (10.0.1 ใน 4.54.00 และ 8.0.6 ใน 4.53.x) CLI qpid-tool แบบเดิมจะถูกนำออกใน Edge for Private Cloud 4.53.00 ขึ้นไปและจะใช้ไม่ได้ ให้ใช้ Apache Qpid Broker-J HTTP Management REST API (moveMessages) หรือ Qpid Web Management Console แทนเพื่อย้ายข้อความจากคิวข้อความที่ส่งไม่ได้กลับไปยังคิว Analytics หลัก โดยทำดังนี้

  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 หากชื่อคิว Analytics ใน qpid-stat -q แตกต่างกัน
    • หากต้องการย้ายข้อความเป็นชุด ให้ใส่ "limit" ในเนื้อหาคำขอ JSON (เช่น "limit": 100000)
    • หากเปิดใช้ SSL/TLS ใน Qpid Management API (conf_qpidd_qpid_management.https.enabled=true) ให้ใช้ https:// และส่ง --cacert (หรือ -k) ไปยัง curl
  3. ตรวจสอบเอาต์พุตจากคำสั่ง การเรียกที่สำเร็จจะแสดงผลอาร์เรย์ JSON ของรหัสข้อความภายในที่ย้ายแล้ว

    [ 3, 4, 5 ]

    หากอาร์เรย์ที่แสดงผลว่างเปล่า ([]) แสดงว่าไม่มีข้อความในคิวข้อความที่ส่งไม่ได้ให้ย้าย

  4. รอ 5 นาที แล้วเรียกใช้ /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. รอ 5 นาที แล้วทำตามขั้นตอนการวินิจฉัยอีกครั้งจาก ขั้นตอนการวินิจฉัยที่พบบ่อย ตรวจสอบว่าระบบกำลังประมวลผลข้อความในคิวจริง และตรวจสอบว่าจำนวน msg ของข้อความที่ส่งไม่ได้ยังคงเป็น 0

หากยังพบปัญหาอยู่ ให้ไปที่ส่วนถัดไป

ข้อมูลการวินิจฉัยที่ต้องรวบรวม

หากยังพบปัญหาอยู่หลังจากทำตามวิธีการข้างต้นแล้ว ให้รวบรวมข้อมูลการวินิจฉัย ต่อไปนี้และแชร์กับ ทีมสนับสนุนของ Apigee Edge:

  • บันทึกของ Qpidd: /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge for 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-server: /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • สถิติคิว Qpidd:

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • กลุ่ม Analytics ที่แสดงผลโดยคำสั่ง curl ต่อไปนี้

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