背景介绍
众所周知,在v4.0以及更高版本的Grafana中,我们可以在panel中配置alert,但是这个alert有个很鸡肋的限制,不允许query语句中引用template(即在dashboard中设置的variables),这大大限制了alert的灵活性。
经过实验,本人成功通过一个取巧的方式解决了这个问题,成功实现了以下目的:
- 引入变量,通过改变变量取值,改变panel数据显示;
- 同一个panel中实现alert功能;
下面,我以cpu利用率这一metric来介绍这个过程。
本文中,数据采集用的是node_exporter,然后Prometheus server主动抓取采集到的数据,之后将Prometheus server作为数据源配置到Grafana中进行可视化
具体步骤
- 安装node_exporter(参考友方链接)
- 安装配置Prometheus server(官网指导)
- Grafana配置Prometheus作为数据源(官网指导)
- 新增Dashboard+新建panel+配置可视化及alert
前三步较为简单,不做赘述,着重说最后一步。
注:本人实验过程用的版本
- Grafana:v6.0.1
- node_exporter:0.17.0(不同版本,metrics的名字会有不同,注意!)
- Prometheus_server:2.7.1
新增Dashboard不说了,这里提一下变量设置。点击进入某个Dashboard,点击Dashboard Setting
进入设置页面,点击Variables
设置变量(即Grafana中的template概念),新增变量HOST
,配置参考下面:
Name: HOST
Type: Query
Label: HOST
Data source: Prometheus
Refresh: On Dashboard Load
Query: label_values(go_info, instance)
Sort: Alphabetical(asc)
其他: 默认即可
新增Graph类Panel,Queries配置查询语句,并引入之前设置的变量:
sum(irate(node_cpu_seconds_total{instance="$HOST",mode="user"}[5m])) * 100 / count(node_cpu_seconds_total{instance="$HOST",mode="user"})
将HOST作为变量插入到语句中,就可以通过改变页面中左上角的HOST值来查看不同主机的CPU利用率走势。
接下来,重点来了,由于Alert配置Conditions的时候,查询语句不允许引用变量(即template),故我们在Queries中新增一条查询,并且通过Legend的变量功能来达到按主机分组的效果,话不多说,直接上查询语句:
sum by(instance) (irate(node_cpu_seconds_total{mode="user"}[5m])) * 100 / count by(instance) (node_cpu_seconds_total{mode="user"})
Legend
值设置为:{{instance}}
之后,点击此Query右上角的那只眼睛图标,进行disable处理,使这条语句的结果不展示在Panel中。
后面要做的就简单了,只需在Alert的Conditions中配置查询语句为B即可实现我们最初的目的。