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:返回记录的对象列表
决策点
-
interface:
bmc.kepler.Object.Observability
新增property:TraceSamplingRate用于表示对象跟踪采样率, double类型, 默认值为0.0,跟随系统全局采样率, 取值为(0.0 - 1.0]时使用对象自身的采样策略, 1.0为全采样 -
path:
/bmc/kepler/MdbService
interface:bmc.kepler.Mdb
新增method:GetPropertyMatchedObjects用于查询满足接口、属性、属性值条件的对象 -
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 | 获取满足属性筛选条件的对象的列表 | 不支持匹配复杂数据类型 |
评审结论
- 同意新增接口
bmc.kepler.Object.Observability,并新增属性TraceSamplingRate,签名为d,只读,读权限:ReadOnly,不发送变更通知事件 - 同意
/bmc/kepler/MdbService下的接口bmc.kepler.Mdb新增方法
GetPropertyMatchedObjects,请求签名:ssvb,响应签名:a(sssv),权限为ReadOnly,用于获取满足属性筛选条件的对象的列表 - 同意新增mdbctl公共命令trace,命令格式为:
trace [object [rate]]