【学习记录】Prometheus + Grafana 实现springboot应用监控
前言
1. Grafana 是什么
开始前首先要问一个问题,Grafana 到底是什么。
Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。
Grafana 不对数据源作假设,它支持以下各种数据,也就是说如果你的数据源是以下任意一种,它都可以帮助生成仪表。同时在市面上,如果 Grafana 称第二,那么应该没有敢称第一的仪表可视化工具了。因此,如果你搞定了 Grafana,它几乎是一个会陪伴你到各个公司的一件称心应手的兵器。
2.Prometheus是什么
Prometheus 是一个时间序列数据库。但是,它不仅仅是一个时间序列数据库。它涵盖了可以绑定的整个生态系统工具集及其功能,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。Promethus有以下特点:
- 支持多维数据模型:由度量名和键值对组成的时间序列数据
- 内置时间序列数据库TSDB
- 支持PromQL查询语言,可以完成非常复杂的查询和分析,对图表展示和告警非常有意义
- 支持HTTP的Pull方式采集时间序列数据
- 支持PushGateway采集瞬时任务的数据
- 支持服务发现和静态配置两种方式发现目标
- 支持接入Grafana
3.Grafana与Prometheus之间的关系
把 车辆 类比为 计算机系统 或者一个 软件系统:Grafana就是仪表盘,它和车辆的速度表、水温表是一类的,通过这些表盘你可以实时了解系统运行情况。而Prometheus作为一个时序数据库,其实它和大家熟知的Mysql是一类的东西,都是存储数据,提供查询的,它存储了计算机系统在各个时间点上的监控数据。而Grafana仪表盘上的数据,就是通过查询Prometheus获取的。
监控仪表盘效果预览
监控系统搭建
这套监控主要用到了 SpringBoot Actuator + Prometheus + Grafana 三个模块组合的起来使用的监控。非常轻量好扩展使用。
1.环境搭建
拉取镜像
docker pull bitnami/prometheus:2.47.2docker pull grafana/grafana:10.2.0
运行grafana镜像,拷贝配置文件
docker run--name grafana -d grafana/grafana:10.2.0mkdir ./root/docker/Grafana/docker container cp grafana:/etc/grafana/ ./root/docker/Grafana/
修改grafana.ini配置文件,路径如下
/root/docker/Grafana/grafana/grafana.ini
修改grafana服务端口
# The http port to usehttp_port = 4000
修改mysql配置
解释
type=mysqlhost=你的mysqlip:3306name=grafanauser=数据库账户password=数据库密码
接下来配置数据源,这里我们使用的是Prometheus数据源
在/root/docker/Grafana/grafana/provisioning/datasources目录下新建配置文件datasource.yml
解释
apiVersion: 1datasources: - name: Prometheus type: prometheus access: proxy url: http://你的Prometheus服务ip地址:9090 isDefault: true
好了,grafana配置好了,接下来配置Prometheus
新建配置文件/root/docker/Grafana/prometheus/prometheus.yml
targets参数为你要监控的应用的ip地址
解释
global: scrape_interval: 15sscrape_configs: - job_name: 'x-api-app' metrics_path: '/actuator/prometheus' static_configs: - targets: [ '192.168.1.1:7070' ]
在/root/docker/Grafana目录下新建docker-compose.yml文件,方便启动
解释
version: '1'# 启用脚本;docker-compose -f docker-compose.yml up -dservices: # 数据采集 prometheus: image: bitnami/prometheus:2.47.2 container_name: prometheus restart: always ports: - 9090:9090 volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # 监控界面 grafana: image: grafana/grafana:10.2.0 container_name: grafana restart: always ports: - 4000:4000 depends_on: - prometheus volumes: - ./grafana:/etc/grafana
在/root/docker/Grafana目录下执行运行指令
docker compose up -d
停止命令
docker compose stop
查看是否正常启动
2.springboot应用配置
以上我们成功部署了监控环境,接下来我们会讲述如何在springboot程序中引入监控
导入maven依赖
解释
<!-- 监控;actuator-上报、prometheus-采集、grafana-展示 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId></dependency><dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId></dependency>
actuator、prometheus 是监控所需的内容,aspectjweaver 是使用 prometheus 添加自定义的埋点,而这个会用到切面。
编写配置类PrometheusConfiguration启动监听服务
解释
/** * @author www.luckysj.top 刘仕杰 * @description 启动监听服务 * @create 2023/12/17 15:25:15 */@EnableAspectJAutoProxy@Configurationpublic class PrometheusConfiguration { @Bean public CollectorRegistry collectorRegistry() { return new CollectorRegistry(); } @Bean public PrometheusMeterRegistry prometheusMeterRegistry(PrometheusConfig config, CollectorRegistry collectorRegistry) { return new PrometheusMeterRegistry(config, collectorRegistry, Clock.SYSTEM); } @Bean public TimedAspect timedAspect(MeterRegistry registry) { return new TimedAspect(registry); } @Bean public CountedAspect countedAspect(MeterRegistry registry) { return new CountedAspect(registry); }}
自定义监控埋点
在需要监控的方法上添加这个注解,其中value为监控埋点名称,在grafana仪表盘添加仪表可根据这个名称找到相关的监测值
@Timed(value="chat_completions_http",description="xxxx接口")
3.仪表盘配置
访问grafana仪表盘,访问地址如下
http://69.165.77.253:4000
默认账户密码均为admin,第一次进入需要更改密码
导入jvm仪表盘
仪表盘代码输入4701,这是使用较多的jvm仪表盘
点击load,即可看到应用的监控数据了