使用 metrics + bosun 配置grafana界面

Grafana 给当前页面配置变量是在右上角的settings里:

在这里的变量支持多种“源”:

如果你想用bosun语句来配置图表的话,首先你要确定好的bosun,我以我们的一个sli公式为例:

1
((1 - (fv(nv((fv(nv(q("sum:1m-sum-none:top-1000-avg:bytedtrace.sdk.span.client.rate{}{_is_error=1,_to_service=AAA}","10800s","0s"),0),0) + fv(nv(q("sum:1m-sum-none:top-1000-avg:bytedtrace.sdk.span.client.rate{}{_biz_status_code=not_sliteral_or(0),_is_error=0,_to_service=AAA}","10800s","0s"),0),0)),0),0) / fv((nv(fv(nv(q("sum:1m-sum-none:top-1000-avg:bytedtrace.sdk.span.client.rate{}{_to_service=AAA}","10800s","0s"),0),0),0) + 1e-9),0))) * 100)

这个公式就是算一个SLI成功率,认为AAA这个应用而言,_is_error=1_biz_status_code=not_sliteral_or(0) and _is_error=0是不OK的,那么减掉这些流量拿到的成功率,就是这个应用的SLI。

但是一个一个写公式太累了,我们就可以用上面做的变量来替换。具体方法见图:

如果你觉得多根线在一个图里太难看了,看不出来啥,那么你可以使用repeat,这样它就会去读你的变量,针对每一个变量来生成一个一模一样的图片,但是repeat出来的图是不能edit的,只能edit第一个图:

但是如果一个图里可以放多根线,那么依旧是添加query即可:

grafana的变量可以用在多个地方,甚至可以放到row的名称里,比如:

如果你有不同的row,每一个row除了通用的变量之外,还要读取单独的变量,那么你就只能分开设定不同的变量。然后对应不同的row的bosun公式在repeat的地方配置上不同的变量即可:

如果是你想用bosun来得到一些满足条件的结果,比如延迟大于18000的队列:

首先你要配置好对应的变量,然后bosun就是这样:

1
2
3
4
$metric = des.mq.handler.latency.pct99
$queryA = q("max:1m-avg-zero:$metric{res=suc,op=req,stage=replay,id=$need_filter,direction=literal_or($direction),caller=$caller,type=$type,cluster=$cluster}","2m","1m") / 1000000000
$base = filter($queryA,avg($queryA) >$abnormal_delay)
$base

以graph的形式输出,鼠标放到y轴就能看到队列细节了。

如果你觉得bosun太难了,只是想单纯的选择mertics来配置,那么你需要确认好你的租户,以及具体的mertics指标,比如“tce.container.cpu_usage.mt”。然后对应选择好你的条件,这些条件都是根据数据库的实际情况实际字段来填写的:


如果是mertics,想要“一图多线”,就直接用XXX literal_or (AAA|BBB|ccc),group by = true的方式就行,但是在bosun里是不行的!因为group by的公式不是这么写的,具体怎么写我也还没弄清楚,所以boson我都是单图少线,mertics才是一图多线。

这里还有一点要注意,就是降采样聚合方式,建议如果你的“聚合方式”用的是p99,那么“降采样聚合方式”也用p99。如果“聚合方式”用的是avg,那么“降采样聚合方式”也用avg,他俩同步。

感谢你请我喝咖啡~

Welcome to my other publishing channels