您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 info
问题
Analytics 信息中心(代理性能、目标性能等)在 Edge 界面中不显示任何 数据。所有信息中心都显示以下消息:
No traffic in the selected date range
错误消息
此问题不会导致出现可观察到的错误。
可能的原因
下表列出了此问题的可能原因:
| 原因 | 适用于 |
|---|---|
| 组织-环境没有 API 流量 | 私有云版 Edge 用户 |
| Postgres 数据库中有数据,但未在 界面中显示 | 私有云版 Edge 用户 |
| Analytics 数据未推送到 Postgres 数据库 | 私有云版 Edge 用户 |
| Analytics 部署不正确 | 私有云版 Edge 用户 |
| Analytics 服务器 UUID 过时 | 私有云版 Edge 用户 |
组织-环境没有 API 流量
诊断
- 检查您尝试查看 Analytics 数据的特定组织-环境在
特定时间段内是否有 API 代理流量,方法如下:
- 为用户当前使用的任何 API 启用跟踪,并 检查您是否能够在跟踪中获取任何请求。
- 查看 NGINX 访问日志
(
/opt/apigee/var/log/edge-router/nginx/logs/access.log)并查看特定时间段内是否有 API 代理的新条目。 - 如果您将 API 代理中的信息记录到日志服务器(例如 Syslog、Splunk、Loggly、 等),则可以检查这些日志服务器中是否有特定时间段内 API 代理的条目。
- 如果特定时间段内没有流量(没有 API 请求),则 Analytics 数据不 可用。您会在 Analytics 信息中心内看到“所选日期范围内没有流量”的消息。
解决方案
- 对特定组织-环境中的一个或多个 API 代理进行一些调用。
- 等待几秒钟,然后在“小时”标签页中查看 Analytics 信息中心,看看是否 显示了数据。
- 如果问题仍然存在,请继续执行 Postgres 数据库中有数据,但界面中未显示。
Postgres 数据库中有数据,但界面中未显示
问题
首先,确定 Postgres 数据库中是否有最新的 Analytics 数据。
如需检查 Postgres 主节点中是否有最新的 Analytics 数据,请执行以下操作:
- 登录到每个 Postgres 服务器,然后运行以下命令来验证您是否位于主 Postgres 节点上:
/opt/apigee/apigee-service/bin/apigee-service apigee-postgresql postgres-check-master
- 在主 Postgres 节点上,登录到 PostgreSQL:
psql -h /opt/apigee/var/run/apigee-postgresql -U apigee apigee
- 使用 Postgres
数据库中的以下 SQL 查询检查您的组织-环境是否存在表:
\d analytics."orgname.envname.fact"
- 使用以下 SQL
查询检查 Postgres 数据库中是否有最新数据:
select max(client_received_start_timestamp) from analytics."orgname.envname.fact";
- 如果最新的时间戳非常旧(或为 null),则表示 Postgres 数据库中没有 数据。此问题可能的原因是数据未从 Qpid 服务器推送到 Postgres 数据库。请继续执行 Analytics 数据未推送到 Postgres 数据库。
- 如果主节点上的 Postgres 数据库中有最新数据,请按照 以下步骤诊断数据未在 Edge 界面中显示的原因。
诊断
- 在 Chrome 浏览器中启用 开发者工具
,然后按照以下步骤从 Analytics 信息中心之一获取所用的 API:
- 从开发者工具中选择“网络”标签页。
- 开始录制。
- 重新加载 Analytics 信息中心。
- 在开发者工具的左侧面板中,选择包含 “apiproxy?_optimized...” 的行。
- 在开发者工具的右侧面板中,选择“标头”标签页,并记下 “请求网址”。
- 以下是开发者工具的示例输出:
示例输出,显示了开发者工具的“网络”标签页中“代理性能”信息中心内使用的 API

