首页 微服务引擎 MSE 微服务治理 全链路灰度 全链路灰度可观测问题排查

全链路灰度可观测问题排查

使用全链路灰度时,可能遇到流量不符合预期的场景。本文介绍如何进行流量筛选和分析。

前提条件

已创建泳道组。具体操作,请参见创建泳道组

背景信息

您在使用全链路灰度时,可能遇到流量不符合预期的场景,常见的问题如下所示。

  • 在某一链路,例如A→B→C,调用B的流量本应流向Bgray节点,却流向了base节点。

  • 在整个链路上,某个流量应该都流向gray节点,但是都流向了base节点(zuul→Abase→Bbase→Cbase)。原因如下所示:

    • Agent没有生效。

    • 流量打标错误,流量打标没有透传。

1678966761725-325a5e9f-796a-4771-9adf-b3c4875dd69c

步骤一:开启全链路灰度可观测

  1. 登录MSE治理中心控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择治理中心 > 全链路灰度

  3. 泳道组区域,单击2023-03-24_10-57-12图标,然后在编辑泳道组页面,打开采集需求详情开关。

    2023-03-24_10-44-23image

步骤二:流量筛选

根据不符合预期的流量特征,找到对应的流量以及trace。

  1. 登录MSE治理中心控制台,并在顶部菜单栏选择地域。

  2. 在左侧导航栏,选择治理中心 > 全链路灰度

  3. 全链路灰度页面,单击查看流量详情,然后单击请求详情

    支持的筛选项如下所示。

    • 时间:最近N分钟、固定时间段。

    • 泳道应用:流量经过的应用。

    • 流量标签:为流量添加的标签。

    • 节点标签:流量经过的节点标签。

    • 请求接口:流量经过时流向的接口。

    image

示例

问题

解决方案

在某一链路,例如A→B→C,调用B的流量本应流向Bgray节点,但是却流向了Base节点。

选择泳道应用:B,选择节点标签:base。如果确定流量添加了gray标签,则可以选择流量标签:gray。接口需选择应用B提供的接口,例如/b

在整条链路上,某个流量本应都流向gray节点,但是却都流向了base节点(zuul→Abase→Bbase→Cbase)。

选择泳道应用:A;选择问题接口,如果在A上则为/a;选择节点标签:base。如果确定流量打了gray标签,则可以选择流量标签:gray

步骤三:流量分析

分析流量每一跳的路由走向和行为,并分析不符合预期的原因。

流量打标

  • 打空标的日志

    image
  • 打特定标的日志

    展示了标签值,是否透传。

    image

路由行为

行为1:

image
  • 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:

image

与行为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。

image
说明
  • 如果您设置的规则有问题,则对应流量会匹配到空标。您需要检查流量规则。

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

阿里云首页 微服务引擎 相关技术圈