【已评审】支持指定与查询资源树对象跟踪采样率

ISSUE链接

支持指定与查询资源树对象跟踪采样率-mdb_interface-GitCode

背景

trace & span

trace即为一条跟踪链路,简单讲就是跟踪一条完整的rpc调用流程,span就是组成一条trace链路的最小单元,我们通常在一个函数内预埋一个span记录一个函数入口到函数退出,存在调用关系的函数中的span会创建父子关系,span在上报时会带上在函数执行过程中向span记录的信息,并在可视化界面将这条调用链路上的所有span整合为一条调用链清晰的链路,开发与维护人员就可以通过可视化界面查看这次调用的信息,便于定位问题。

采样背景

当前trace链路的构造通过在函数内部进行span的预埋打点,如果全部默认创建会导致上报数量过多影响性能及可观测性可定位性,当前策略为默认不创建span,只有存在父级span或指定了采样率的span才会创建span进行跟踪。采样率用于限制span的上报比例,当某些rpc为高频调用对象时,完整采样某个对象的时创建的span数量也很多,此时需要根据采样率按照一定比例创建span,但依然遵循父span创建则子span一定创建,即整条调用链路只有在起始处创建root span时采样率会生效,后续链路上的所有span都遵循root span的采样率。

使能与查询功能

User -> mdbctl: trace sampling obj rate[0-1]
mdbctl -> 组件A(rpc服务端): 调用对应对象的set方法修改TraceSamplingRate属性为[0-1]
组件A(rpc服务端) -> SHM: 属性值变化时会刷新到共享内存

# 根据采样率策略创建span,采样率(0-1]
if parent span
组件A: 创建child span
else
组件A: 创建root span
end

# 采样率为0使用系统全局采样率
if parent span
组件A: 创建child span
else
组件A: 根据系统采样率
end

组件A -> 组件B: 上下文传递spancontext
组件B: 创建child span

User -> mdbctl: trace sampling
mdbctl -> maca: 调用GetPropertyMatchedObjects查询满足`TraceSamplingRate不为0`的对象及对应采样率
maca -> SHM: 到共享内存查询
SHM --> maca: 返回数据
maca --> mdbctl:返回记录的对象列表

决策点

  1. interface: bmc.kepler.Object.Observability
    新增property: TraceSamplingRate用于表示对象跟踪采样率, double类型, 默认值为0.0,跟随系统全局采样率, 取值为(0.0 - 1.0]时使用对象自身的采样策略, 1.0为全采样

  2. path: /bmc/kepler/MdbService
    interface: bmc.kepler.Mdb
    新增method: GetPropertyMatchedObjects用于查询满足接口、属性、属性值条件的对象

  3. mdbctl 新增Release公共命令 trace用于对指定对象应用trace模式
    Usage: 4. trace <operation> [object [rate]]
    operation: 必选参数,表示trace的具体操作类型,当前取值范围为[“sampling”]
    object: 可选参数, 表示trace操作的目标,如果是资源协作接口对象名称,则表示该操作只作用于特定的对象, 如果是资源协作接口类名,表示该操作作用于此类所有对象,不指定时为查询当前操作已经生效的目标
    rate: 可选参数, 表示操作类型为sampling时对目标的采样率,double类型,取值范围[0.0-1.0],默认值为1.0

示例:

% trace sampling Object_0
Success

% trace sampling Object_1 0.8
Success

% trace sampling
Object_0  1
Object_1  0.8

描述

属性名称 变化类型 签名 访问权限 持久化 变化通知 属性值来源 说明 约束
TraceSamplingRate 新增属性 d 只读,读权限:readOnly 不涉及 false 表示该对象当前的跟踪采样率 [0.0 - 1.0]
方法名称 变化类型 请求签名 请求参数说明 响应签名 响应参数说明 访问权限 说明 约束
GetPropertyMatchedObjects 新增方法 ssvb s(Interface): 接口名,s(Property): 属性名,v(Value): 属性值,b(PositiveMatch): 是否正匹配 a(sssv) a(sssv):字符串数组结构,匹配的 [ObjectName,Service,Path,PropertyValue] ReadOnly 获取满足属性筛选条件的对象的列表 不支持匹配复杂数据类型

评审结论

  1. 同意新增接口bmc.kepler.Object.Observability,并新增属性TraceSamplingRate,签名为d,只读,读权限:ReadOnly,不发送变更通知事件
  2. 同意/bmc/kepler/MdbService下的接口bmc.kepler.Mdb新增方法
    GetPropertyMatchedObjects,请求签名:ssvb,响应签名:a(sssv),权限为ReadOnly,用于获取满足属性筛选条件的对象的列表
  3. 同意新增mdbctl公共命令trace,命令格式为:
    trace [object [rate]]
1 个赞

1、背景描述需要明确清晰:
1.1、当前主要实现调用跟踪的主动跟踪功能(默认关闭),其他跟踪策略(默认打开),包括末端采样、周期采样、全采样等后续陆续支持。
1.2、主动采样主要包括两种场景,一类是由上级系统、组件或模块触发,传递spanContext,一类是由开发、测试或运维人员主动启用指定观察对象的调用跟踪
2、需要对在线调试命令的交互过程给出明确描述
2.1、从使用者角度来说,这里更适合作为通用命令,从系统角度使能和去使能指定对象的调用跟踪,如果需要连接到指定组件,无法观察到系统上全部的跟踪对象
2.2、以时序图的方式简要描述使能和查询的流程
2.3、需要考虑跟踪使能的上限以及性能的影响,建议约束最大使能数量
2.4、需要提供批量去使能的能力

1 个赞

这里需要说明必选参数operation的取值范围

operation为必选参数,不能使用方括号表示

double类型,不要使用整数来表示数值,容易产生误解,建议修改成0.0,1.0。