
# 常见问题
#### 常见问题
- SDK初始化失败 SDK初始化失败，graysdk的run和debug日志会打印初始化失败原因，一般原因有如下几种：
  - ETCD服务器配置错误（检查conf/graysdk.properties文件中server配置是否正确）。
  
  - ETCD未启动或者网络原因不可用（检查网络以及ETCD是否正常）。
  
  - ETCD中不存在此微服务名称的灰度配置。
  
  - ETCD未启用用户名/密码认证方式，但是SDK配置了认证（检查conf/graysdk.properties文件是否配置了username）。
  
  - jsonRuleFilePath没有配置。
   
- 灰度规则匹配失败 调用SDK接口执行灰度规则匹配失败，一般原因有如下几种：
  - 实际传入的参数和值，不满足配置的微服务灰度规则。
  
  - 灰度开关关闭（检查conf/graysdk.properties文件graySwitch是否为1）。
  
  - 灰度规则执行异常（检查graysdk的debug日志）。
  
  - 联系灰度平台开发人员定位。
   
- 灰度参数的设置 消费端需要在CSE的invocation设置想要进行灰度的参数，有两种方法：
  - 确定需要进行灰度的参数 ，在后端的接口中使用@RequestParam参数来指定。
  
  - 业务直接在消费端设置参数，例如：ContextUtils.getInvocationContext().addContext("x-is-gray", "1")。
  
  
  第一种方式直接在请求流量的URL中通过设置参数的值来标识灰度流量，第二种是业务在调用SDK之前改变invocation中参数的值来标识灰度。
  
- 后端灰度节点的判断 后端的节点在自己的microservice.yaml文件中设置参数描述（参照[CSE开发网站](https://servicecomb.apache.org/references/java-chassis/zh_CN/build-provider/definition/service-definition.html)）。
  - 按照版本筛选灰度节点，需要在yaml中的service_description中先定义版本号，然后在管理台上选择按照版本进行灰度，填入定义的版本。
  
  - 按照自定义参数筛选灰度节点，需要在yaml中的instance_description中先自定义灰度参数，并填入值，接着在管理台选择按照自定义参数进行灰度，填入自定义的参数。
   
 
#### 附录
- SDK错误码 在调用SDK接口时，出现异常情况时SDK会返回一个GrayException异常，可以通过e.toString()查看详细的异常说明，通过e.getCode()获取异常错误码，同时通过SDK的debug日志可以看到更详细的异常错误信息。
  表1SDK错误码 
  | 异常编码  | 异常原因                       | 异常处理方法                                                                                                                                                                                                                                                                   |
  |:---|:---|:---|
  | 13300 | 内部处理错误，一般为配置错误导致。          | 查看Gray SDK的debug日志，查看error日志，同时联系灰度平台开发人员定位。                                                                                                                                                                                                                             |
  | 13301 | 参数错误，一般为传入SDK的微服务名称为空或者空串。 | 1. 检查graysdk.properties文件etcd.serviceName配置是否正确。  2. 检查Gray SDK的run日志，查看sdk是否初始化成功。   |
  | 13302 | cloudsoa security解密密码失败。   | 检查graysdk.properties文件etcd.password是否配置正确。                                                                                                                                                                                                                               |
  | 13303 | 操作ETCD失败（读取ETCD配置触发异常）。    | 1. 检查graysdk.properties文件etcd.server配置是否正确。  2. 检查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
  ```
  
 
