Analytics (分析) 資料在 Qpidd 無效信件佇列中停滯

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。
info

問題

由於 Qpidd 伺服器未將 Analytics 訊息傳輸至 PostgreSQL,因此 Edge UI 中缺少 Analytics 資料。在 Edge 中,edge-qpid-server 元件對應於 Qpidd 伺服器。

Qpidd 會為每個 Analytics 群組維護兩個佇列:

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

    這個佇列會保留從訊息處理器和路由器推送的 Analytics 訊息。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-stat -q

輸出內容會傳回向代理程式註冊的佇列集。如果名稱結尾為「-dl」的佇列已填入訊息,表示無效信件佇列中有訊息遭到擱置。

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 傳回執行階段錯誤。

解析度

  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 欄會指定仲介服務的 ID。

  4. 記下仲介服務的 ID。在本範例中為 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 分鐘,然後從「常見診斷步驟」再次執行診斷步驟。確認實際佇列中的訊息正在處理中,並確保無效郵件訊息計數維持在 0。

如果問題仍未解決,請參閱下節說明。

必須收集診斷資訊

如果按照上述指示操作後問題仍未解決,請收集下列診斷資訊。請聯絡 Apigee Edge 支援團隊並提供下列資訊:

  • Qpidd 記錄:/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 佇列統計資料:

    qpid-stat -q
  • 下列 curl 指令傳回的 Analytics 群組:

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