Qpidd डेड लेटर सूची में अटके हुए Analytics डेटा

Apigee Edge का दस्तावेज़ देखा जा रहा है.
Apigee X के दस्तावेज़ पर जाएं.
info

समस्या का ब्यौरा

New Edge यूज़र इंटरफ़ेस (यूआई) में Analytics का डेटा मौजूद नहीं है, क्योंकि Qpidd सर्वर, Analytics के मैसेज को PostgreSQL में ट्रांसफ़र नहीं कर रहा है. Edge में, edge-qpid-server कॉम्पोनेंट, Qpidd सर्वर से जुड़ा होता है.

Qpidd, हर Analytics ग्रुप के लिए दो सूची रखता है:

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

    इस सूची में, मैसेज प्रोसेसर और राऊटर से भेजे गए आंकड़ों के मैसेज होते हैं. मैसेज यहां से 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 पर खत्म होने वाली किसी क्यू में मैसेज मौजूद हैं (Edge for Private Cloud 4.53.00 और इसके बाद के वर्शन में Q-Depth(Messages) या Edge for Private Cloud 4.52.x और इससे पहले के वर्शन में msg), तो मैसेज डेड लेटर क्यू में अटक जाते हैं.

Private Cloud 4.53.00 और इसके बाद के वर्शन (इसमें 4.54.00 और Apache Qpid Broker-J शामिल है) के लिए, Edge में आउटपुट का उदाहरण:

+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+
|               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 का इस्तेमाल किया जाता है (4.54.00 में 10.0.1 और 4.53.x में 8.0.6). Edge for Private Cloud 4.53.00 और इसके बाद के वर्शन में, लेगसी qpid-tool CLI को हटा दिया गया है. इसलिए, इसका इस्तेमाल नहीं किया जा सकता. इसके बजाय, 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 कमांड चलाएं. इससे Qpid Broker-J एचटीटीपी मैनेजमेंट एपीआई (डिफ़ॉल्ट रूप से पोर्ट 8090) के ज़रिए, डेड लेटर सूची पर moveMessages कार्रवाई को शुरू किया जा सकेगा:

    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 में कॉन्फ़िगर किया जाता है.
    • अगर qpid-stat -q में मौजूद आपके Analytics के कतार के नाम अलग-अलग हैं, तो ax-q-axgroup001-consumer-group-001 और ax-q-axgroup001-consumer-group-001-dl को बदलें.
    • मैसेज को बैच में मूव करने के लिए, JSON अनुरोध के मुख्य हिस्से में "limit" शामिल करें. उदाहरण के लिए, "limit": 100000.
    • अगर Qpid Management API (conf_qpidd_qpid_management.https.enabled=true) पर एसएसएल/टीएलएस चालू है, तो https:// का इस्तेमाल करें और curl को --cacert (या -k) पास करें.
  3. कमांड आउटपुट की पुष्टि करें. कॉल सफल होने पर, एक जगह से दूसरी जगह ले जाए गए इंटरनल मैसेज आईडी का JSON कलेक्शन दिखता है:

    [ 3, 4, 5 ]

    अगर रिटर्न किया गया कलेक्शन खाली ([]) है, तो इसका मतलब है कि डेड लेटर सूची में कोई मैसेज नहीं था.

  4. पांच मिनट इंतज़ार करें. इसके बाद, समस्या हल करने के सामान्य तरीके में जाकर, /opt/apigee/apigee-qpidd/bin/qpid-stat -q को चलाएं. पुष्टि करें कि मुख्य कतार (ax-q-axgroup001-consumer-group-001) में मौजूद मैसेज प्रोसेस किए जा रहे हैं और डेड लेटर कतार (ax-q-axgroup001-consumer-group-001-dl) में मौजूद Q-Depth(Messages), 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 प्रॉम्प्ट डालने के लिए, qpid-tool निर्देश चलाएं:

    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. पांच मिनट इंतज़ार करें. इसके बाद, समस्या का पता लगाने के सामान्य तरीके में दिए गए तरीके से, समस्या का पता लगाने की प्रोसेस फिर से शुरू करें. पुष्टि करें कि असली क्यू में मौजूद मैसेज प्रोसेस किए जा रहे हैं. साथ ही, यह पक्का करें कि डेड लेटर 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
  • यहां दिए गए curl निर्देश से, Analytics ग्रुप की जानकारी मिलती है:

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