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_可视化_时序存储_日志服务-阿里云
Explore
Explore功能是Grafana提供的一个试验田, 它一般是用来临时执行一些查询, 或者测试查询, 我们在配置dashboard之前, 可以先在Explore中试一下, 能看到图了, 再去配置dashboard, 可以少走一些弯路
Explore页面提供了一个Query history的功能:
可以查看和搜索查询的历史, 也可以编辑重新查询, 执行收藏等操作
多加利用这个功能可以节省不少时间
配置图表
当我们写好一个查询, 就可以用来配置dashboard了, 点击+ -> Dsahboard来创建, 创建后grafana提供的是一个空的dashboard:
这里我们看到有Add new panel
和convert to row
两个按钮, 那么什么是panel和row呢? 我们先看个实际的例子:
这里Resources就是一个row, 他下面的一个个图就是panel, 这些panel都属于他, 因此可以折叠或展开, row是用来方便管理panel提供的
我们先点击Add new Panel
, 为了能看到图, 我们首先要输入一个查询, 可以就输入up, 看下结果:
如果不做任何定制, 这个图就配好了, 是不是很简单? 实际上我们常常会有很多定制的需求, 比如图表标题至少要改吧, 默认线图也很可能不能满足需求, 这些选项都在右边设置:
最常用的选项就是panel title
, 是设置标题的, 如果要修改图表类型, 那么在Visualization中设置, 这里面设置选项非常多, 这篇文章主要是入门, 就不一一介绍, 我们只说几个比较常用好用的功能.
设置单位
我们统计的指标通常都是有单位的, 比如统计流量, 单位是bytes, 统计http耗时, 单位是秒, 实际情况中用这些原始的单位会很不直观, 那么可以在Axes中设置Unit, 比如原始单位是秒:
设置了以后grafana就会自动根据值的大小显示us, ms, s等, 会清晰很多
设置图例
图例默认在图表的下放, 有时候图例项很多, 影响我们看监控数据, 那么我们也可以给他关掉, 或者挪到右边
图例在左边的Legend中也可以设置格式, 可以使用{{label}}
来引用, 例如:
这样图例会展示成:
其中的instance就替换成了实际label的值
变量
为了提升图的适应性, 我们常常希望能够通过下拉框来控制查询结果, 比如提供一个机器列表的选项, 选择后只展示这台机器的监控数据, 这在grafana中可以通过变量实现
变量在dashboard的settings中配置, 那么变量要有取值来源, 它可以是固定值, 也可以是从Prometheus的元数据或者查询中获取, 例如:
这里定义了一个叫instance的变量, 它是从prometheus_build_info这个指标的instance label来的, 也就是说这个指标的instance这个label有多少取值, 这个变量就有哪些取值, 这是很常用的一种用法
添加变量后, dashboard上就会自动添加一个下拉框, 可以进行选择, 但此时选择并没有效果, 因为我们的查询中没有使用这个变量, 所以query要把变量给用上, 比如:
up{instance=~"$instance"}
报警
在说真正的报警之前, 我们先来看下grafana的Thresholds
设置
当设置了这个选项以后, 图上就会多出一块红色的区域,
如果一些指标不太重要, 只是想当他们有异常的时候能够看到, 并不想收到报警通知, 那用这种方式就够了
真正的报警选项在Alert标签下:
注意: grafana不支持配置alert的query中带变量
一个报警由规则(Rule), 条件(Condition), 通知(Notification) 三部分组成:
rule
Rule是指执行报警的规则, 即多久执行一次, 连续触发多少次发送报警
condition
Condition则是判断是否触发报警的条件, 图上条件的含义是query A从15分钟前到现在, 平均值大于150则报警
condition也支持多条, 通过AND OR的关系组合
notification
我们报警总是要收通知的, 我们讲解一下怎么用钉钉收通知
首先要进入配置页面, 在
完整的配置如下:
其中url就是在钉钉中创建机器人提供的url
创建完可以点击Send Test 看是否能够正常发送
创建完再回到alert页面选择即可
总结
这样我们就完成了从数据接入到可视化到报警的全流程, 借助SLS时序存储和grafana可以比较容易的搭建出一套易用的监控系统
大家在使用SLS中遇到的任何问题,请加钉钉群,我们有专门的日志女仆24小时在线答疑,还有火锅哥和烧烤哥专业支持!~ SLS微信公众号定期会发布各类日志、监控领域的技术分享文章并定期举行抽奖,欢迎小伙伴们关注~
另外欢迎对大数据、分布式、机器学习等有兴趣的同学加入,转岗、内推,来者不拒,请用简历狠狠的砸我,联系邮箱luoxing.klx@alibaba-inc.com !~