全部产品

故障排查

更新时间:2020-11-06 17:32:02

服务网格的常见问题汇总如下:


如何排查服务注册/服务发现出现的问题?

排查步骤如下:

  1. 首先确认以下信息是否填写正确,是否是对应的 workspace 的信息:
    • InstanceId:中间件实例唯一标识。
    • AntVIP:中间件基于 AntVIP 寻址。
    • Access Key ID:访问控制键。
    • Access Key Secret:访问控制密钥。
  2. 如果以上信息没错,则排查服务注册/发现的链路。服务注册/发现排查的顺序是:应用 > MOSN > 注册中心。

    注意:下述进入容器中排查的操作,都需要获取对应用户 workspace 的 kubeconfig。

    • 应用

      1. 进入应用容器,-c 后面是应用服务的名称故障排查1

      2. 查看 MOSN 的注册端口是否开启:curl -v http://127.0.0.1:13330

      3. 进入日志目录:/home/admin/logs。各种框架,日志名称可能不同,但是日志目录都是相同的。如 Dubbo 和 Spring Cloud 的日志文件是 spring.log。
      4. 搜索关键字 dataId 或者 EnterpriseMeshRegistry。故障排查2故障排查3
    • MOSN

      1. 进入 mosn-sidecar-container故障排查4
      2. 找到日志:/home/admin/logs/mosn/default.log
      3. 搜索 system config init,查看用户配置的四元组信息是否正确。故障排查5
      4. 搜索 dataId 或 registry,查看服务是否成功注册。故障排查6
      5. 查看注册中心的通知接口是否打开:netstat -anp | grep 9600故障排查7

如何排查服务限流问题?

限流的配置,是微服务的 DsrConsole,通过 DRM 下发到 MOSN 中的。排查步骤如下:

  1. 通过产品层查看应用的推送配置和推送记录DRM详情
  2. 查看 DsrConsole(中间件租户):进入日志目录 /home/admin/logs/ 查看是否有错误日志。
  3. 查看 MOSN:
    1. 找到日志:/home/admin/logs/mosn/default.log
    2. 搜索关键字:应用名、方法名、serviceRateLimitConfig 等。查看 value 中的内容是否和用户前端填写的内容一致。
      1. find *.log | grep -rn "Alipay.cloudMeshTestJavaServer:name=com.alipay.guardian.client.sofa.drm.GuardianDrm.serviceRateLimitConfig,version=3.0@DRM"
      DRM详情2

如何排查服务路由问题?

路由的配置,是微服务的 DsrConsole,通过 OpenAPI 下发到 K8S 的 default namespace 中,通过 pilot ListAndWatch 对应 CR 资源的变化,通知到 MOSN。排查步骤如下:

  1. DsrConsole(中间件租户):

    1. 进入日志目录:/home/admin/logs/
    2. 通过关键字查询配置:通过 SigmaRouterRuleDispatcher 或者 dataId,查看 body 的内容和用户配置的内容是否一致。路由1
  2. Cloud Mesh OpenAPI:

    • 如果步骤 1 返回值非 200,则查看报错的具体信息,并做相应处理。如 404 cluster not find 表示查不到 K8S 的集群信息,请 提交工单
    • 如果是 token 或者 endpoint 不正确,请 提交工单
  3. K8S:查看 CR 的内容,判断具体的内容是否和用户填写的一致。

    • CR 在用户 K8S 集群的 default namespace 下面。
    • 路由相关的 CR 是 virtualservices 和 destinationrules。路由2
  4. Pilot:

    1. 查看日志,检查 PILOT_SERVER_ADDRESS 指向的地址是否能到达,如不能,请 提交工单。异常日志示例如下:
      1. 2019-10-11 17:01:24,236 [ERROR] [normal] fail to create stream client: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp xxx.xxx.xxx.xxx:xxx: i/o timeout"
    2. 查看日志,检查 Pilot 授权是否通过,如未通过,请 提交工单,检查 InstanceId 和 AK/SK。异常日志示例如下:
      1. 2019-10-11 17:07:12,518 [WARN] [xds] [ads client] get resp timeout: rpc error: code = Unknown desc = missing auth part of service node "xxx", retry after 1s
    3. 检查 MOSN 是否收到 XDS 内容。可通过 curl [podIP]:34901/api/v1/config_dump 获取。如无内容或者内容缺失,请 提交工单
  5. MOSN:主要检查路由的配置是否下发到服务消费者,排查步骤如下。

    1. 进入服务消费者的 MOSN 容器,通过关键字 dataId 或者 xds,查看版本号和权重是否正确。路由3
    2. 执行命令:find default.log | grep -rn "xds",示例如下。路由4