Grafana可视化监控系统结合SpringBoot使用


Posted in Redis onApril 19, 2022

当面对一个复杂的系统时,我们往往需要监控工具来帮助我们解决一些性能问题。比如之前我们使用SpringBoot Admin来监控应用,从而获取到SpringBoot Actuator暴露的指标信息。今天给大家介绍一个功能强大的监控工具Grafana,只要需要用到监控的地方,用它做可视化就对了!

Grafana简介

Grafana是一款开源的数据可视化和分析工具,不管你的指标信息存储在哪里,你都可以用它来可视化这些数据。同时它还具有告警功能,当指标超出指定范围时会提醒你。

Prometheus简介

Prometheus是一款时序数据库,可以简单理解为带时间的MySQL数据库。由于Grafana只能将数据转换成可视化图表,并没有存储功能,所以我们需要结合Prometheus这类时序数据库一起使用。

安装

使用Docker安装Grafana和Prometheus无疑是最简单的,我们接下来将采用此种方式。

  • 首先下载Grafana的Docker镜像;

docker pull grafana/grafana
  • 下载完成后运行Grafana;

docker run -p 3000:3000 --name grafana \
-d grafana/grafana
  • 接下来下载Prometheus的Docker镜像;

docker pull prom/prometheus
  • /mydata/prometheus/目录下创建Prometheus的配置文件prometheus.yml

global:
  scrape_interval: 5s
  • 运行Prometheus,把宿主机中的配置文件prometheus.yml挂载到容器中去;

docker run -p 9090:9090 --name prometheus \
-v /mydata/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-d prom/prometheus
  • 至此安装完成,是不是很简单!可以通过如下地址访问Grafana,登录账号密码为admin:admin,访问地址:http://192.168.5.78:3000/

Grafana可视化监控系统结合SpringBoot使用

  • 登录Grafana后显示界面如下;

Grafana可视化监控系统结合SpringBoot使用

  • 其实Prometheus也是有可视化界面的,就是有点简陋,访问地址:http://192.168.5.78:9090/

Grafana可视化监控系统结合SpringBoot使用

使用

Grafana已经安装完后,是时候来波实践了,接下来我们来介绍下使用Grafana来监控Linux系统和SpringBoot应用。

监控系统信息

使用node_explorer可以暴露Linux系统的指标信息,然后Prometheus就可以通过定时扫描的方式获取并存储指标信息了。

  • 下载node_explorer的安装包,下载地址:https://prometheus.io/download/#node_exporter

Grafana可视化监控系统结合SpringBoot使用

  • 这次我们直接把node_explorer安装到Linux服务器上(如果使用Docker容器安装,监控的会是Docker容器的指标信息),将下载的安装包解压到指定目录,并修改文件夹名称:

cd /mydata
tar -zxvf node_exporter-1.1.2.linux-amd64.tar.gz
mv node_exporter-1.1.2.linux-amd64 node_exporter
  • 进入解压目录,使用如下命令运行node_explorer,服务将运行在9100端口上;

cd node_exporter
./node_exporter >log.file 2>&1 &
  • 使用curl命令访问获取指标信息接口,获取到信息表示运行成功;

curl http://localhost:9100/metrics
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 2175
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0
  • 接下来修改Prometheus的配置文件prometheus.yml,创建一个任务定时扫描node_explorer暴露的指标信息;

scrape_configs:
  - job_name: node
    static_configs:
    - targets: ['192.168.5.78:9100']
  • 重启Prometheus容器,可以通过加号->Dashboard来创建仪表盘;

Grafana可视化监控系统结合SpringBoot使用

  • 当然你还可以选择去Grafana的仪表盘市场下载一个Dashboard,市场地址:https://grafana.com/grafana/dashboards

Grafana可视化监控系统结合SpringBoot使用

  • 这里选择了Node Exporter Full这个仪表盘,记住它的ID,访问地址:https://grafana.com/grafana/dashboards/1860

Grafana可视化监控系统结合SpringBoot使用

  • 选择导入Dashboard并输入ID,最后点击Load即可;

Grafana可视化监控系统结合SpringBoot使用

  • 选择数据源为Prometheus,最后点击Import

Grafana可视化监控系统结合SpringBoot使用

  • 导入成功后就可以在Grafana中看到实时监控信息了,是不是够炫酷!

