Grafana从入门到快速上手保姆级教程

coverImg

前言

博主介绍:✌目前全网粉丝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、创建本机映射目录数据

null

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

null

初始账号为:

admin
admin

功能详细使用

null

添加数据源

mysql

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

null

配置如下:

url+端口、数据库名字、用户名密码

null

新建仪表盘

null

选择数据源:

null

实战案例

案例1:Bar chart图

知识点描述

$__timeFilter宏定义使用

**场景:**当你访问包含该面板的仪表板时,你会看到页面右上角有一个时间范围选择器,默认是“Last 6 hours”,“Last 24 hours”,“Last 7 days”等选项。

null

使用方式如下:

AND openedDate >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)) 

# 替换
AND $__timeFilter(openedDate)

介绍:

$__timeFilter宏定义使用:并不需要你手动配置,它是Grafana内置的一个时间过滤宏,旨在简化与时间相关的查询编写。当你在Grafana中使用支持的时间序列数据库(如MySQL、PostgreSQL、Prometheus等)时,这个宏会自动解析并根据用户在界面上选择的时间范围生成相应的SQL片段。

如何使用 $__timeFilter:

  1. 确保数据源支持: 首先确认你的数据源是Grafana支持的类型之一,并且正确添加和配置了该数据源。
  2. 直接在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:

null

添加变量即可:

null

自定义:

null

null

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

null

才能保存下来。

如何使用变量:

# 如果你使用的变量名为member,如下使用即可,$member对应会自己带上''
# WHEN member IN ($member)   => WHEN member IN ('changlu') 
WHEN member IN ($member)

其他用法场景:

1、状态类

null

# 针对未修复、已修复可以写成这样子
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;

资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅

评论区请在客户端页面查看