数据分析信息中心内未显示数据

您正在查看 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 流量

诊断

  1. 检查您尝试查看 Analytics 数据的特定组织-环境在 特定时间段内是否有 API 代理流量,方法如下:
    1. 为用户当前使用的任何 API 启用跟踪,并 检查您是否能够在跟踪中获取任何请求。
    2. 查看 NGINX 访问日志 (/opt/apigee/var/log/edge-router/nginx/logs/access.log) 并查看特定时间段内是否有 API 代理的新条目。
    3. 如果您将 API 代理中的信息记录到日志服务器(例如 Syslog、Splunk、Loggly、 等),则可以检查这些日志服务器中是否有特定时间段内 API 代理的条目。
  2. 如果特定时间段内没有流量(没有 API 请求),则 Analytics 数据不 可用。您会在 Analytics 信息中心内看到“所选日期范围内没有流量”的消息。

解决方案

  1. 对特定组织-环境中的一个或多个 API 代理进行一些调用。
  2. 等待几秒钟,然后在“小时”标签页中查看 Analytics 信息中心,看看是否 显示了数据。
  3. 如果问题仍然存在,请继续执行 Postgres 数据库中有数据,但界面中未显示

Postgres 数据库中有数据,但界面中未显示

问题

首先,确定 Postgres 数据库中是否有最新的 Analytics 数据。

如需检查 Postgres 主节点中是否有最新的 Analytics 数据,请执行以下操作

  1. 登录到每个 Postgres 服务器,然后运行以下命令来验证您是否位于主 Postgres 节点上:
    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql postgres-check-master
  2. 在主 Postgres 节点上,登录到 PostgreSQL:
    psql -h /opt/apigee/var/run/apigee-postgresql -U apigee apigee
  3. 使用 Postgres 数据库中的以下 SQL 查询检查您的组织-环境是否存在表:
    \d analytics."orgname.envname.fact"
  4. 使用以下 SQL 查询检查 Postgres 数据库中是否有最新数据:
    select max(client_received_start_timestamp) from analytics."orgname.envname.fact";
  5. 如果最新的时间戳非常旧(或为 null),则表示 Postgres 数据库中没有 数据。此问题可能的原因是数据未从 Qpid 服务器推送到 Postgres 数据库。请继续执行 Analytics 数据未推送到 Postgres 数据库
  6. 如果主节点上的 Postgres 数据库中有最新数据,请按照 以下步骤诊断数据未在 Edge 界面中显示的原因。

诊断

  1. 在 Chrome 浏览器中启用 开发者工具 ,然后按照以下步骤从 Analytics 信息中心之一获取所用的 API:
    1. 从开发者工具中选择“网络”标签页。
    2. 开始录制。
    3. 重新加载 Analytics 信息中心。
    4. 在开发者工具的左侧面板中,选择包含 “apiproxy?_optimized...” 的行。
    5. 在开发者工具的右侧面板中,选择“标头”标签页,并记下 “请求网址”。
  2. 以下是开发者工具的示例输出:

    示例输出,显示了开发者工具的“网络”标签页中“代理性能”信息中心内使用的 API

  3. 直接运行 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"
  4. 如果您看到成功响应但没有任何数据,则表示 管理服务器由于网络 连接问题而无法从 Postgres 服务器提取数据。
  5. 检查您是否能够从管理服务器连接到 Postgres 服务器:
    telnet Postgres_server_IP_address 5432
  6. 如果您无法连接到 Postgres 服务器,请检查端口 5432 是否有任何防火墙 限制。
  7. 如果有防火墙限制,则可能是管理服务器 无法从 Postgres 服务器提取数据的原因。

解决方案

  1. 如果有防火墙限制,请将其移除,以便管理服务器可以 与 Postgres 服务器通信。
  2. 如果没有防火墙限制,则此问题可能是由于网络故障所致。
  3. 如果管理服务器上存在任何网络故障,则重启管理服务器可能会解决此 问题。
  4. 使用以下命令逐个重启所有管理服务器:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. 检查您是否能够在 Edge 界面中看到 Analytics 数据。

如果您仍然看不到数据,请与 Apigee Edge 支持团队联系。

Analytics 数据未推送到 Postgres 数据库

诊断

