安装

包管理安装

#arch系
pacman -S grafana

配置文件

可以零配置启动

连接数据源

Grafana学习笔记

Grafana学习笔记

直接在页面中填入服务器URL即可

图表设置

Variables

在设置页面中可以设置变量

Grafana学习笔记

设置完成后会在图表界面最上端出现你设置的变量,并且可以修改变量的值

Grafana学习笔记

之后在Grafana的查询语句中可以用${变量名}来插入变量的值,如

Grafana学习笔记

但注意,这是Grafana的功能,不是Prometheus的功能,而且目前版本(Grafana 8)中,Alert rules中并不能使用变量模板

设置Legend

Grafana学习笔记

可以通过Legend来修结果改图表展示的名字

使用{{tag名}}可以动态插入tag名

导入面板

grafana支持通过url或id导入别人分享的面板

grafana官方仓库有很多别人设置好的面板,可以直接导入使用

Grafana学习笔记

警报

Grafana 8之前的版本,Alert Rule(警报规则)是与Panel(即图表)强依赖的,即Rules必须对应一个Panel,而一个Panel可以有多个Alert Rule

Grafana 8开始修改警报模块,但是还是开发版本,要在配置文件(grafana.ini)中添加

[feature_toggles]
enable=ngalert

新版的警报分为Alert rulesSilencesContact pointsNotification policies四个部分

  • Alert rules:警报规则,定义在什么情况下会触发警报。可以添加tag来方便选择对应的警报规则
  • Silences:屏蔽警报,即在设定的时间内可以屏蔽指定tag(在规则中设定的)的警报
  • Contact points:接入点,设置接入的警报渠道,支持邮箱、钉钉等
  • Notification policies:配置警报策略,可以配置默认的接入点,所有的警报都会通知默认的接入点,也可以通过tag、value来分组设置警报策略。‘’

Alert rules

  1. 设置服警报信息

Grafana学习笔记

  1. 创建警报规则

注意不能使用模板变量

Grafana学习笔记

其中Grafana 8支持了基于标签的多维警报,可以使用reduce来创建多维条件,如

Grafana学习笔记

之后再使用条件语句去进行处理

Grafana学习笔记

  1. 选择触发的表达式

同样的,使用多维警报也会为每个实例创建一个警报信息

Grafana学习笔记

  1. 警报提示的信息

Grafana学习笔记

  1. 设置tag,类似于分组

Grafana学习笔记

  1. 结果,其中结果格式使用了消息模板来自定义格式

Grafana学习笔记

在此查看更多细节

Silences

设置在什么时段忽略警报,同时可以通过Alert rules中的tag来设置忽略警报的条件

Grafana学习笔记

Contact points

消息模板|Message Template

Grafana 8支持消息模板,基于Go Template,可以吧包括触发警告的查询结果等信息进行自定义处理并输出。

更详细信息查看文档,查看模板数据来了解模板中的可用变量

实例

配置的模板

Grafana学习笔记

在连接点中使用模板

Grafana学习笔记

其中{{template "Alerts" .}}中的test{{define "Alerts"}}中定义的名称,即为Alerts

Alerting的值可以在设置Rule的界面中预览

Grafana学习笔记

连接点|Contact points

可以设置警报的渠道,这里以钉钉为例

DingDing

Grafana学习笔记

  • Contact point type:警报通知的方式,这里选择钉钉
  • Url:钉钉机器人创建给出的url
  • MessageType:支持ActionCard 和 link两种
  • Message:警报的提示消息

同时记得修改配置文件,不然提示的url打不开http_port、domain、root_url

Notification policies

可以将Alert rules和Contact point通过tag联系在一起

Grafana学习笔记

杂项

除零问题

因为错误率是\(\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,去除了除零的情况

相关文章: