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 27 Redis
浅谈Redis主从复制以及主从复制原理
May 29 Redis
redis cluster支持pipeline的实现思路
Jun 23 Redis
聊一聊Redis与MySQL双写一致性如何保证
Jun 26 Redis
Redis 常见使用场景
Aug 30 Redis
分布式Redis Cluster集群搭建与Redis基本用法
Feb 24 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
解决 Redis 秒杀超卖场景的高并发
Apr 12 Redis
Redis keys命令的具体使用
Jun 05 Redis
Redis全局ID生成器的实现
Jun 05 Redis
Redis实现短信验证码登录的示例代码
Jun 14 Redis
Redis sentinel哨兵集群的实现步骤
Jul 15 Redis
Redis官方可视化工具RedisInsight安装使用教程
Redis实现一个账号只能登录一个设备
Apr 19 #Redis
Redis如何实现验证码发送 以及限制每日发送次数
Apr 18 #Redis
Redis实战高并发之扣减库存项目
Redis中key的过期删除策略和内存淘汰机制
解决 Redis 秒杀超卖场景的高并发
redis 解决库存并发问题实现数量控制
You might like
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
PHP 验证码不显示只有一个小红叉的解决方法
2013/09/30 PHP
php实现的zip文件内容比较类
2014/09/24 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
php输出形式实例整理
2020/05/05 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python调用百度语音REST API
2018/08/30 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
北京华建集团SQL面试题
2014/06/03 面试题
为什么group by 和order by会使查询变慢
2014/05/16 面试题
客服工作职责
2013/12/11 职场文书
运动会表扬稿大全
2014/01/16 职场文书
学生会招新策划书
2014/02/14 职场文书
群众路线教育实践活动心得体会
2014/03/07 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
实验室安全管理制度
2015/08/05 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js