Grafana可视化监控系统结合SpringBoot使用

监控SpringBoot应用

监控SpringBoot应用需要依靠actuatormicrometer,通过暴露actuator的端点,Prometheus可以定时获取并存储指标信息。

  • 修改项目的pom.xml文件,添加actuatormicrometer依赖;

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!-- 集成micrometer,将监控数据存储到prometheus -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>
</dependencies>
  • 修改应用配置文件application.yml,通过actuator暴露监控端口/actuator/prometheus

management:
  endpoints:
    web:
      exposure:
        # 暴露端点`/actuator/prometheus`
        include: 'prometheus'
  metrics:
    tags:
      application: ${spring.application.name}
  • 在监控SpringBoot应用之前,我们需要先运行一个SpringBoot应用,使用如下命令运行即可;

docker run -p 8088:8088 --name mall-tiny-grafana \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-grafana/logs:/var/logs \
-e TZ="Asia/Shanghai" \
-d mall-tiny/mall-tiny-grafana:1.0-SNAPSHOT
  • 修改Prometheus的配置文件prometheus.yml,创建一个任务定时扫描actuator暴露的指标信息,这里需要注意下,由于SpringBoot应用运行在Docker容器中,需要使用docker inspect mall-tiny-grafana |grep IPAddress来获取容器IP地址;

scrape_configs:
  # 采集任务名称
  - job_name: 'mall-tiny-grafana'
    # 采集时间间隔
    scrape_interval: 5s
    # 采集超时时间
    scrape_timeout: 10s
    # 采集数据路径
    metrics_path: '/actuator/prometheus'
    # 采集服务的地址
    static_configs:
      - targets: ['172.17.0.5:8088']
  • 我们可以通过Prometheus的可视化界面,来确定Prometheus是否能获取到指标信息;

Grafana可视化监控系统结合SpringBoot使用

  • 同样,我们可以从仪表盘市场导入仪表盘,访问地址:https://grafana.com/grafana/dashboards/14370

Grafana可视化监控系统结合SpringBoot使用

  • 导入成功后就可以在Grafana中看到SpringBoot实时监控信息了,果然够炫酷!

Grafana可视化监控系统结合SpringBoot使用

总结

通过对Grafana的一波实践,我们可以发现,使用Grafana来进行数据可视化的过程是这样的:首先我们得让被监控方将指标信息暴露出来,然后用Prometheus定时获取并存储指标信息,最后将Prometheus配置为Grafana的可视化数据源。

参考资料

项目源码地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-grafana

到此这篇关于使用Grafana监控Redis的文章就介绍到这了!

Redis 相关文章推荐
在K8s上部署Redis集群的方法步骤
Apr 27 Redis
Redis延迟队列和分布式延迟队列的简答实现
May 13 Redis
为Java项目添加Redis缓存的方法
May 18 Redis
解析高可用Redis服务架构分析与搭建方案
Jun 20 Redis
redis不能访问本机真实ip地址的解决方案
Jul 07 Redis
Redis 持久化 RDB 与 AOF的执行过程
Nov 07 Redis
Redis中缓存穿透/击穿/雪崩问题和解决方法
Dec 04 Redis
Redis命令处理过程源码解析
Feb 12 Redis
Redis实现一个账号只能登录一个设备
Apr 19 Redis
redis protocol通信协议及使用详解
Jul 15 Redis
Redis过期数据是否会被立马删除
Jul 23 Redis
Redis实战之Lettuce的使用技巧详解
Dec 24 Redis
Redis官方可视化工具RedisInsight安装使用教程
Redis实现一个账号只能登录一个设备
Apr 19 #Redis
Redis如何实现验证码发送 以及限制每日发送次数
Apr 18 #Redis
Redis实战高并发之扣减库存项目
Redis中key的过期删除策略和内存淘汰机制
解决 Redis 秒杀超卖场景的高并发
redis 解决库存并发问题实现数量控制
You might like
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
python3.6实现学生信息管理系统
2019/02/21 Python
python实现画循环圆
2019/11/23 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
同学会主持词
2014/03/18 职场文书
市政管理求职信范文
2014/05/07 职场文书
租赁协议书
2015/01/27 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL