您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档。 信息
问题
由于 Qpidd 服务器未将分析消息传输到 PostgreSQL,因此 Analytics 数据在边缘界面中缺失。在 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 的死信队列中
诊断
以下情况下可能会发生此情况:
- 过去进行过升级,在此期间 PostgreSQL 出现故障。
- 由于网络问题而导致 PostgreSQL 临时中断。
edge-qpid-server
尝试向 PostgreSQL 发送消息,但 PostgreSQL 返回运行时错误。
分辨率
记下常见诊断步骤中的队列名称。例如:
ax-q-axgroup-001-consumer-group-001
ax-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 分钟,然后再次运行常见诊断步骤中的诊断步骤。验证实际队列中的消息是否得到处理,并确保死信消息计数保持为 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 命令返回的 Google Analytics(分析)组:
curl -u sysadminEmail:password http://mgmt:8080/v1/analytics/groups/ax