接上一篇,我们继续讨论基于grafana整合并展示skywalking(简称SW)提供的监控项,样例为,对指定服务(Service)的请求处理延时(response time)进行展示,并显示历史数据和实时数据的能力。
可分解为以下具体需求
1) 获取所有服务(Services)名,并显示为下拉列表
2) 对用户指定的Service的服务名,获得Service Id
3) 根据指定指定服务(Service Id)和时间范围(from… to…)获得请求延时数据,并以时间序列图展示
dashboard前期准备和基本变量添加不赘述,可参考https://skywalking.apache.org/zh/2023-03-17-build-grafana-dashboards-for-apache-skywalking-native-promql-support/
-
添加变量Service 类型query ,dataSource是已配置的Graphql数据源,查询语句(Query)如下,其中变量KaTeX parse error: Expected group after '_' at position 1: _̲_from和__to是grafana提供的全局变量(global variable)参考官方手册(https://grafana.com/docs/grafana/latest/dashboards/variables/add-template-variables/#__from-and-__to):
query {queryData:
getAllServices(
duration:{start: “KaTeX parse error: Expected group after '_' at position 1: _̲_from",end: "__to”, step: MINUTE}
) {
name
}
}
Query对应Data path就是语句中的queryData
regex 是按正则表达式对结果筛选,这里用的最简单,/服务名1|服务名2/过滤出需要的服务
-
编辑panel
导入查询获得数据,并经过一定的加工后,以适当的方式展示
查询语句的设计可以参考https://juejin.cn/post/7014328464924737572
具体如下:
query {queryData:
readMetricsValues(
duration: {start: “KaTeX parse error: Expected group after '_' at position 2: {_̲_from:date:YYYY…{__to📅YYYY-MM-DD HHmm}”, step: MINUTE},
condition: {
name: “service_resp_time”,
entity: {
scope: Service,
serviceName: “$service”
normal: true
}
}
) {
label values{ values{ id value }}
}
}
简单说明:
readMetricsValues是SW提供的按时间序列查询指标的函数,service_resp_time是SW提供的oal查询指标,查服务执行的延时。
KaTeX parse error: Expected group after '_' at position 2: {_̲_from:date:YYYY…__from按指定的time format转换,同样可以参照上文的链接, ${_to📅YYYY-MM-DD HHmm}同理
$service上文设置的变量,含义是根据用户选择的服务查询!
然后要做的是把结果转换成grafana可读的时间序列,注意如果不转换结果是这样的,这样的格式是无法生成时间序列的
| label |value_0 | value_1|…
| |service_resp_time_时间戳…id.0|XXX |service_resp_time_时间戳…id.1|XXX|…
根据查询返回值{label values{ values{ id value }}}的结构,知
1) Data path: 填 queryData.values.values 就可以获得
id value
service_resp_time_时间戳…id.0|XXX|
service_resp_time_时间戳…_id.1|XXX|.
…
- 需要把id转成时间戳
点击Transform 选择convert field type
安图操作即可
然后apply 并保存dashboard后成功,时间序列可以生成
可以选择右上角时间范围,看不同区间的时序图
后续我们继续探索…