一、Grafana介绍
Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:
1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
2、数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;
4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。
二、docker安装Grafana
#docker pull grafana/grafana 默认下载的是最新的Grafana版本 #docker run -d --name=grafana --restart=always -p 3000:3000 grafana/grafana
进入到docker容器,安装zabbix的插件
#docker exec -it grafana bash
获取可用插件列表
root@8cd54f1c4c17:/# grafana-cli plugins list-remote
root@8cd54f1c4c17:/# grafana-cli plugins install alexanderzobnin-zabbix-app
打开浏览器,输入IP+端口,3000为Grafana的默认侦听端口。系统默认用户名和密码为admin/admin,第一次登陆系统会要求修改密码,修改密码后登陆。
三、Grafana的使用
(1)配置数据源:
解释:
HTTP这一项下面的URL填写zabbix的api,如果是docker安装的zabbix:http://IP/api_jsonrpc.php;如果不是使用docker安装的zabbix,这里应该这么写:http://IP/zabbix/api_jsonrpc.php
Username: 登录zabbix的用户名
Password:登录zabbix的密码
配置完成以后,测试是否可以连接zabbix
(2)创建Dashboards(仪表板)
设置仪表板
给这个仪表板起一个名字
(3)添加变量
用过zabbix的人应该知道,一个zabbix服务器可能存在多个group(组),一个group下又可能存在多个host(主机),每个host下又可能有多个application(应用),每个application下有可能有多个item(监控项)。假设你要在grafana上看某个监控项的实时数据,就需要在grafana上配置该监控项的panel,那么这样一来可能会存在很多个监控项,比如我管的一台zabbix server上光一个host下监控项就有几百个,如果这几百个监控项每个都在grafana上配置一个panel,这绝对是一个非常折磨人的工作。还好grafana提供了一个Variables的功能,允许动态的修改panel中的参数,这样panel显示的内容也会随着参数的变化而变化。
要说明一点,这个Variables提供了参数功能,就相当于一个宏变量,这个宏变量的值是和datasource级联的(参数背后其实就是一个查询语句,数据源内容发生变化,利用该参数获取到的数据就会级联发生变化)。
下面解释一下各个参数的作用
Variable
name: 变量名,template的名字,比如我这里取名为group,到时候要使用这个变量名就用$group来调用。
type: 变量类型,变量类型有多种,其中query表示这个变量是一个查询语句,type也可以是datasource,datasource就表示该变量代表一个数据源,如果是datasource你可以用该变量修改整个DashBoard的数据源,变量类型还可以是时间间隔Interval等等。这里我们选择query。
label: 是对应下拉框的名称,默认就是变了名,选择默认即可。
hide: 有三个值,分别为空,label,variable。选择label,表示不显示下拉框的名字。选择variable表示隐藏该变量,该变量不会在DashBoard上方显示出来。默认选择为空,这里也选默认。
Query options
Data source: 数据源,不用多说。
Refresh: 何时去更新变量的值,变量的值是通过查询数据源获取到的,但是数据源本身也会发生变化,所以要时不时的去更新变量的值,这样数据源的改变才会在变量对应的下拉框中显示出来。Refresh有三个值可以选择,Never:永不更新。On Dashboard Load:在DashBoard加载时更新。On Time Range Change:这个还没弄明白怎么用。。此处,选择On Dashboard Load,当数据源发生更新是,刷新一下当前DashBoard,变量的值也会跟着发生更新。
Query:查询表达式,不同的数据源查询表达式都不同(这些可以到官网上查询),这里由于是要查询zabbix的groups信息,所以表达式为*。
Regex:正则表达式,用来对抓取到的数据进行过滤,这里默认不过滤。
Sort:排序,对下拉框中的变量值做排序,排序的方式挺多的,默认是disable,表示查询结果是怎样下拉框就怎样显示。此处选disable。
Selection Options
Multi-value:启用这个功能,变量的值就可以选择多个,具体表现在变量对应的下拉框中可以选多个值的组合。
Include All option:启用这个功能,变量下拉框中就多了一个all选项。
Custom all value:启用Include All option这个功能,才会出现Custom all value这个输入框,表示给all这个选项自定义一个值,all这个选项默认是所有值的组合,你也可以自定义,比如我自定义all为cpu五分钟平均负载,则选择all就代表cpu五分钟平均负载。
虽然选择组合值可以在一个panel里面查看多种监控数据,但是由于不同监控数据的数值大小格式都可能不一样,在一个图形里面格式很难兼容,这样就会出现问题,所以此处建议默认都不选。
Value groups/tags
组合标签,可以选择多个值组合在一起设置一个标签,这个功能还没弄明白,按照官网上的操作没效果,暂且忽略吧,反正没多大影响。
Preview of values (shows max 20)
前面都设置好之后,下方会显示前二十,由于我的groups只有一个zabbix agents,所以只显示了一个。
点击add,group这个template就创建好了。
按照这个方式再创建另外三个template(host,application,item)。另外三个的创建和group除了name,query不一样之外其它都一样。
其他三个的创建
host的创建:
name: host query:{$group}{*}
application的创建:
name: application query: {$group}{$host}{*}
item的创建:
name: item query:{$group}{$host}{$application}{*}
(4)创建panel
解释:
Queries to:从哪里获取数据,默认是zabbix
Group:zabbix里面定义的主机组,上面使用了变量$group,表示所有的主机组
Host:zabbix里面的主机
Application:zabbix里面的应用,
Item:zabbix里面定义的监控项
比如,我这里想查询CPU一分钟内的平均负载:
这里定义标题,可以使用定义的变量
最终效果如下:
Grafana的基本使用:https://grafana.com/docs/tutorials/api_org_token_howto/