常见问题
常见问题
- SDK初始化失败
SDK初始化失败,graysdk的run和debug日志会打印初始化失败原因,一般原因有如下几种:
- ETCD服务器配置错误(检查conf/graysdk.properties文件中server配置是否正确)。
- ETCD未启动或者网络原因不可用(检查网络以及ETCD是否正常)。
- ETCD中不存在此微服务名称的灰度配置。
- ETCD未启用用户名/密码认证方式,但是SDK配置了认证(检查conf/graysdk.properties文件是否配置了username)。
- jsonRuleFilePath没有配置。
- 灰度规则匹配失败
- 实际传入的参数和值,不满足配置的微服务灰度规则。
- 灰度开关关闭(检查conf/graysdk.properties文件graySwitch是否为1)。
- 灰度规则执行异常(检查graysdk的debug日志)。
- 联系灰度平台开发人员定位。
- 灰度参数的设置
消费端需要在CSE的invocation设置想要进行灰度的参数,有两种方法:
- 确定需要进行灰度的参数 ,在后端的接口中使用@RequestParam参数来指定。
- 业务直接在消费端设置参数,例如:ContextUtils.getInvocationContext().addContext("x-is-gray", "1")。
第一种方式直接在请求流量的URL中通过设置参数的值来标识灰度流量,第二种是业务在调用SDK之前改变invocation中参数的值来标识灰度。
- 后端灰度节点的判断
后端的节点在自己的microservice.yaml文件中设置参数描述(参照CSE开发网站)。
- 按照版本筛选灰度节点,需要在yaml中的service_description中先定义版本号,然后在管理台上选择按照版本进行灰度,填入定义的版本。
- 按照自定义参数筛选灰度节点,需要在yaml中的instance_description中先自定义灰度参数,并填入值,接着在管理台选择按照自定义参数进行灰度,填入自定义的参数。
附录
- SDK错误码
在调用SDK接口时,出现异常情况时SDK会返回一个GrayException异常,可以通过e.toString()查看详细的异常说明,通过e.getCode()获取异常错误码,同时通过SDK的debug日志可以看到更详细的异常错误信息。
表1 SDK错误码 异常编码
异常原因
异常处理方法
13300
内部处理错误,一般为配置错误导致。
查看graysdk的debug日志,查看error日志,同时联系灰度平台开发人员定位。
13301
参数错误,一般为传入SDK的微服务名称为空或者空串。
- 检查graysdk.properties文件etcd.serviceName配置是否正确。
- 检查graysdk的run日志,查看sdk是否初始化成功。
13302
cloudsoa security解密密码失败。
检查graysdk.properties文件etcd.password是否配置正确。
13303
操作ETCD失败(读取ETCD配置触发异常)。
- 检查graysdk.properties文件etcd.server配置是否正确。
- 检查ETCD服务器是否工作正常。
- 性能统计日志
日志字段默认采用“|” 分隔,一条日志一行,采用“\n”结尾,默认1s(可配置)打印一条。
表2 节点级日志 字段名称
必选(M)/可选(O)
字段说明
时间
M
YYYY-MM-DD<1SP>hh:mm:ss[.SSS]
请求次数
M
周期值,每个周期清零,重新计数。
未进行匹配次数
M
未进行灰度匹配的请求次数。一般为灰度完成、灰度暂停、未开启灰度等。
周期值,每个周期清零,重新计数。
匹配成功次数
M
周期值,每个周期清零,重新计数。
匹配失败次数
M
周期值,每个周期清零,重新计数。
匹配异常次数
M
周期值,每个周期清零,重新计数。
匹配超时次数
M
周期值,每个周期清零,重新计数。
请求平均时延
M
周期内请求的平均时延,单位:微秒。
请求最大时延
M
周期内请求的最大时延,单位:微秒。
请求最小时延
M
周期内请求的最小时延,单位:微秒。
表3 服务级日志 字段名称
必选(M)/可选(O)
字段说明
时间
M
YYYY-MM-DD<1SP>hh:mm:ss[.SSS]
微服务名
M
被调用的微服务名称。
灰度服务名
M
为被调用的微服务名称,或为被调用的微服务的映射服务名称。
请求次数
M
周期值,每个周期清零,重新计数。
未进行匹配次数
M
未进行灰度匹配的请求次数。一般为灰度完成、灰度暂停、未开启灰度等。
周期值,每个周期清零,重新计数。
匹配成功次数
M
周期值,每个周期清零,重新计数。
匹配失败次数
M
周期值,每个周期清零,重新计数。
匹配异常次数
M
周期值,每个周期清零,重新计数。
匹配超时次数
M
周期值,每个周期清零,重新计数。
请求平均时延
M
周期内请求的平均时延,单位:微秒。
请求最大时延
M
周期内请求的最大时延,单位:微秒。
请求最小时延
M
周期内请求的最小时延,单位:微秒。
- 告警日志
日志字段默认采用“|” 分隔,一条日志一行,采用“\n”结尾。
字段名称
必选(M)/可选(O)
字段说明
时间
M
YYYY-MM-DD<1SP>hh:mm:ss[.SSS]
告警ID
M
graysdk000000001-4
告警名称
M
graysdk000000001:gray servers all down alarm
graysdk000000002:etcd connect error
graysdk000000003:gray rule execute exception
graysdk000000004:gray rule execute timeout
本机IP
M
本机IP
告警类别
M
Firing:告警发生
Resolved:告警解除
详细信息
M
告警详细信息
告警方式
M
自动告警
开始时间
M
Firing时,为告警发生时间,Resolved时为0。
结束时间
M
Resolved时,为告警解除时间,Firing时为0。
service.json文件
{ "enableGrayMapping": "1", "services": [{ "name": "demoA", "wgpServiceName": "demoB" }, { "name": "demoC", "wgpServiceName": "demoB" }] }
NUWA配置项
nuwa: wgp: graySwitch: 1 jsonRuleFilePath: /opt/huawei/data/ serviceName: xxxxxx(业务自己配置) sdkServiceUrl: xxxxxxx enableCseGrayFilter: true enableCommonGrayFilter: false reportUrl: http://10.28.0.181:18080/dispatchProxy/v1