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 相关文章推荐
Redis延迟队列和分布式延迟队列的简答实现
May 13 Redis
比较几种Redis集群方案
Jun 21 Redis
k8s部署redis cluster集群的实现
Jun 24 Redis
Redisson实现Redis分布式锁的几种方式
Aug 07 Redis
redis缓存存储Session原理机制
Nov 20 Redis
分布式Redis Cluster集群搭建与Redis基本用法
Feb 24 Redis
redis调用二维码时的不断刷新排查分析
Apr 01 Redis
redis sentinel监控高可用集群实现的配置步骤
Apr 01 Redis
redis复制有可能碰到的问题汇总
Apr 03 Redis
Redis 异步机制
May 15 Redis
基于Redission的分布式锁实战
Aug 14 Redis
Redis官方可视化工具RedisInsight安装使用教程
Redis实现一个账号只能登录一个设备
Apr 19 #Redis
Redis如何实现验证码发送 以及限制每日发送次数
Apr 18 #Redis
Redis实战高并发之扣减库存项目
Redis中key的过期删除策略和内存淘汰机制
解决 Redis 秒杀超卖场景的高并发
redis 解决库存并发问题实现数量控制
You might like
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
项目实践之javascript技巧
2007/12/06 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
Dojo 学习要点
2010/09/03 Javascript
为JS扩展Array.prototype.indexOf引发的问题探讨及解决
2013/04/24 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
jQuery绑定事件不执行但alert后可以正常执行
2014/06/03 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
python网络编程实例简析
2014/09/26 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
python将unicode和str互相转化的实现
2020/05/11 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
PHP面试题大全
2015/10/16 面试题
J2EE包括哪些技术
2016/11/25 面试题
客服专员岗位职责范本
2013/11/29 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
优秀员工评语
2014/02/10 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
销售辞职信范文
2015/03/02 职场文书
团组织推荐意见
2015/06/05 职场文书
高三生物教学反思
2016/02/22 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL