后端程序员也可以用Grafana做出漂亮可视化界面!

开发 前端
此篇文章主要来记录学习 如何使用mysql打造属于我们的可视化监控仪表盘。

前言

Grafana 有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘dashboard和图形编辑器。此篇文章主要来记录学习 如何使用mysql打造属于我们的可视化监控仪表盘。

安装grafna

采用如下命令直接安装grafna。或是下载.tar.gz包自行安装。

  1. sudo apt-get install -y apt-transport-https 
  2. sudo apt-get install -y software-properties-common wget 
  3. wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - 
  4. sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main" 
  5. sudo apt-get update 
  6. sudo apt-get install grafana 

在一个Dashboard中一个最基本的可视化单元为一个Panel(面板)。

每一个Panel可以配置自己查询的数据源以及数据查询方式。当然这里我们使用Mysql作为数据源,其查询方式就是Sql语句。

扩展一下思路:由于每个Panel是完全独立的,因此在一个Dashboard中,往往可能会包含来自多个Data Source的数据。也就是说A panel你可以从mysql中查询数据,B panel你可以从es中查询,很灵活的自由组合。

grafna启动相关命令

  1. 查看grafna状态 
  2. sudo systemctl status grafana-server 
  3.  
  4. 重启grafna 
  5. service grafana-server restart 

配置grafna等操作,可以参看官方文档:

https://grafana.com/docs/grafana/latest/installation/configuration/

运行一个官网的案例

Grafana还专门为Dashboard提供分享服务,你也可以把自己做得漂亮的界面上传上去供大家参考交流,传送门是:

https://grafana.com/dashboards

在这里,我使用的是Id为7991的监控面板。

添加mysql数据源

首先,从左侧的菜单栏配置项中选中数据源。

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中发挥了最大作用。

实战,基于Mysql业务表来创建监控

最简单的列表展示

在 面板中选择table类型的 panel。

编写查询的sql语句,可以使用具体的别名。

多个折线图

特别注意时间序列:

返回列名中需要有time或time_sec的列,作为unix时间戳或任何sql原生日期。

特别注意,这里的时间转换函数:用法

  1. - $__time(column) -> UNIX_TIMESTAMP(column) as time_sec 
  2. - $__timeEpoch(column) -> UNIX_TIMESTAMP(column) as time_sec 
  3. - $__timeFilter(column) -> column BETWEEN FROM_UNIXTIME(1492750877) AND FROM_UNIXTIME(1492750877
  4. - $__unixEpochFilter(column) ->  time_unix_epoch > 1492750877 AND time_unix_epoch < 1492750877 
  5. - $__unixEpochNanoFilter(column) ->  column >= 1494410783152415214 AND column <= 1494497183142514872 
  6.  
  7. - $__timeGroup(column,'5m'[, fillvalue]) -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed) 
  8.      by setting fillvalue grafana will fill in missing values according to the interval 
  9.      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 
  10. - $__timeGroupAlias(column,'5m') -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed) AS "time" 
  11. - $__unixEpochGroup(column,'5m') -> column DIV 300 * 300 
  12. - $__unixEpochGroupAlias(column,'5m') -> column DIV 300 * 300 AS "time" 

由上面的规则可知,如果数据里面的数据类型是bigint。那么时间筛选就需要使用:

  1. $__unixEpochFilter(data_time/1000

柱状图

只需要在折线图的配置基础上,将model改为Bars即可展示柱状图。

Graph里面的选项有:General(常规选择)、Metrics(指标)、Axes(坐标轴)、Legend(图例)、 Display(显示样式)、Alert(告警)、Time range(时间范围)

Grafana是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。

希望这篇文章能给你带来帮助。

责任编辑:张燕妮 来源: 侠梦的开发笔记
相关推荐

2012-09-05 10:18:11

可视化编程工具程序员

2023-02-15 08:24:12

数据分析数据可视化

2019-07-26 09:19:32

数据可视化架构

2017-05-23 09:07:48

可视化图表视觉

2019-12-18 14:40:09

数据可视化后端技术Python

2020-12-10 09:59:59

前端开发技术

2021-11-09 08:15:18

Grafana 数据可视化运维

2020-03-11 14:39:26

数据可视化地图可视化地理信息

2011-06-14 09:47:57

程序员

2017-12-15 15:09:42

2014-11-25 09:31:17

程序员

2023-04-14 08:21:55

2020-10-31 17:13:04

Python可视化Seaborn

2015-09-18 11:14:54

2011-05-18 10:57:40

2022-04-15 11:32:20

IDE工具鸿蒙操作系统

2011-06-02 09:02:36

程序员

2009-02-25 09:36:29

程序员择业

2022-08-26 09:15:58

Python可视化plotly

2009-04-21 14:26:41

可视化监控IT管理摩卡
点赞
收藏

51CTO技术栈公众号