Grafana是一个非常受欢迎的开源可视化工具, 经常和Prometheus InfluxDB, OpenTSDB等一起配合使用, 它有非常丰富的图表类型, 以及异常灵活的设置选项, 本文是一篇入门教程, 期望通过这篇教程能帮助大家入门Grafana, 并可以和SLS的时序存储结合使用

安装

本文基于Grafana 7.0+, 7.0做了很多优化, 也提供了很多新功能, 推荐大家用7.0以上的版本

Grafana官网有详细的教程描述了在各个系统上的安装过程: Installation | Grafana Labs

这里推荐大家有条件装docker的话, 就用docker的安装方式, 如果机器系统比较旧, 不支持docker, 那么也可以用下载包的方式安装

如果大家暂时没有环境安装, 想先体验一下grafana, grafana官方也贴心的提供了一个服务: play.grafana.org

可以直接上去看grafana提供了什么功能, 大体是怎么配置图表的

准备工作

在开始体验grafana之前, 我们首先要有数据, 因此我们要先在SLS上创建时序存储, 并接入一些数据, 可以参考我们的官方文档:

管理MetricStore_时序存储_日志服务-阿里云

采集主机监控数据_数据接入_时序存储_日志服务-阿里云

有数据以后就需要在grafana中配置相应的数据源, 因为SLS的时序存储是兼容Prometheus的查询的, 因此选择的DataSource类型直接用Prometheus就好:




grafana中全部显示none grafana界面没有数据_数据


细节可以参考文档: 时序数据对接Grafana_可视化_时序存储_日志服务-阿里云

Explore

Explore功能是Grafana提供的一个试验田, 它一般是用来临时执行一些查询, 或者测试查询, 我们在配置dashboard之前, 可以先在Explore中试一下, 能看到图了, 再去配置dashboard, 可以少走一些弯路

Explore页面提供了一个Query history的功能:


grafana中全部显示none grafana界面没有数据_数据_02


可以查看和搜索查询的历史, 也可以编辑重新查询, 执行收藏等操作


grafana中全部显示none grafana界面没有数据_数据_03


多加利用这个功能可以节省不少时间

配置图表

当我们写好一个查询, 就可以用来配置dashboard了, 点击+ -> Dsahboard来创建, 创建后grafana提供的是一个空的dashboard:


grafana中全部显示none grafana界面没有数据_数据_04


这里我们看到有Add new panel和convert to row两个按钮, 那么什么是panel和row呢? 我们先看个实际的例子:


grafana中全部显示none grafana界面没有数据_数据_05


这里Resources就是一个row, 他下面的一个个图就是panel, 这些panel都属于他, 因此可以折叠或展开, row是用来方便管理panel提供的

我们先点击Add new Panel , 为了能看到图, 我们首先要输入一个查询, 可以就输入up, 看下结果:


grafana中全部显示none grafana界面没有数据_docker_06


如果不做任何定制, 这个图就配好了, 是不是很简单? 实际上我们常常会有很多定制的需求, 比如图表标题至少要改吧, 默认线图也很可能不能满足需求, 这些选项都在右边设置:


grafana中全部显示none grafana界面没有数据_grafana中全部显示none_07


最常用的选项就是panel title, 是设置标题的, 如果要修改图表类型, 那么在Visualization中设置, 这里面设置选项非常多, 这篇文章主要是入门, 就不一一介绍, 我们只说几个比较常用好用的功能.

设置单位

我们统计的指标通常都是有单位的, 比如统计流量, 单位是bytes, 统计http耗时, 单位是秒, 实际情况中用这些原始的单位会很不直观, 那么可以在Axes中设置Unit, 比如原始单位是秒:


grafana中全部显示none grafana界面没有数据_数据_08


设置了以后grafana就会自动根据值的大小显示us, ms, s等, 会清晰很多

设置图例

图例默认在图表的下放, 有时候图例项很多, 影响我们看监控数据, 那么我们也可以给他关掉, 或者挪到右边


grafana中全部显示none grafana界面没有数据_数据_09


图例在左边的Legend中也可以设置格式, 可以使用{{label}}来引用, 例如:


grafana中全部显示none grafana界面没有数据_docker_10


这样图例会展示成:


grafana中全部显示none grafana界面没有数据_blackbox grafana没有数据_11


其中的instance就替换成了实际label的值

变量

为了提升图的适应性, 我们常常希望能够通过下拉框来控制查询结果, 比如提供一个机器列表的选项, 选择后只展示这台机器的监控数据, 这在grafana中可以通过变量实现

变量在dashboard的settings中配置, 那么变量要有取值来源, 它可以是固定值, 也可以是从Prometheus的元数据或者查询中获取, 例如:


grafana中全部显示none grafana界面没有数据_blackbox grafana没有数据_12


这里定义了一个叫instance的变量, 它是从prometheus_build_info这个指标的instance label来的, 也就是说这个指标的instance这个label有多少取值, 这个变量就有哪些取值, 这是很常用的一种用法

添加变量后, dashboard上就会自动添加一个下拉框, 可以进行选择, 但此时选择并没有效果, 因为我们的查询中没有使用这个变量, 所以query要把变量给用上, 比如:

up{instance=~"$instance"}

报警

在说真正的报警之前, 我们先来看下grafana的Thresholds设置


grafana中全部显示none grafana界面没有数据_blackbox grafana没有数据_13


当设置了这个选项以后, 图上就会多出一块红色的区域,


grafana中全部显示none grafana界面没有数据_图例_14


如果一些指标不太重要, 只是想当他们有异常的时候能够看到, 并不想收到报警通知, 那用这种方式就够了

真正的报警选项在Alert标签下:


grafana中全部显示none grafana界面没有数据_blackbox grafana没有数据_15


注意: grafana不支持配置alert的query中带变量

一个报警由规则(Rule), 条件(Condition), 通知(Notification) 三部分组成:

rule

Rule是指执行报警的规则, 即多久执行一次, 连续触发多少次发送报警

condition


grafana中全部显示none grafana界面没有数据_blackbox grafana没有数据_16


Condition则是判断是否触发报警的条件, 图上条件的含义是query A从15分钟前到现在, 平均值大于150则报警

condition也支持多条, 通过AND OR的关系组合

notification

我们报警总是要收通知的, 我们讲解一下怎么用钉钉收通知

首先要进入配置页面, 在


grafana中全部显示none grafana界面没有数据_blackbox grafana没有数据_17


完整的配置如下:


grafana中全部显示none grafana界面没有数据_blackbox grafana没有数据_18


其中url就是在钉钉中创建机器人提供的url

创建完可以点击Send Test 看是否能够正常发送

创建完再回到alert页面选择即可

总结

这样我们就完成了从数据接入到可视化到报警的全流程, 借助SLS时序存储和grafana可以比较容易的搭建出一套易用的监控系统