Grafana ESDOC一对多变量

  |  
阅读次数
  |  
字数 600
  |  
时长 ≈ 2 分钟

1.需求场景

需要添加一个Grafana变量,让一条ES的Document在Grafana展示时,可以出现在不同的变量筛选结果上。

2.需求效果

新建的变量名为“功能类”,需求值为(ALL、查询类、办理类、故障类、通用域)
我ES索引里面,一条Doc通过变量筛选后,可以对应多个功能类。

A -> 查询类、故障类
B -> 查询类
C -> 查询类、故障类、通用域

这里如果我们使用查询类的变量值进行筛选,应该出来A、B、C三条记录,如果使用故障类进行筛选,那出来的记录应该是A、C。

3.实现思路

  1. 在Doc上面加入新的Field,存储doc对应的功能类范围,例如上面的查询类、故障类 以及 查询类、故障类、通用域
  2. 在Grafana上新建Custom类型的变量,手动写上四个变量值。这里变量不适合使用Query类型,因为如果使用Query只能查出来查询类、故障类、通用域这种我们保存在文档里面的原始数据,而我们展示是需要每个种类单独展示的。
  3. 修改Grafana Panel,在查询语句上面使用模糊查询,将变量与Field值进行匹配。

4.需求实现

  1. 修改logstash配置

这里我们使用logstash来接收应用端发送的日志文件,所以我们直接修改logstash配置的filter文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
filter {
if [message] =~ /^\[elk\]api-monitor / {
dissect {
mapping => { "message" => "%{} platform=%{platform}, name=%{name}, tget=%{tget}, rt=%{rqt}" }
add_field => {
"es_index" => "api-monitor"
"api_type" => "%{name}"
}
}
mutate {
gsub => [
"api_type", "^EXTHIRDQRY$", "查询类、办理类",
"api_type", "^send_shortmessage$", "故障类",
"api_type", "^searchAccount$", "故障类、通用类",
"api_type", "^$", "其他"
]
remove_field => [ "message", "time", "thread", "class", "port" ]
}
}
}

如上,gsub配置就是根据字段值标识,分别给每个Doc标识了对应的功能类范围。

  1. 新增Grafana变量

打开需要修改的仪表盘(Dashboard),然后点击右上角的齿轮图标,选择Variables,点击New按钮,新建变量。

具体设置如下图所示:

新增Grafana变量

  1. 修改图表查询条件

在原查询语句后面新增变量过滤条件 AND api_type.keyword:*$api_type* 这里使用星号进行模糊匹配

修改图表查询条件

5.效果测试

按照上面设置完成后,使用建好的变量进行筛选验证数据。

效果测试