如果数据未从 Qpid 服务器推送到 Postgres 数据库(如 Postgres 数据库中有数据,但界面中未显示中所述),请执行 以下步骤:

  1. 执行以下命令,检查每个 Qpid 服务器是否已启动并正在运行:
    /opt/apigee/apigee-service/bin edge-qpid-server status
  2. 如果有任何 Qpid 服务器已停用,请将其重启。否则,请跳到第 5 步。
    /opt/apigee/apigee-service/bin edge-qpid-server restart
  3. 等待一段时间,然后重新检查 Postgres 数据库中是否有最新数据。
    1. 登录到 PostgreSQL:
      psql -h /opt/apigee/var/run/apigee-postgresql -U apigee apigee
    2. 运行以下 SQL 查询,检查是否有最新数据:
      select max(client_received_start_timestamp) from analytics."orgname.envname.fact";
  4. 如果有最新数据,请跳过以下步骤,然后继续执行 “解决方案”部分中的最后一步。如果没有最新数据,请继续执行以下 步骤。
  5. 检查 Qpid 服务器队列中的消息是否已推送到 Postgres 数据库。
    1. 执行 qpid-stat -q command,然后检查 msgInmsgOut 列值。
    2. 以下是示例输出,显示 msgIn 和 msgOut 不相等。这表示 消息未从 Qpid 服务器推送到 Postgres 数据库。

  6. 如果 msgInmsgOut 列不匹配,请检查 Qpid 服务器日志 /opt/apigee/var/log/edge-qpid-server/system.log,看看是否有 任何错误。
  7. 您可能会看到错误消息,例如 "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 服务器,则可能会发生这种情况。

解决方案

  1. 重启 Postgres 服务器和 PostgreSQL,如下所示:
    /opt/apigee/bin/apigee-service edge-postgres-server restart
    
    /opt/apigee/bin/apigee-service apigee-postgresql restart
    
  2. 此重启操作可确保所有之前的 SQL 查询都已停止,并且应允许与 Postgres 数据库建立新 连接。
  3. 重新加载 Analytics 信息中心,并检查是否显示了 Analytics 数据。

如果问题仍然存在,请与 Apigee Edge 支持团队联系。

Analytics 部署不正确

诊断

  1. 使用以下 API 调用获取 Analytics 部署状态:
    curl -u user_email:password http://management_server_host:port
    /v1/organizations/orgname/environments/envname/provisioning/axstatus
  2. 从 API 调用的结果中检查 Qpid 和 Postgres 服务器的状态。
    1. 如果 Qpid 和 Postgres 服务器的状态显示为“SUCCESS”,则表示 Analytics 服务器已正确连接。请继续执行 Analytics 服务器 UUID 过时
    2. 如果 Qpid/Postgres 服务器的状态显示为“UNKNOWN”或“FAILURE”,则表示相应服务器存在问题。

      例如,以下场景显示 Postgres 服务器的状态为 "UNKNOWN":

      如果在 Analytics 上架期间发生故障,则可能会发生这种情况。此故障 会阻止管理服务器中的消息到达 Postgres 服务器。

解决方案

通常,您可以通过重启显示“FAILURE”或 “UNKNOWN”的服务器来解决此问题。

  1. 使用以下命令重启 Analytics 连接状态显示为 "FAILURE" 或 "UNKNOWN" 的每个服务器:
    /opt/apigee/apigee-service/bin/apigee-service component restart
  2. 例如:
    1. 如果您在 Qpid 服务器上看到此问题,请重启 Qpid 服务器:
      /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
    2. 如果您在 Postgres 服务器上看到此问题,请同时重启主 Postgres 服务器节点和从 Postgres 服务器节点:
      /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart
  3. 在上面的示例中,Postgres 服务器显示“UNKNOWN”消息,因此您需要 同时重启主 Postgres 服务器和从 Postgres 服务器:
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart

Analytics 服务器 UUID 过时

诊断

  1. 使用以下 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" : {
      }
    } ]
  2. 确保输出中的以下信息正确无误:
    1. “scopes”元素中列出的组织-环境名称。
    2. Postgres 服务器和 Qpid 服务器的 UUID。
      • 在每个 Postgres 服务器节点上运行以下命令,获取 Postgres 服务器 UUID:
        curl 0:8084/v1/servers/self/uuid
      • 在每个 Qpid 服务器节点上运行以下命令,获取 Qpid 服务器 UUID:
        curl 0:8083/v1/servers/self/uuid
  3. 如果所有信息都正确,请继续执行 Analytics Data 未推送到 Postgres 数据库
  4. 如果 Postgres 和/或 Qpid 服务器的 UUID 不正确,则可能是 管理服务器引用了过时的 UUID。

解决方案

如需移除过时的 UUID 并添加服务器的正确 UUID,请与 Apigee Edge 支持团队联系。