- 直接运行 Management API 调用,并检查是否获得了结果。以下是“代理性能”信息中心内“天”标签页的示例 API 调用:
curl -u username:password "http://management_server_IP_address:8080/v1/organizations/ org_name/environments/env_name/stats/apiproxy?limit=14400& select=sum(message_count),sum(is_error),avg(total_response_time), avg(target_response_time)&sort=DESC&sortby=sum(message_count),sum(is_error), avg(total_response_time),avg(target_response_time)&timeRange=08%2F9%2F2017+ 18:00:00~08%2F10%2F2017+18:00:00&timeUnit=hour&tsAscending=true"
- 如果您看到成功响应但没有任何数据,则表示 管理服务器由于网络 连接问题而无法从 Postgres 服务器提取数据。
- 检查您是否能够从管理服务器连接到 Postgres 服务器:
telnet Postgres_server_IP_address 5432
- 如果您无法连接到 Postgres 服务器,请检查端口 5432 是否有任何防火墙 限制。
- 如果有防火墙限制,则可能是管理服务器 无法从 Postgres 服务器提取数据的原因。
解决方案
- 如果有防火墙限制,请将其移除,以便管理服务器可以 与 Postgres 服务器通信。
- 如果没有防火墙限制,则此问题可能是由于网络故障所致。
- 如果管理服务器上存在任何网络故障,则重启管理服务器可能会解决此 问题。
- 使用以下命令逐个重启所有管理服务器:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
- 检查您是否能够在 Edge 界面中看到 Analytics 数据。
如果您仍然看不到数据,请与 Apigee Edge 支持团队联系。
Analytics 数据未推送到 Postgres 数据库
诊断
如果数据未从 Qpid 服务器推送到 Postgres 数据库(如 Postgres 数据库中有数据,但界面中未显示中所述),请执行 以下步骤:
- 执行以下命令,检查每个 Qpid 服务器是否已启动并正在运行:
/opt/apigee/apigee-service/bin edge-qpid-server status
- 如果有任何 Qpid 服务器已停用,请将其重启。否则,请跳到第 5 步。
/opt/apigee/apigee-service/bin edge-qpid-server restart
- 等待一段时间,然后重新检查 Postgres 数据库中是否有最新数据。
- 登录到 PostgreSQL:
psql -h /opt/apigee/var/run/apigee-postgresql -U apigee apigee
- 运行以下 SQL 查询,检查是否有最新数据:
select max(client_received_start_timestamp) from analytics."orgname.envname.fact";
- 登录到 PostgreSQL:
- 如果有最新数据,请跳过以下步骤,然后继续执行 “解决方案”部分中的最后一步。如果没有最新数据,请继续执行以下 步骤。
- 检查 Qpid 服务器队列中的消息是否已推送到 Postgres 数据库。
- 执行
qpid-stat -q command,然后检查 msgIn 和 msgOut 列值。 - 以下是示例输出,显示 msgIn 和 msgOut 不相等。这表示
消息未从 Qpid 服务器推送到 Postgres 数据库。

- 执行
- 如果 msgIn 和 msgOut 列不匹配,请检查 Qpid
服务器日志
/opt/apigee/var/log/edge-qpid-server/system.log,看看是否有 任何错误。 - 您可能会看到错误消息,例如 "Probably PG is still down" 或
"FATAL: sorry, too many clients already" ,如下图所示:
2017-07-28 09:56:39,896 ax-q-axgroup001-persistpool-thread-3 WARN c.a.a.d.c.ServerHandle - ServerHandle.logRetry() : Found the exception to be retriable - . Error observed while trying to connect to jdbc:postgresql://PG_IP_address:5432/apigee Initial referenced UUID when execution started in this thread was a1ddf72f-ac77-49c0-a1fc-d0db6bf9991d Probably PG is still down. PG set used - [a1ddf72f-ac77-49c0-a1fc-d0db6bf9991d] 2017-07-28 09:56:39,896 ax-q-axgroup001-persistpool-thread-3 WARN c.a.a.d.c.ServerHandle - ServerHandle.logRetry() : Could not get JDBC Connection; nested exception is org.postgresql.util.PSQLException: FATAL: sorry, too many clients already 2017-07-28 09:56:53,617 pool-7-thread-1 WARN c.a.a.d.c.ServerHandle - ServerHandle.logRetry() : Found the exception to be retriable - . Error observed while trying to connect to jdbc:postgresql://PG_IP_address:5432/apigee Initial referenced UUID when execution started in this thread was a1ddf72f-ac77-49c0-a1fc-d0db6bf9991d Probably PG is still down. PG set used - [a1ddf72f-ac77-49c0-a1fc-d0db6bf9991d] 2017-07-28 09:56:53,617 pool-7-thread-1 WARN c.a.a.d.c.ServerHandle - ServerHandle.logRetry() : Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (FATAL: sorry, too many clients already)
如果 Postgres 服务器运行的 SQL 查询过多,或者 CPU 运行 过高,因而无法响应 Qpid 服务器,则可能会发生这种情况。
解决方案
- 重启 Postgres 服务器和 PostgreSQL,如下所示:
/opt/apigee/bin/apigee-service edge-postgres-server restart
/opt/apigee/bin/apigee-service apigee-postgresql restart
- 此重启操作可确保所有之前的 SQL 查询都已停止,并且应允许与 Postgres 数据库建立新 连接。
- 重新加载 Analytics 信息中心,并检查是否显示了 Analytics 数据。
如果问题仍然存在,请与 Apigee Edge 支持团队联系。
Analytics 部署不正确
诊断
- 使用以下 API 调用获取 Analytics 部署状态:
curl -u user_email:password http://management_server_host:port /v1/organizations/orgname/environments/envname/provisioning/axstatus
- 从 API 调用的结果中检查 Qpid 和 Postgres 服务器的状态。
- 如果 Qpid 和 Postgres 服务器的状态显示为“SUCCESS”,则表示 Analytics 服务器已正确连接。请继续执行 Analytics 服务器 UUID 过时。
- 如果 Qpid/Postgres 服务器的状态显示为“UNKNOWN”或“FAILURE”,则表示相应服务器存在问题。
例如,以下场景显示 Postgres 服务器的状态为 "UNKNOWN":

