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

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

問題

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

Qpidd 針對每個數據分析群組維護兩個佇列:

  • 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。 邊緣私有雲使用者

常見診斷步驟

執行下列指令,查看 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