您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
問題
由於 Qpidd 伺服器未將數據分析訊息傳輸至 PostgreSQL,因此新版 Edge 使用者介面缺少數據分析資料。在 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 使用者 |
常見診斷步驟
在 Qpid 節點上執行下列指令,查看 Qpidd 佇列統計資料:
/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),則訊息會卡在無效信件佇列中。
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 的無效信件佇列中
診斷
下列情況可能導致這種情況:
- 過去曾進行升級,期間 PostgreSQL 停機。
- PostgreSQL 因網路問題而暫時中斷。
edge-qpid-server嘗試傳送訊息至 PostgreSQL,但 PostgreSQL 傳回執行階段錯誤。
解析度
請按照 Edge for Private Cloud 版本的步驟,將卡住的訊息從無效信件佇列移回主要數據分析佇列。
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)。舊版 qpid-tool CLI 已在 Edge for Private Cloud 4.53.00 以上版本中移除,無法使用。請改用 Apache Qpid Broker-J HTTP Management REST API (moveMessages) 或 Qpid Web Management Console,將訊息從無效信件佇列移回主要數據分析佇列:
記下常見診斷步驟輸出內容中主要佇列和無效信件佇列的確切名稱 (例如
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)。在 Qpid 節點上,執行下列
curl指令,透過 Qpid Broker-J HTTP Management API (預設為連接埠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是在/opt/apigee/customer/application/qpidd.properties或/opt/apigee/token/application/qpidd.properties中設定的 Qpid 管理憑證 (預設為guest:guest)。- 如果
qpid-stat -q中的數據分析佇列名稱不同,請替換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) 已啟用 SSL/TLS,請使用https://,並將--cacert(或-k) 傳遞至curl。
確認指令輸出內容。如果呼叫成功,會傳回已移動內部訊息 ID 的 JSON 陣列:
[ 3, 4, 5 ]
如果傳回的陣列空白 (
[]),表示無效信件佇列中沒有可移動的訊息。請等待 5 分鐘,然後執行常見診斷步驟中的
/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 以下版本
記下常見診斷步驟中的佇列名稱。例如:
ax-q-axgroup-001-consumer-group-001ax-q-axgroup-001-consumer-group-001-dl
執行
qpid-tool指令,進入互動式qpid提示:qpid-tool
這個指令會傳回下列內容:
Management Tool for QPID qpid:
執行
list broker取得有效代理商清單:list broker
這個指令會傳回下列內容:
Object Summary: ID Created Destroyed Index ======================================= 125 21:00:00 - amqp-broker
其中
ID欄會指定代理程式的 ID。記下代理程式的 ID。在範例中為
125。執行下列指令,將訊息從死信佇列移回實際佇列:
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 支援團隊聯絡。退出
qpid-tool終端機:quit
請等待 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
下列 curl 指令傳回的 Analytics 群組:
curl -u sysadminEmail:password http://mgmt:8080/v1/analytics/groups/ax