全链路灰度可观测问题排查
使用全链路灰度时,可能遇到流量不符合预期的场景。本文介绍如何进行流量筛选和分析。
前提条件
已创建泳道组。具体操作,请参见创建泳道组。
背景信息
您在使用全链路灰度时,可能遇到流量不符合预期的场景,常见的问题如下所示。
在某一链路,例如A→B→C,调用B的流量本应流向Bgray节点,却流向了base节点。
在整个链路上,某个流量应该都流向gray节点,但是都流向了base节点(zuul→Abase→Bbase→Cbase)。原因如下所示:
Agent没有生效。
流量打标错误,流量打标没有透传。

步骤一:开启全链路灰度可观测
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择 。
在泳道组区域,单击
图标,然后在编辑泳道组页面,打开采集需求详情开关。
步骤二:流量筛选
根据不符合预期的流量特征,找到对应的流量以及trace。
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择 。
在全链路灰度页面,单击查看流量详情,然后单击请求详情。
支持的筛选项如下所示。
时间:最近N分钟、固定时间段。
泳道应用:流量经过的应用。
流量标签:为流量添加的标签。
节点标签:流量经过的节点标签。
请求接口:流量经过时流向的接口。
示例
问题 | 解决方案 |
在某一链路,例如A→B→C,调用B的流量本应流向Bgray节点,但是却流向了Base节点。 | 选择 |
在整条链路上,某个流量本应都流向gray节点,但是却都流向了base节点(zuul→Abase→Bbase→Cbase)。 | 选择 |
步骤三:流量分析
分析流量每一跳的路由走向和行为,并分析不符合预期的原因。
流量打标
打空标的日志
打特定标的日志
展示了标签值,是否透传。
路由行为
行为1:

mse.app.tag:当前为base环境。
mse.tag:当前流量为gray流量。
[netflix.loadbalancer] :框架为netflix。
call sc-A:代表调用sc-A服务。
get canary Server(gray) :已找到gray服务。
[192.168.17.121:20001] :符合条件的provider列表。
(gray):找到了gray Server,没有fallback。
key:统一为
<timestamp>-canary
。mse.interface.name
:请求的接口。
行为2:

与行为1存在以下区别。
调用的机器是gray机器(Agray),流量标mse.tag表示当前流量为gray流量。
get base server不同,本示例为[sc.loadbalancer]call sc-B fallback, get base server [192.168.17.122:20002,192.168.17.123:20002]。
通过spring cloud loadbalancer调用sc-B,发生了Fallback,没有匹配到Bgray。
如果路由期间发生错误,也会在span中记录message。
下图代表出现多个调用的情况,例如A同时调用B和C。

如果您设置的规则有问题,则对应流量会匹配到空标。您需要检查流量规则。
如果对应节点没有注册成功,则流量走向日志能够看到按照哪个标签、走到了哪些机器、有没有Fallback机器。您也可以定位到某一跳,查看该过程的路由结果以及是否Fallback等。