1 centos7安装grafana

官网 https://grafana.com/grafana/download

# https://dl.grafana.com/oss/release/grafana-6.4.2-1.x86_64.rpm
# sudo yum localinstall grafana-6.4.2-1.x86_64.rpm

启动+开机启动

# systemctl restart grafana-server
# systemctl enable grafana-server

需要先启动grafana-server服务,后开启3000端口

# firewall-cmd --add-port=3000/tcp

第一次访问:http://172.16.159.132:3000 账号:admin 密码:admin 需要修改新密码:cc123456
第二次访问,使用新密码:http://172.16.159.132:3000 账号:admin 密码:cc123456

2 准备mysql数据库

1 准备sql语句

create database dolphin;

grant all privileges on dolphin.* to dolphin@'%' identified by 'dolphinBJ2019***';

use dolphin;

CREATE TABLE `teams` (
  `id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
  `name` VARCHAR(255) NOT NULL DEFAULT '',
  `ctime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `utime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;


CREATE TABLE `apps` (
  `id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
  `teamid` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
  `name` VARCHAR(255) NOT NULL DEFAULT '',
  `ctime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `utime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;


CREATE TABLE `items` (
  `id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
  `appid` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
  `name` VARCHAR(255) NOT NULL DEFAULT '',
  `ctime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `utime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `itemdatas` (
  `id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
  `itemid` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
  `clock` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `value` INT(10) UNSIGNED NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`),
   KEY `idx_itemid` (`itemid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

2 时区问题
如果发现grafana和mysql的时间对不上,一般是时区问题。
在grafana机器和mysq机器上

更新机器时区
# timedatectl set-timezone Asia/Shanghai
校对时间
# yum -y install ntp
# ntpdate ntp1.aliyun.com
重启mysql
# systemctl restart mysqld
重启grafana
# systemctl restart grafana-server

3 创建时间序列数据,每秒产生监控数据。
createdata.sh

function add()
{
        local clock=$1
		local itemid=$2
		local value=$[$RANDOM%500+1]
		sql="insert into itemdatas (itemid,clock,value) value($itemid,'$clock',$value);"
    echo $sql
        mysql -udolphin -pdolphinBJ2019*** -h 172.16.159.131 -P 3306 dolphin -e "$sql"
}

for ((i=1; i<=100000; i ++))
do

	nowTime=$(date "+%Y-%m-%d %H:%M:%S")
	add "$nowTime" 1
	add "$nowTime" 2
	add "$nowTime" 3
	add "$nowTime" 4
	add "$nowTime" 5
	add "$nowTime" 6
	add "$nowTime" 7
	add "$nowTime" 8
	add "$nowTime" 9
	add "$nowTime" 10
	sleep 1
done

3 配置grafana的mysql数据库

grafana 变量为空 mysql grafana变量关联_sql

4 配置查询变量

官网变量操作详细说明:https://grafana.com/docs/grafana/latest/reference/templating/

4.1 新建图形,然后点击设置

grafana 变量为空 mysql grafana变量关联_架构师_02


4.2 点击变量,新增变量

grafana 变量为空 mysql grafana变量关联_架构师_03


4.3 新增团队名称变量

select distinct name as teamname from teams

grafana 变量为空 mysql grafana变量关联_grafana 变量为空 mysql_04


4.4 新增团队id变量

这里的$teamname就是4.3中的teamname变量

select id as teamid from teams where name = '$teamname'

grafana 变量为空 mysql grafana变量关联_mysql_05


4.5 两个变量展示

grafana 变量为空 mysql grafana变量关联_grafana 变量为空 mysql_06


4.5 页面查看

当选择不同的团队名称的时候,后面团队id的值也发生了变化。说明上面2个参数是有管理其左右的。

grafana 变量为空 mysql grafana变量关联_架构师_07


grafana 变量为空 mysql grafana变量关联_mysql_08

5 配置团队和应用级联

5.1 添加应用名称变量

select name as appname from apps where teamid = '$teamid'

grafana 变量为空 mysql grafana变量关联_mysql_09


5.2 添加应用id

grafana 变量为空 mysql grafana变量关联_grafana 变量为空 mysql_10


5.3 查看所有变变量位置的先后顺序很重要

grafana 变量为空 mysql grafana变量关联_sql_11


5.4 查看级联效果

选择不同的团队出现了不同的应用

grafana 变量为空 mysql grafana变量关联_grafana 变量为空 mysql_12


grafana 变量为空 mysql grafana变量关联_mysql_13


5.5 只有名称之间的联动

去掉团队id和应用id实现,只有团队名称和应用名称之间的联动。配置团队id和应用id,隐藏Variable。

grafana 变量为空 mysql grafana变量关联_sql_14


grafana 变量为空 mysql grafana变量关联_mysql_15


查看效果,团队id和应用id隐藏了。选择不同的团队,就可以出不同的应用。

grafana 变量为空 mysql grafana变量关联_mysql_16

6 配置团队,应用,监控项三级级联,同时绘图

按照第5章的方法,监控项名称,监控项id。同时隐藏监控项id展示(隐藏Variable)。

select name as itemname from items where appid = '$appid'
select id as itemid  from items where appid = '$appid' and name = '$itemname'

grafana 变量为空 mysql grafana变量关联_mysql_17

2 绘图

点击编辑

grafana 变量为空 mysql grafana变量关联_grafana 变量为空 mysql_18


通过编辑查询配置

grafana 变量为空 mysql grafana变量关联_mysql_19


和$itemid监控项目关联上。点击Edit SQL

grafana 变量为空 mysql grafana变量关联_grafana 变量为空 mysql_20

加上监控项条件。AND itemid=’$itemid’ 。

grafana 变量为空 mysql grafana变量关联_sql_21


点击生成sql。单选择不同项的时候,会发现sql里面的itemid参数发生了变化。下面的间隔1s和上面的1*1是相对于的。

grafana 变量为空 mysql grafana变量关联_sql_22


当选择不同的监控项目的时候,会发现曲线发送变化

grafana 变量为空 mysql grafana变量关联_mysql_23

7 筛选条件控制多个面板

在第6章节的基础上再,再这个面板上再添加一个面板。

grafana 变量为空 mysql grafana变量关联_mysql_24


编码监控项的时候,可以看到监控项和id变化两个面板图形都发生了变化。说明监控项参数影响了2个面板的数据集。

grafana 变量为空 mysql grafana变量关联_sql_25


通过工具查看调用接口,监控项itemid,值10,9的变化。

grafana 变量为空 mysql grafana变量关联_架构师_26

grafana 变量为空 mysql grafana变量关联_架构师_27