grafana
1 下载
1.1 下载地址
1.2 版本
grafana-9.1.0
2 使用
2.1 数据源管理(Configuration)
2.2 仪表盘管理(Dashboards)
DashBoard:仪表盘,就像汽车仪表盘一样可以展示很多信息,包括车速,水箱温度等。Grafana 的 DashBoard 就是以各种图形的方式来展示从 Datasource 拿到的数据。
Row:行,DashBoard 的基本组成单元,一个 DashBoard 可以包含很多个 row。一个 row 可以展示一种信息或者多种信息的组合,比如系统内存使用率,CPU 五分钟及十分钟平均负载等。所以在一个 DashBoard 上可以集中展示很多内容。
Panel:面板,实际上就是 row 展示信息的方式,支持表格(table),列表(alert list),热图(Heatmap)等多种方式。
2.2.1 Query variable
变量允许更多交互式和动态仪表盘。通过变量大家就可以给 Dashboard 加搜索条件了。
操作步骤: Setting --> Variables --> New
2.2.1.1 变量类型
Datasource
此类型允许您快速更改整个仪表板的数据源。如果您在不同的环境中有多个数据源实例,则非常有用。
Query
此变量类型允许您编写数据源查询,该查询通常返回度量标准名称,标记值或键的列表。例如,返回服务器名称,传感器ID或数据中心列表的查询。
Interval
此变量可表示时间跨度。不是按时间或日期直方图间隔对组进行硬编码,而是使用此类型的变量。
Custom
使用逗号分隔列表手动定义变量选项。
Constant
定义隐藏常量。对于要共享的仪表板的度量标准路径前缀很有用。在仪表板导出期间,常量变量将变为导入选项。
Ad hoc filters
非常特殊的变量,目前仅适用于某些数据源,InfluxDB和Elasticsearch。它允许您添加键/值过滤器,这些过滤器将自动添加到使用指定数据源的所有度量标准查询中。
Text box
此变量类型将显示为带有可选默认值的自由文本输入字段。
2.2.1.2 查询选项
此变量类型是最强大和最复杂的,因为它可以使用数据源查询动态获取其选项。
Data source
查询的数据源目标。
Refresh
控制何时更新变量选项列表(下拉列表中的值)。在仪表板上加载将减慢仪表板负载,因为在初始化仪表板之前需要完成变量查询。如果变量选项查询包含时间范围过滤器或取决于仪表板时间范围,则仅将此设置为“ 开时间范围更改”。
Query
数据源特定的查询表达式。
Regex
正则表达式用于过滤或捕获数据源查询返回的名称的特定部分。可选的。
Sort
在下拉列表中定义选项的排序顺序。已禁用表示将使用数据源查询返回的选项顺序。
2.2.1.3 ES 特定的表达式 Query 查询变量
Elasticsearch数据源支持两种类型的查询,您可以在_Query_变量的_Query_字段中使用这两种类型的查询。查询是使用自定义JSON字符串编写的。
{“find”:“fields”,“type”:“keyword”}
返回索引类型的字段名称列表keyword
。
{“find”:“terms”,“field”:“@ hostname”,“size”:1000}
使用术语聚合返回字段的值列表。查询将用户当前仪表板时间范围作为查询的时间范围。
{“find”:“terms”,“field”:“@ hostname”,“query”:'<lucene query="" style="box-sizing: border-box;">“}</lucene>
使用term aggregation&和指定的lucene查询过滤器返回字段的值列表。查询将使用当前仪表板时间范围作为查询的时间范围。
术语查询的默认大小限制为 500。在查询中设置size属性以设置自定义限制。您可以在查询中使用其他变量。名为变量的示例查询定义$host
。
{"find": "terms", "field": "@hostname", "query": "@source:$source"}
在上面的示例中,我们使用$source
在查询定义中命名的另一个变量。每当您通过下拉列表更改$source
变量的当前值时,它将触发$host
变量的更新,因此它现在只包含在本例中过滤的@source
文档属性的主机名。
(1) 查询成员字段
语法:{"find": "fields", "type": "keyword"}
find:表示查什么东西
type:表示检索条件
如查询 long 类型的字段,可以如下处理
{
"find": "fields",
"type": "long"
}
什么时候用这个呢?
比如我想知道这个 es 中定义了哪些字段
比如在配置 Grafana 的变量时,可以使用它来做一些限定
(2) 查询成员值
语法: {"find": "terms", "field": "成员名", "size": 100}
find:后面跟上的是 terms, 表示查询具体的值
field: 用于限定需要查的成员
size:数量限制,可以不填
举例如下,查询所有虚机的 pool
{"find": "terms", "field": "pool.keyword", "size": 100}
使用范围:
常见于配置 Grafana 变量,配置一个虚机选择的变量,用于查看不同资源池虚机的表现情况
(3) 条件查询成员值
在前面的基础上加一下限定,比如一个 es 为多个应用使用,此时我只关注其中 app1 的大盘,此时配置服务器时,想加一个条件限定
语法:{"find": "terms", "field": "成员名", "query": "k:v"}
query: lucence 查询语法,要求成员 k 的值为 v
eg1: 查询 server_name = app 的服务器 ip
{
"find": "terms",
"field": "server_ip.keyword",
"query": "server_name:app"
}
eg2: 查询 pool 为 $pool 值的服务器 ip 列表
{
"find": "terms",
"field": "server_ip.keyword",
"query": "pool:$pool"
}
2.2.2 Query Lucene 查询语法
配置大盘的查询条件,主要就是借助 lucene 语法来处理,接下来看一下常见的使用姿势
2.2.2.1 条件等于查询
语法:field_name:filed_value
filed_name: 字段名
field_value: 需要检索的值
注意: 中间使用英文冒号分隔,表示条件命中
2.2.2.2 不等于查询
如果希望不等于查询,主要使用下面这种方式
!(field_name:field_value)
2.2.2.3 字段本身存在与否
_exists_:field_name: 查询包含 field 成员的记录
_missing_:field_name: 查询不包含 field 成员的记录
2.2.2.4 通配符查询
在查询条件中,包含下面两个的表示使用通配查询
? 匹配单个字符
* 匹配 0 或多个字符
注意:?、*不能用作第一个字符
比如我有个应用,部署多个环境,分别名为 app-cn, app-usa,现在想统计整个应用的情况,就可以使用下面这种正则方式
server_name: app-*
除了上面的示例,在实际的工作中,更常见的是 url 的统计,比如统计 /get/ 这个域名开头的请求
# 下面使用了转义
url: \/get\/*
2.2.2.5 模糊搜索
在单次后面添加剂上 ~来实现模糊搜索,这种更适用于搜索业务场景,通常对于 grafana 的大盘配置,个人感觉不太实用 实用方式
// 可以匹配 app-cn
server_name: app-nc~
2.2.2.6 范围搜索
除了前面的精确搜索,我们还可以进行范围搜索
语法: [ a TO b ], {a TO B}
[]: 闭包区间,包含左边的值
{}: 开区间,不包含两边值
a/b 如果为 * 表示某一侧不限制范围
实例演示,查询 http 状态码为 4xx 的 case
http_code: [400 TO 499]
除了上面这种写法,也可以使用 > < 的方式,比如上面的写法等价
// >=400 之间不要加上空格
http_code: (>=400 AND <=499)
2.2.2.7 逻辑操作
多条件组合,使用 AND/OR 来处理,这里的组合即可以表明多个 field,也可以是一个 field 的多个 value 组合 如多字段匹配:找出 app-cn 应用中状态码为 500 的记录
http_code:500 and server_name:app-cn
如多 value 匹配:找出状态码为 500, 503 的记录
http_code: (500 OR 503)
2.2.2.8 转移字符
当查询条件中,包含下面字符中的一个时,需要使用注意
特殊字符:+ - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
转义修饰:/
如 url 的查询时,通常会用到转义
url: \/get\/info
Last updated