如果在 Analytics 上架期间发生故障,则可能会发生这种情况。此故障 会阻止管理服务器中的消息到达 Postgres 服务器。
解决方案
通常,您可以通过重启显示“FAILURE”或 “UNKNOWN”的服务器来解决此问题。
- 使用以下命令重启 Analytics 连接状态显示为 "FAILURE" 或 "UNKNOWN" 的每个服务器:
/opt/apigee/apigee-service/bin/apigee-service component restart
- 例如:
- 如果您在 Qpid 服务器上看到此问题,请重启 Qpid 服务器:
/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
- 如果您在 Postgres 服务器上看到此问题,请同时重启主 Postgres 服务器节点和从
Postgres 服务器节点:
/opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart
- 如果您在 Qpid 服务器上看到此问题,请重启 Qpid 服务器:
- 在上面的示例中,Postgres 服务器显示“UNKNOWN”消息,因此您需要
同时重启主 Postgres 服务器和从 Postgres 服务器:
/opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart
Analytics 服务器 UUID 过时
诊断
- 使用以下 API 调用获取 Analytics 配置:
curl -u user_email:password http://management-server-host:port/v1/analytics/groups/ax
以下是上述 API 的示例输出:
[ { "name" : "axgroup001", "properties" : { "consumer-type" : "ax" }, "scopes" : [ "myorg~prod", "myorg~test" ], "uuids" : { "aries-datastore" : [ ], "postgres-server" : [ "6777...2db14" ], "dw-server" : [ ], "qpid-server" : [ "774e...fb23", "29f3...8c11" ] }, "consumer-groups" : [ { "name" : "consumer-group-001", "consumers" : [ "774e...8c11" ], "datastores" : [ "6777...db14" ], "properties" : { } } ], "data-processors" : { } } ]
- 确保输出中的以下信息正确无误:
- “scopes”元素中列出的组织-环境名称。
- Postgres 服务器和 Qpid 服务器的 UUID。
- 在每个
Postgres 服务器节点上运行以下命令,获取 Postgres 服务器 UUID:
curl 0:8084/v1/servers/self/uuid
- 在每个 Qpid
服务器节点上运行以下命令,获取 Qpid 服务器 UUID:
curl 0:8083/v1/servers/self/uuid
- 在每个
Postgres 服务器节点上运行以下命令,获取 Postgres 服务器 UUID:
- 如果所有信息都正确,请继续执行 Analytics Data 未推送到 Postgres 数据库。
- 如果 Postgres 和/或 Qpid 服务器的 UUID 不正确,则可能是 管理服务器引用了过时的 UUID。
解决方案
如需移除过时的 UUID 并添加服务器的正确 UUID,请与 Apigee Edge 支持团队联系。