Grafana 有着很是漂亮的图表和布局展现,功能齐全的度量仪表盘dashboard和图形编辑器。此篇文章主要来记录学习 如何使用mysql打造属于咱们的可视化监控仪表盘。java
采用以下命令直接安装grafna。或是下载.tar.gz包自行安装。mysql
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt-get update
sudo apt-get install grafana复制代码
在一个Dashboard中一个最基本的可视化单元为一个Panel(面板)。git
每个Panel能够配置本身查询的数据源以及数据查询方式。固然这里咱们使用Mysql做为数据源,其查询方式就是Sql语句。github
扩展一下思路:因为每一个Panel是彻底独立的,所以在一个Dashboard中,每每可能会包含来自多个Data Source的数据。也就是说A panel你能够从mysql中查询数据,B panel你能够从es中查询,很灵活的自由组合。sql
查看grafna状态
sudo systemctl status grafana-server
重启grafna
service grafana-server restart复制代码
配置grafna等操做,能够参看官方文档:数据库
https://grafana.com/docs/grafana/latest/installation/configuration/复制代码
Grafana还专门为Dashboard提供分享服务,你也能够把本身作得漂亮的界面上传上去供你们参考交流,传送门是:编辑器
https://grafana.com/dashboards复制代码
在这里,我使用的是Id为7991的监控面板。函数
首先,从左侧的菜单栏配置项中选中数据源。布局
grafna支持的数据源比较多,这里咱们手动搜索一下mysql。性能
选中以后,填写完具体的数据库地址和密码后,保存便可。
导入面板后后提示Templating init failed Error 1146: Table 'my2.status' doesn't exist错误,这是由于咱们还有一个工做没作完,监控mysql时须要在mysql server运行的机器上安装my2.status表,根据官网面板的说明,找到github仓库地址:
https://github.com/meob/my2Collector复制代码
在数据库中执行my2.sql 就能成果导入了,效果以下:
从说明咱们能够看到,My2Collector (my2)是一个简单的、自我包含的MySQL统计信息收集器,my2每10分钟自动执行一次存储程序来收集Mysql的一些性能数据。
my2能够链接到任何版本的MySQL,MariaDB,Percona或其余fork,可是...对于旧的MySQL,发布的许多统计信息均不可用。
my2使用的计划做业自MySQL 5.1(2008)起可用。
PROCESSLIST表从5.1.7开始可用。
而GLOBAL_STATUS从5.1.12开始可用。
PERFORMANCE_SCHEMA在5.5版本中引入,在5.6版本中获得了极大的加强。
不一样的MySQL版本之间有不少细微的差异:My2意识到并作了兼容,尝试收集全部可用信息,对于MySQL 8.0,提供了一个不一样的脚本,my2在启用了性能模式的MySQL 5.7,MySQL 8.0和MariaDB 10.x中发挥了最大做用。
在 面板中选择table类型的 panel。
编写查询的sql语句,可使用具体的别名。
特别注意时间序列:
返回列名中须要有time或time_sec的列,做为unix时间戳或任何sql原生日期。
特别注意,这里的时间转换函数:用法
- $__time(column) -> UNIX_TIMESTAMP(column) as time_sec
- $__timeEpoch(column) -> UNIX_TIMESTAMP(column) as time_sec
- $__timeFilter(column) -> column BETWEEN FROM_UNIXTIME(1492750877) AND FROM_UNIXTIME(1492750877)
- $__unixEpochFilter(column) -> time_unix_epoch > 1492750877 AND time_unix_epoch < 1492750877
- $__unixEpochNanoFilter(column) -> column >= 1494410783152415214 AND column <= 1494497183142514872
- $__timeGroup(column,'5m'[, fillvalue]) -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed)
by setting fillvalue grafana will fill in missing values according to the interval
fillvalue can be either a literal value, NULL or previous; previous will fill in the previous seen value or NULL if none has been seen yet
- $__timeGroupAlias(column,'5m') -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed) AS "time"
- $__unixEpochGroup(column,'5m') -> column DIV 300 * 300
- $__unixEpochGroupAlias(column,'5m') -> column DIV 300 * 300 AS "time"复制代码
由上面的规则可知,若是数据里面的数据类型是bigint。那么时间筛选就须要使用:
$__unixEpochFilter(data_time/1000)复制代码
只须要在折线图的配置基础上,将model改成Bars便可展现柱状图。
Graph里面的选项有:General(常规选择)、Metrics(指标)、Axes(坐标轴)、Legend(图例)、 Display(显示样式)、Alert(告警)、Time range(时间范围)
为了方便你们学习讨论,我建立了一个java疑难攻坚互助你们庭,和其余传统的学习交流不一样。本群主要致力于解决项目中的疑难问题,在遇到项目难以解决的问题时,均可以在这个你们庭里寻求帮助。
公众关号注:侠梦的开发笔记后回复【问题的答案】进入:java中Integer包装类的基本数据类型是?若是你也经历过遇到项目难题,无从下手,他人有可能能够给你提供一些思路和见解,一百我的就有一百种思路,一样,若是你也乐于帮助别人,那解决别人遇到的问题,也一样对你是一种锻炼。
欢迎来公众号【侠梦的开发笔记】,回复干货,领取精选学习视频一份