Grafana 条形图实践

6 minute read

前言

可视化平台有很多,最重要的是选择符合业务需求的方案,费用低、学习曲线低、易于上手、集成性好这些都是加分项。众望所归,我选择了 Grafana。

特点

让我们康康 Grafana 是怎样的:

  1. 免费。Grafana 是一个开源的独立日志分析和监视工具。
  2. 开发少可直接用。面向分析师和一般使用者,一般不需要做多少编码工作就能直接拿来分析数据、搭建可视化系统。
  3. 界面炫酷。来看看官网的展示 Grafana 官网概述
  4. 丰富集成。Grafana 是跨平台工具,它提供了与各种平台和数据库的集成,持 InfluxDB,AWS,MySQL,PostgreSQL 等。
  5. 用户交互体验好。展示连续实时监控指标(如 CPU 负载,内存)、对数据提供自定义实时警报、提供基于数据库及其查询语法的命令列界面

准备工作-采集器

一个可视化平台,重要的是有数据来做支撑,像上面所说的数据库。本文采取具有灵活查询和实时报警构建的时序数据库 promethues 来作为数据管理端。

作为圣火的传人,promethues 有着各种采集器小弟,如服务器资源采集器 node-exporter、进程资源采集器 process-exporter、服务资源采集器 blackbox-exporter, 有了这些采集器就可以直接搭建起监控和警报

服务器监控 img

进程监控 img

服务监控 img

最后再配有 docker 微服务,你的监控和警报平台就能够一键部署起来了。 img

准备工作-定制化

有了各种采集器,其实能够满足大部分通用监控的需求,但往往我们的业务是不一样的,那么就需要进行定制。

用到了胶水语言 Python 在 promethues 的模块 promethues_client,就能开始定制了!

制作一个条形图

其实这个标题,我最先想取 “fuck the bar chart”,其他定制化的数据,表格、饼图、折线图都是能够在粗略熟悉 Grafana 后可以自己上手做的。

而这个条形图困扰了我整整一周的时间,各种找插件、换版本、调格式、选展示方式,都没有达到理想效果:

img

今天来彻底搞定这个问题!!

版本

工具 版本
Docker 1.13.1
Go 1.16.5
Python 3.6.8
Promethues 2.28.1
Grafana v8.1.0-30031pre(这个太重要了!!!)

看官网!看官网!看官网

  1. 首先需要有表格化的数据,并且这些数据都是 number 类型,而不是 string,你的 Grafana Metrics browser 可以长这样:
1# data1
2custom_market{browser_name="Chrome"} 
3
4# data2
5custom_market{browser_name="Safari"} 
6
7# data3
8custom_market{browser_name="Edge"} 
  1. Format 格式都是 Table,Instant 瞬间值都要打开。最终你获得了像这样的表数据(打开 Tabel View 可以看到)
浏览器 市场占比 CPU占用
Chrome 65.88 5%
Safari 18.50 3%
Edge 3.29 3.4%
  1. 在 Transform 中转换展示方式。选择 Concatenate fields 再选择 → Copy frame name to field name

  2. 在 Transform 中选择需要展示的数据。选择 Filter by name,点选你需要展示的数据

  3. 最后,还是在 Transform 中重命名字段。选择 Organize fields,将英文转化为中文吧(如果你需要的话)。

完美收工!就得到了上图的右边部分显示的相同样式。

参考链接

[1] 官网:Bar chart

[2] A Complete Guide to Bar Charts

[3] A Complete Guide to Stacked Bar Charts

[4] 《How to Choose the Right Data Visualization》

其他补充

1. 匿名访问

1docker run 
2    -itd --name grafana -p 3000:3000 
3    -e "GF_AUTH_PROXY_ENABLED=true"
4    -e "GF_AUTH_ANONYMOUS_ENABLED=true"
5    -e "GF_SECURITY_ALLOW_EMBEDDING=true"
6    grafana/grafana

这里解释一下:GF_SECURITY_ALLOW_EMBEDDING,用于网页嵌套的。如果需要在 iframe 中嵌套 Grafana,那么把这个变量设置为true;

2. 全屏化展示

想让 Grafana 分享的面板全屏化,在分享的 URL 后面跟上

1&kiosk=true

再加上按钮 F11,食用效果更佳。

3. 支持 Emoji 啦 😄

虽然 Grafana 的显示都是文本不能显示图片 🤔,但是支持 emoji !!!✌

[1] emoji 点击复制版 👈

[2] emoji 大全版 🔮

结语

今天关于 Grafana 的分享就到这里结束啦,如果你感兴趣,欢迎联系我 🤙