微服务管理
微服务管理提供服务注册查询,服务治理(路由、限流、熔断降级)、调用链查询功能。可以帮助用户对微服务应用的实时监控和高可用性服务保障。
服务列表
服务列表中,展示当前在注册中心注册的服务信息,及已配置服务治理规则的服务信息。
查看服务信息
1、登录CNAP控制台
2、在左侧功能菜单栏,点击【微服务管理】下【服务列表】,进入服务列表页
3、选择需要查看的工作空间 可以通过右侧的查询框,可选择具体的服务或者应用进行查看
列表信息:
- 服务名称:当前工作空间下服务在注册中心注册的服务名
- 实例数: 当前工作空间下注册该服务的实例数
- 服务类型:服务的类型,如:Spring Cloud、Mesh等。目前CNAP平台支持Spring Cloud微服务,Mesh微服务
- 操作:查看注册该服务的实例信息、配置治理规则(路由、限流、熔断)
点击目标服务前“ ” ,展开服务下应用信息(应用名、应用实例数)
注意:应用停止或删除,会导致微服务离线。 如果此前服务配置了治理规则,在服务列表中会保留失效的服务信息,同时会提示服务无效。 如果用户需要删除该离线服务信息,需要先清理当前服务下配置的治理规则(路由、限流)。
查看服务实例列表
在服务列表中目标服务的【操作】列,点击【实例列表】,进入实例列表页
实例信息:
- 实例ID:服务实例ID
- 实例IP:服务实例的IP(该IP为容器组的容器网络IP)
- 所在区域:服务实例所属集群的区域
- 协议类型:服务实例支持的通信协议类型
- 端口号:注册提供服务的端口号
- 应用名称:此实例所属的应用名称
- 标签:实例对应的标签,例如:部署组
服务治理
目前CNAP平台提供服务治理策略有:路由、限流、熔断。
路由
路由功能提供微服务之间调用的流量控制,用户可以指定微服务之间的访问。 当不创建任何路由规则时,默认同工作空间同环境中的微服务可以互相访问。 创建路由规则时,路由规则在provider(服务提供方)创建,用来对来自不同consumer(服务消费方)的流量进行路由。
注意:
- 当创建了多条路由规则时,后创建的规则将优先生效
- 规则的启停、创建、删除、编辑操作需等待30秒生效
查看路由规则
在服务列表页,选择provider(服务提供方),【操作】列中,点击【路由】,进入路由规则页面
展示信息:
- 规则名称: 创建规则时自定义的名称
- 规则描述: 对配置的规则的描述信息
- 是否启用: 该条规则是否生效
- 操作: 移除(删除该规则)、编辑(变更路由规则)
添加路由规则
- 登录CNAP控制台
- 在左侧功能菜单栏,选择【服务列表】-【操作】-【路由】,进入路由列表
- 单击路由列表上【添加规则】
- 规则名称:路由规则名称,不超过30个字符
流量来源:consumer(服务消费方)的信息
- 服务名: 选择流量来源的服务,即consumer(服务消费方)服务名
-
筛选条件:流量来源仅支持单条筛选条件
- 标签名: 支持以应用名、部署组名或者区域作为标签筛选流量来源
- 逻辑关系: 目前仅支持等于
- 标签值:选择应用或者部署组的名称
- 操作:删除
满足服务名和标签名筛选条件的所有实例将成为该条路由规则的流量来源。
流量目的:provider(服务提供方)的信息
- 服务名: provider(服务提供方)的服务名
- 分配策略: 目前仅支持按权重分配
-
筛选条件:流量目的支持多条筛选条件
- 应用名: 流量目的的应用名
- 标签名:仅支持部署组作为标签
- 逻辑关系:目前仅支持等于
- 标签值:部署组名称
- 优先级:数字越小优先级越高,当高优先级没有任何实例时,流量才会分配到低优先级的实例。相同优先级实例之间按照权重分配流量(SDK2.0.1.1以上版本支持此功能,2.0.1.1以下版本无法编辑优先级,仅支持权重)
- 权重:分配到该组实例的流量权重
- 操作:删除
-
负载均衡策略: 流量分配到满足筛选条件的所有实例的分配策略,包括随机、轮询、加权轮询、平均响应时间
- 随机:随机分配到所有实例
- 轮询:轮询分配到所有实例
- 加权轮询:会将频繁访问出错的实例剔除,一定时间段后该实例将继续加入可访问的实例中,继续通过轮询算法选择
- 平均响应时间:基于各个实例在一定时间窗内响应的平均时间计算权重,响应时间越小的实例被选择的概率越大
- 是否启用:路由规则创建后是否开始生效
编辑路由规则
- 在路由规则页面,单击目标规则【操作】中的【编辑】,进入修改路由规则页面
- 可修改的信息包括:
- 规则名称
- 流量来源的筛选条件
- 流量目的的筛选条件
- 负载均衡策略
- 是否启用
删除路由规则
在路由规则页面,提供单一路由规则删除和批量规则删除功能。 单一规则删除:单击目标路由规则的【操作】中【移除】,确认后删除。 批量删除:选择需要删除的路由规则,单击页面功能【删除规则】,确认后删除。
限流
限流规则在provider(服务提供方)中配置,用于防止大流量冲击导致服务故障,或防止单个consumer(服务消费方)占用provider(服务提供方)过多资源,而对指定对象进行流量限制的治理策略。目前CNAP平台提供基于QPS的限流功能,限流对象的维度包括方法级和实例级。
注意:
- 规则的启停、创建、删除、编辑操作需等待30秒生效
- 同一个provider(服务提供方)服务下,相同的应用名+部署组名+方法只能配置一条限流规则
查看限流规则
在服务列表页,选择provider(服务提供方),【操作】列中,点击【限流】,进入限流规则页面。
展示信息:
- 规则名称: 创建规则时自定义的名称
- 规则描述: 对配置的规则的描述信息
- 是否启用: 该条规则是否生效
- 操作: 移除(删除该规则)、编辑(变更限流规则)
添加限流规则
- 登录CNAP控制台。
- 在左侧功能菜单栏,选择【服务列表】-【操作】-【限流】,进入限流规则列表。
- 单击列表上【添加规则】。
基本信息
- 规则名称:规则名称,不超过30个字符
-
流量来源:基于一组条件,对请求进行筛选,满足所有筛选条件的请求,将会受到该限流规则的限制
- 标签名:支持以应用名、部署组名、服务名或者区域作为筛选条件
- 逻辑关系:支持等于、不等于、包含、不包含
- 标签值:选择应用名、部署组名或者服务名
- 删除:可以添加多条筛选规则或删除
限流对象
- 服务名:限流对象即需要限流的provider(服务提供方)
-
筛选条件:
- 应用名:限流的provider(服务提供方)应用名
- 部署组:限流的provider(服务提供方)部署组名
- 方法:需要限流的具体方法(方法名支持手动输入,或者从以注册的方法中选择)
- 限流配置:支持以QPS作为限流条件,限制流量来源访问限流对象的最大QPS
- 是否启用:规则创建后是否开始生效
编辑限流规则
- 在限流规则页面,单击目标规则【操作】中的【编辑】,进入修改限流规则页面。
- 可修改的信息包括:
- 规则名称
- 流量来源筛选条件
- 限流配置
- 是否启用
删除限流规则
在限流规则页面,提供单一限流规则删除和批量规则删除功能。 单一规则删除:单击目标限流规则的【操作】中【移除】,确认后删除。 批量删除:选择需要删除的限流规则,单击限流列表页上功能【删除规则】,确认后删除。
熔断
熔断提供了微服务的保护策略,当provider(服务提供方)返回的错误比例过高时,暂时中断流量,防止引发调用链雪崩。熔断策略在consumer(服务消费方)中进行配置。
注意:
- 同一个consumer(服务消费方)中,相同的provider(服务提供方)服务名+方法,只允许配置一条熔断规则
- 规则的启停、创建、删除、编辑操作需等待30秒生效
查看熔断规则
在服务列表页,选择消费方服务,【操作】列中,点击【熔断】,进入熔断页面
- 规则名称:熔断规则名称
- 熔断方式:自动熔断或者手动熔断
- 规则描述:熔断规则的具体策略描述
- 是否启用:该条熔断规则是否生效
- 操作:编辑或删除熔断规则
添加熔断规则
在熔断规则页面,点击列表左上方的【添加规则】按钮,进入添加熔断规则页面
基本信息
- 规则名称:熔断规则名称,不超过30个字符
-
熔断对象筛选条件:筛选来自consumer(服务消费方)的请求,满足所有筛选条件的请求将被该条规则熔断。()
- 标签名:支持按应用名、部署组名或区域进行筛选
- 逻辑关系:支持等于、不等于、包含、不包含
- 标签值:选择筛选的应用名称或者部署组名称
-
请求的服务筛选条件:支持指定服务或方法筛选,或者全部服务和方法筛选。当某条请求同时匹配多条熔断规则时,只会命中最细粒度的规则。
- 服务名:被访问的服务名称
- 方法:被访问的方法(需要手动输入完整的方法名,不支持正则匹配)
- 熔断方式:自动熔断或者手动熔断。手动熔断立即生效,自动熔断将在熔断条件触发时生效
- 熔断时长:自动熔断时,熔断触发的持续时间
熔断条件:当选择自动熔断时,需要配置自动熔断的触发条件
- 窗口请求数:用于判断熔断是否触发的请求数窗口
- 异常比例阈值:当请求数达到窗口数值时,判断是否熔断的异常请求比例阈值
- 是否启用:熔断规则是否开始生效
编辑熔断规则
- 在熔断规则页面,单击目标规则【操作】中的【编辑】,进入熔断规则页面。
- 可修改的信息包括:
- 规则名称
- 熔断对象筛选条件
- 熔断方式和条件
- 是否启用
删除熔断规则
在熔断规则页面,提供单一熔断规则删除和批量规则删除功能。 单一规则删除:单击目标熔断规则的【操作】中【移除】,确认后删除。 批量删除:选择需要删除的熔断规则,单击熔断列表页上功能【删除规则】,确认后删除。
调用链
调用链用于查询服务的链路状态信息,在服务出现故障时,能帮助您快速定位到问题所在。调用链支持Spring Cloud应用和Mesh应用的相互调用。 调用链功能包括调用链查询和调用链详情展示。
调用链查询
1、登录CNAP控制台。
2、在左侧功能菜单栏,点击【微服务管理】下的【调用链】,进入链路查询页面。
3、设置查询条件进行查询。查询支持模糊查询和TraceID查询。
模糊查询
查询条件:
- 时间范围:可选固定时间(近10分钟、近30分钟、近1小时、近1天、近3天)。或选自定义,可自定义选时间段。
- 服务名:选择当前工作空间下的目标服务名。
- 应用名:选择服务下的目标应用名。
- 部署组:选择目标应用下的部署组。
- 入口方法:选择目标部署组下的入口方法名。
- 实例ID:(可选) 目标部署的单一实例ID。
- 状态码:(可选)全部,200、500或手动输入状态码,默认为“全部”。
- 返回结果数:默认值100,最大值500。
- 耗时:根据调用链的耗时进行过滤。
查询结果如下:
展示TraceId、日志时间、调用耗时、状态码、实例ID、方法名。
TraceID查询
已知traceID的情况下,可以直接通过traceID进行查询。
查询条件:
- 时间范围:可选固定时间(近10分钟、近30分钟、近1小时、近1天、近3天)。或选自定义,可自定义选时间段。
- traceID:要查询的traceID
查询结果如下:
调用链详情
调用链详情可以展示单条Trace的链路状况。在通过”模糊查询“或”traceID查询“获取的查询结果中,点击相应的traceID字段,即可查看相关的调用详情。查询结果展示TraceId的调用链路信息,包括每次调用的应用名、服务名、状态、耗时、所在实例ID。 在时间轴上根据调用的先后顺序展示该TraceId每个调用环节的耗时情况。
全息日志
通过全息日志功能,用户可以在调用链详情的操作栏查看每条调用记录关联的调用日志信息。调用链与日志的关联通过匹配TraceID和SpanID来实现,需要用户手动进行配置。
应用日志注入调用链信息
对于Spring Cloud应用,将调用链信息注入日志依赖SLF4J的MDC(Mapped Diagnostic Contexts)功能,因此用户需要在应用中使用SLF4J集成日志框架。使用SLF4J后,用户需要手动在日志的配置文件中进行调用链信息的关联配置。以logback为例,需要在pattern的配置中添加调用链相关字段:
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}: [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
请按照上面“%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}”,即“TraceId,SpanId”的格式进行调用链字段的配置。
对于Mesh应用,需要用户在应用的请求头中获取TraceId和SpanId,请求头对应的key分别为X-B3-TraceId和X-B3-SpanId,然后按照“TraceId,SpanId”的格式将该信息打印在每条需要捕获的日志中。 以go语言为例,需要在代码中添加如下的日志内容:
log.Printf("traceId and spanId: %s,%s", req.Header.Get("X-B3-TraceId"), req.Header.Get("X-B3-SpanId"))
配置日志采集策略
在部署组运维配置里的“日志数据源”中,添加应用需要采集的数据源: 在“日志采集策略”中,使用组件中心的内置ES采集日志数据(目前只支持集群内建的ES)。可按需配置多行采集策略(如采集Java应用打印在日志中的多行堆栈信息,选择默认的“日志样例1”,可支持上文示例中pattern的多行采集。其它格式需要分情况手动修改进行适配)
查看全息日志
点击调用链详情中某条调用右侧操作栏中的”全息日志“按钮,即可查看关联的日志信息: