您正在查看 Apigee Edge 文档。
转到
Apigee X 文档。 info
问题
使用 Statistics Collector 政策创建的自定义变量在 Edge 界面中的 Analytics 自定义报告的“自定义维度”下不可见。
错误消息
对于路径缺失的每个 组织/环境组合,edge-postgres-server 系统日志在重启后都会显示以下错误:
KeeperErrorCode = NoNode for /organizations/<ORG>/environments/<ENV>/properties 2018-03-29 16:14:48,980 pool-10-thread-2 ERROR ZOOKEEPER - ZooKeeperServiceImpl.getData() : Could not get data for path: /organizations//environments/ /properties, reason: KeeperErrorCode = NoNode for /organizations/ /environments/ /properties
可能的原因
| 原因 | 说明 | 适用的问题排查说明 |
|---|---|---|
| 组织和环境组合缺少 Zookeeper 属性路径。 | 如果缺少 ZooKeeper 路径 /organizations/
,则无法创建自定义维度。 |
Edge Private Cloud 用户 |
原因:组织和环境组合缺少 ZooKeeper 属性路径
诊断
通过
启用 Analytics API为组织-环境组合启用 Analytics,这会在 ZooKeeper 树中填充 /organizations/
。如果此 API 失败,edge-postgres-server 组件将无法创建自定义维度,并且其 system.log 中会显示以下错误:
KeeperErrorCode = NoNode for /organizations/example/environments/prod/properties 2018-03-29 16:14:48,980 pool-10-thread-2 ERROR ZOOKEEPER - ZooKeeperServiceImpl.getData() : Could not get data for path: /organizations/example/environments/prod/properties, reason: KeeperErrorCode = NoNode for /organizations/digi/environments/sandbox/properties
通常,当组织在存在多个使用相同 postgres-server UUID 的 Analytics 组时加入时,会发生这种情况。如需检查存在多少个 Analytics 组,请运行以下 API 调用:
curl -u username:password "http://management-server-host:8080/v1/analytics/groups/ax"
如果此 API 返回多个组,则很可能是导致此问题的原因。 在以下示例中,请注意存在两个组,它们仅通过连字符来区分:axgroup-001 和 axgroup001
[ {
"name" : "axgroup-001",
"properties" : {
},
"scopes" : [ "VALIDATE~test" ],
"uuids" : {
"qpid-server" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
"postgres-server" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ]
},
"consumer-groups" : [ {
"name" : "consumer-group-001",
"consumers" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
"datastores" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ],
"properties" : {
}
} ],
"data-processors" : {
}
}, {
"name" : "axgroup001",
"properties" : {
},
"scopes" : [ "example~prod" ],
"uuids" : {
"qpid-server" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
"postgres-server" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ]
},
"consumer-groups" : [ {
"name" : "consumer-group-001",
"consumers" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
"datastores" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ],
"properties" : {
}
} ],
"data-processors" : {
}具体而言,如果为每个 axgroup 配置的 postgres-server UUID 相同,则会导致此问题。一种快速确定方法是运行以下命令:
curl -u username:password "http://management-server-host:8080/v1/analytics/groups/ax"|grep -B7 "postgres-server"
以下示例输出快速比较了 postgres-server UUID,以确定它们是否相同:
{ "name" : "axgroup-001", "properties" : { }, "scopes" : [ "VALIDATE~test" ],
"uuids" : { "qpid-server" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
"postgres-server" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ]--
"name" : "axgroup001", "properties" : { }, "scopes" : [ "myorg~prod" ],
"uuids" : { "qpid-server" : [ "94c96375-1ca7-412d-9eee-80fda94f6e07" ],
"aries-datastore" : [ ], "postgres-server" : [ "8ee86b70-5b33-44b6-b2f8-1b0ec0ec8d77" ],解决方案
不能将同一组 PostgreSQL 服务器分配给两个 axgroup 。 最快的解决方案是从一个 axgroup 中删除 postgres 服务器信息,并将所有范围(组织、环境组合)分配给另一个组。为此,请按照以下步骤操作:
- 按照 Analytics 组中添加和删除 Analytics 组件 中的说明,从两个 axgroup 之一中移除 postgres 服务器组件。如果您仅在非生产范围中遇到问题,请选择不包含任何生产范围的 axgroup 。否则,请选择范围数量最少的 axgroup。
- 从不再包含任何 postgres 服务器的 axgroup 中移除所有范围,并从其 axgroup 中移除您遇到自定义维度问题的范围。假设上述示例中的
axgroup-001是您要使用的组,您必须使用以下命令移除 myorg 组织和 prod 环境的范围:curl -u username:password -X DELETE 'http://management-server-host:8080/v1/analytics/groups/ax/axgroup001/scopes?org=myorg&env=prod'
- 使用 启用 Analytics API启用 Analytics。
- 使用以下命令在 postgres 主节点上重启 edge-postgres-server 组件,以及您可能已安装的所有
edge-qpid-server 组件:
/opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
- 验证 Postgres 服务器的日志文件
/opt/apigee/var/log/edge-postgres-server/logs/system.log中是否不再出现上述 错误消息 部分中提供的错误。 - 确认自定义维度是否显示在 Edge 界面中。
如果问题仍然存在,请前往必须收集的诊断信息。
必须收集的诊断信息
如果按照之前的说明操作后问题仍然存在,请收集以下诊断信息。与 Apigee Edge 支持团队联系并分享这些信息:
- edge-postgres-server
/opt/apigee/var/log/edge-postgres-server/logs/system.log,从上次重启时开始。 - 以下 Management API 调用的输出:
curl -u username:password "http://management-server-host:8080/v1/analytics/groups/ax"
- 使用以下命令获取的 ZooKeeper 树的输出:
/opt/apigee/apigee-zookeeper/contrib/zk-tree.sh > zktree-output.txt