
前言
博主介绍:✌目前全网粉丝4W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。
涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。
博主所有博客文件目录索引:博客目录索引(持续更新)
CSDN搜索:长路
视频平台:b站-Coder长路
认识Grafana
Grafana 是一个开源的分析和监控平台,最初由瑞典工程师 Rickard Öberg 在 2014 年创立。它主要用于创建和管理仪表板,将来自不同数据源的数据以图表、图形和表格的形式展示出来,帮助用户快速理解和分析数据。
主要功能如下:
- 数据可视化:通过丰富的图表类型(如折线图、柱状图、饼图、地图等),将复杂的数据以直观的方式展示出来。
- 多数据源支持:可以连接多种数据源,如 Prometheus、InfluxDB、MySQL、Elasticsearch 等,获取数据进行可视化。
- 仪表板管理:用户可以创建、编辑和共享仪表板,将多个图表组合在一起,形成一个完整的监控视图。
- 警报功能:基于数据设置警报规则,当数据达到特定阈值时,Grafana 可以通过邮件、Slack 等方式发送通知。
- 灵活的查询语言:支持多种查询语言,如 PromQL(Prometheus 查询语言)、InfluxQL 等,方便用户对数据进行复杂查询。
- 插件扩展:通过插件机制,用户可以扩展 Grafana 的功能,例如添加新的图表类型或数据源。
应用场景:
- 运维监控:监控服务器、网络设备、应用程序的性能指标(如 CPU 使用率、内存使用率、响应时间等)。
- 数据分析:分析业务数据,如销售额、用户流量、转化率等,帮助决策。
- 物联网(IoT)监控:实时监控传感器数据,如温度、湿度、设备状态等。
- 日志分析:结合 Elasticsearch 等日志存储系统,分析日志数据,快速定位问题。
Grafana 的架构相对简单,主要由以下几部分组成:
- 前端界面:用户通过浏览器访问 Grafana 的 Web 界面,进行仪表板的创建和管理。
- 后端服务:负责处理数据查询、警报逻辑、用户认证等核心功能。
- 数据源:Grafana 从外部数据源获取数据,这些数据源可以是时间序列数据库(如 Prometheus、InfluxDB)、关系型数据库(如 MySQL、PostgreSQL)或日志存储系统(如 Elasticsearch)。
Grafana环境搭建
使用Docker快速构建
1、创建本机映射目录数据

2、docker运行 Grafana 容器(持久化数据)
# 挂载docker中/var/lib/grafana 到 /Users/edy/softwares/docker-workspace/grafana
docker run -d --name=grafana -p 3000:3000 -v /Users/edy/softwares/docker-workspace/grafana:/var/lib/grafana grafana/grafana
后续命令:
# 停止容器
docker stop grafana
# 删除容器
docker rm grafana
访问官网:http://127.0.0.1:3000/login

初始账号为:
admin
admin
功能详细使用

添加数据源
mysql
在连接这里,新建一个mysql数据源连接:

配置如下:
url+端口、数据库名字、用户名密码

新建仪表盘

选择数据源:

实战案例
案例1:Bar chart图
知识点描述
$__timeFilter宏定义使用
**场景:**当你访问包含该面板的仪表板时,你会看到页面右上角有一个时间范围选择器,默认是“Last 6 hours”,“Last 24 hours”,“Last 7 days”等选项。

使用方式如下:
AND openedDate >= DATE_SUB(CURDATE(), INTERVAL 30 DAY))
# 替换
AND $__timeFilter(openedDate)
介绍:
$__timeFilter宏定义使用:并不需要你手动配置,它是Grafana内置的一个时间过滤宏,旨在简化与时间相关的查询编写。当你在Grafana中使用支持的时间序列数据库(如MySQL、PostgreSQL、Prometheus等)时,这个宏会自动解析并根据用户在界面上选择的时间范围生成相应的SQL片段。
如何使用 $__timeFilter:
- 确保数据源支持: 首先确认你的数据源是Grafana支持的类型之一,并且正确添加和配置了该数据源。
- 直接在SQL查询中使用
$__timeFilter:
-
- 在你的SQL查询中,找到需要根据时间范围进行过滤的地方。
- 使用
$__timeFilter(时间字段名)的形式替换原有的固定时间条件。例如,在你的场景中,可以将原始的AND openedDate >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)替换为AND $__timeFilter(openedDate)。
自定义时间间隔:
如果你想要更细粒度地控制时间间隔,或者想提供自定义的时间范围选项,可以通过以下几种方式:
- 使用其他Grafana时间变量: Grafana还提供了其他一些有用的宏,如
$__from和$__to,它们分别代表从和到的时间戳(以毫秒为单位)。你可以用这些宏来构造自己的时间过滤条件。
AND openedDate BETWEEN FROM_UNIXTIME($__from / 1000) AND FROM_UNIXTIME($__to / 1000)
- 面板设置中的相对时间和绝对时间选择: 用户可以在每个面板的右上角选择“Time range”来指定相对或绝对的时间范围,而无需额外的SQL修改。
给定panel设置变量-custome变量使用
进入到panel之后,点击settings:

添加变量即可:

自定义:


回到panel之后,一定要点击保存:

才能保存下来。
如何使用变量:
# 如果你使用的变量名为member,如下使用即可,$member对应会自己带上''
# WHEN member IN ($member) => WHEN member IN ('changlu')
WHEN member IN ($member)
其他用法场景:
1、状态类

# 针对未修复、已修复可以写成这样子
SELECT
CASE
WHEN zb.resolvedBy IS NULL OR zb.resolvedBy = '' THEN '未修复'
ELSE '已修复'
END AS isFix
FROM
zt_bug zb
WHERE
CASE
WHEN ${is_fixed} = 'fixed' THEN zb.resolution <> ''
WHEN ${is_fixed} = 'not_fixed' THEN zb.resolution = ''
ELSE TRUE
END
ORDER BY
zb.id DESC;
Panel设置为Table展示的时候显示记录id
mysql5.6方式:
# 实现自增
SELECT
(@row_number := @row_number + 1) AS row_number,
zt_bug.*
FROM
zt_bug,
(SELECT @row_number := 0) AS init
ORDER BY
id DESC
LIMIT 10;
资料获取
大家点赞、收藏、关注、评论啦~
精彩专栏推荐订阅:在下方专栏👇🏻
- 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
- 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
- 学习与生活-专栏:可以了解博主的学习历程
- 算法专栏:算法收录
更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅
评论区请在客户端页面查看