Grafana学习笔记
安装
包管理安装
#arch系
pacman -S grafana
配置文件
可以零配置启动
连接数据源
直接在页面中填入服务器URL即可
图表设置
Variables
在设置页面中可以设置变量
设置完成后会在图表界面最上端出现你设置的变量,并且可以修改变量的值
之后在Grafana的查询语句中可以用${变量名}
来插入变量的值,如
但注意,这是Grafana的功能,不是Prometheus的功能,而且目前版本(Grafana 8)中,Alert rules中并不能使用变量模板
设置Legend
可以通过Legend来修结果改图表展示的名字
使用{{tag名}}
可以动态插入tag名
导入面板
grafana支持通过url或id导入别人分享的面板
grafana官方仓库有很多别人设置好的面板,可以直接导入使用
警报
在Grafana 8
之前的版本,Alert Rule
(警报规则)是与Panel
(即图表)强依赖的,即Rules
必须对应一个Panel
,而一个Panel
可以有多个Alert Rule
在Grafana 8
开始修改警报模块,但是还是开发版本,要在配置文件(grafana.ini)中添加
[feature_toggles]
enable=ngalert
新版的警报分为Alert rules
、Silences
、Contact points
和Notification policies
四个部分
Alert rules
:警报规则,定义在什么情况下会触发警报。可以添加tag来方便选择对应的警报规则Silences
:屏蔽警报,即在设定的时间内可以屏蔽指定tag(在规则中设定的)的警报Contact points
:接入点,设置接入的警报渠道,支持邮箱、钉钉等Notification policies
:配置警报策略,可以配置默认的接入点,所有的警报都会通知默认的接入点,也可以通过tag、value来分组设置警报策略。‘’
Alert rules
- 设置服警报信息
- 创建警报规则
注意不能使用模板变量
其中Grafana 8支持了基于标签的多维警报,可以使用reduce来创建多维条件,如
之后再使用条件语句去进行处理
- 选择触发的表达式
同样的,使用多维警报也会为每个实例创建一个警报信息
- 警报提示的信息
- 设置tag,类似于分组
- 结果,其中结果格式使用了消息模板来自定义格式
在此查看更多细节
Silences
设置在什么时段忽略警报,同时可以通过Alert rules中的tag来设置忽略警报的条件
Contact points
消息模板|Message Template
Grafana 8支持消息模板,基于Go Template,可以吧包括触发警告的查询结果等信息进行自定义处理并输出。
实例
配置的模板
在连接点中使用模板
其中{{template "Alerts" .}}
中的test
为{{define "Alerts"}}
中定义的名称,即为Alerts
Alerting
的值可以在设置Rule的界面中预览
连接点|Contact points
可以设置警报的渠道,这里以钉钉为例
DingDing
- Contact point type:警报通知的方式,这里选择钉钉
- Url:钉钉机器人创建给出的url
- MessageType:支持ActionCard 和 link两种
- Message:警报的提示消息
同时记得修改配置文件,不然提示的url打不开http_port、domain、root_url
Notification policies
可以将Alert rules和Contact point通过tag联系在一起
杂项
除零问题
因为错误率是\(\frac{请求错误数}{请求数}\),如果没有请求,就会出现除零,结果变成NaN
,导致图表连线不连续
解决方法就是使用一些表达式来规避这些问题,如在上文中的错误率的表达式:
sum by(instance)(increase(http_server_requests_seconds_count[30s]))/(increase(http_request_total[30s])+(increase(http_request_total[30s]) == bool 0 ))*(increase(http_request_total[30s])!=bool 0)*100
重点在于(increase(http_request_total[30s])+(increase(http_request_total[30s]) == bool 0 )
,当(increase(http_request_total[30s])
为0时,increase(http_request_total[30s]) == bool 0
的值就为1,相加结果为1,去除了除零的情况