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。 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