Grafana / Prometheus监控SpringBoot应用
一、Prometheus 介绍
Prometheus 中文名称为普罗米修斯,受启发于Google 的Brogmon 监控系统,从2012年开始由前Google工程师在Soundcloud 以开源软件的形式进行研发,2016年6月发布1.0版本。Prometheus 可以看作是 Google 内部监控系统Borgmon 的一个实现。
下图说明了Prometheus 的体系结构及其部分生态系统组件。其中 Alertmanager 用于告警,Grafana 用于监控数据可视化.
在这里我们了解到Prometheus 这几个特征即可:
1.数据收集器,它以配置的时间间隔定期通过HTTP提取指标数据。
2.一个时间序列数据库,用于存储所有指标数据。
3.一个简单的用户界面,您可以在其中可视化,查询和监视所有指标。
二、Grafana 介绍
Grafana 是一款采用 go 语言编写的开源应用,可以帮助用户通过创建仪表盘、图表和警报来实时监控和分析各种指标和数据源。
以下是Grafana的一些主要特点和功能:
- 多种数据源支持:Grafana支持各种数据源,包括Graphite、Prometheus、InfluxDB、Elasticsearch、MySQL等。用户可以从这些数据源中获取数据并进行可视化。
- 强大的数据可视化:Grafana提供了丰富的图表和仪表盘编辑工具,用户可以根据需求创建各种类型的图表,如折线图、柱状图、饼图等。同时,用户可以自定义图表样式、颜色和标签等。
- 灵活的警报机制:Grafana允许用户设置警报规则,当指标达到或超过特定阈值时,会发送通知或触发其他操作。用户可以根据需求设置警报条件和通知方式,如邮件、Slack、PagerDuty等。
- 用户友好的界面:Grafana提供了直观易用的用户界面,使用户可以轻松地创建、编辑和管理仪表盘。用户可以通过拖放、缩放和调整来自定义仪表盘布局和组件。
- 多用户和权限管理:Grafana支持多用户和团队协作,管理员可以设置不同用户的权限和角色。用户可以共享仪表盘和报告,并进行版本控制和审计。
- 社区支持和插件生态系统:Grafana拥有活跃的开源社区,用户可以从社区中获取支持、解决问题和分享经验。此外,Grafana还有丰富的插件生态系统,用户可以通过插件扩展和定制功能。
总的来说,Grafana是一个功能强大且易于使用的数据可视化和监控平台,适用于各种场景,如应用性能监控、基础设施监控、业务分析等。
三、配置Spring 应用
在Spring Boot Actuator 模块 详解:健康检查,度量,指标收集和监控中,我有提到过Actuator 模块也可以和一些外部的应用监控系统整合,其中就包括Prometheus 。那么Spring Boot Actuator 怎么让 Spring Boot 应用和Prometheus 这种监控系统结合起来。
- 在项目中引入一下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<scope>runtime</scope>
</dependency>
- 在 application.yml文件中添加一下内容:
server:
port: 8080
servlet:
context-path: /
spring:
application:
name: SpringBoot-ABlog
# 基于 grafana prometheus(普罗米修斯) 监控
# 1、将所有Spring Web 监控点暴露, 就可以对外提供各种的指标数据了
management:
endpoints:
web:
exposure:
include: "*"
# end
# 2、将 SpringWeb 暴露的数据转为 prometheus 格式
endpoint:
prometheus:
enabled: true
health:
show-details: always # 查看更多的细节
# 3、将指标设置为 允许导出
metrics:
export:
prometheus:
enabled: true
- 这个时候我们启动项目,在浏览器访问 localhost:8080/actuator/ 会看到一下内容: tips:如果设置了 servlet.context-path 那么需要在路径路径前加,如
localhost:8080/xxxxx/actuator/
-
其中就包含了 http://localhost:8080/actuator/prometheus 这个链接。因为上图数据为JSON 格式,当我们访问 http://localhost:8080/actuator/prometheus会出现一下数据:
-
这个是将 SpringWeb 暴露的数据转为 prometheus 格式。
-
在项目中创建配置类(或在启动类中) 添加 Bean
/**
* grafana prometheus(普罗米修斯) 监控 配置
*
* @author Mr.An
* @date 2023-09-06 22:49:13
*/
@Configuration
public class PrometheusWebConfig {
/**
* 该Bean 是 本应用向 prometheus(普罗米修斯) 额外添加 applicationName
*
* @param applicationName 应用名称
* @return {@link MeterRegistryCustomizer}<{@link MeterRegistry}>
*/
@Bean
MeterRegistryCustomizer<MeterRegistry> configuration(
@Value("${spring.application.name}") String applicationName) {
return (i) -> i.config().commonTags("application", applicationName);
}
}
- ok 项目部署完毕,我们打包上传服务器部署。这里可以参考 我后续的另一个博客,实现docker一键上传部署。
四、部署和配置 Grafana与Prometheus
1、在 /home/ 下创建 docker-compose.yml 文件
vim docker-compose.yml
2、写入一下信息:
version: '3'
services:
grafana:
image: grafana/grafana:master # 原镜像`grafana/grafana:master`
container_name: grafana # 容器名为'grafana'
restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
environment:
- GF_LANG=zh-CN
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "/home/grafana/data:/var/lib/grafana"
- "/home/grafana/config/defaults.ini:/usr/share/grafana/conf/defaults.ini"
- "/home/grafana/log:/var/log/grafana"
ports: # 映射端口
- "3001:3000"
prometheus:
image: prom/prometheus:latest
restart: always
container_name: prometheus
hostname: prometheus
environment:
- TZ=Asia/Shanghai
ports:
- "9090:9090"
volumes:
- /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- /home/prometheus/data:/prometheus
3、在 /home 文件夹下创建 grafana 文件夹 和 prometheus 文件夹
cd home
mkdir grafana
mkdir prometheus
4、添加 /home/grafana/config/defaults.ini 文件
cd /home/grafana
mkdir config
cd config
vim defaults.ini
5、在 defaults.ini 添加一下内容: 文件地址:defaults.ini
6、创建 /home/prometheus/prometheus.yml 文件 内容如下:
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"] # 此处为 Prometheus 的ip和端口
### 以下内容为SpringBoot应用配置
- job_name: 'SpringBoot-ABlog'
scrape_interval: 5s
metrics_path: '/actuator/prometheus'
static_configs:
- targets: [10.0.4.7:8080] ### 将此处修改为Springboot 应用程序 的ip和端口
7、设置权限
chmod 777 /home/grafana/data
chmod 777 /home/grafana/config
chmod 777 /home/grafana/log
chmod 777 /home/prometheus/prometheus.yml
chmod 777 /home/prometheus/data
8、启动
docker-compose up -d
9、浏览器访问ip:3001访问grafana,默认账号密码admin/admin:
10、添加data source
11、选择prometheus
12、输入 prometheus 的地址并保存
13、出现 Data source is working 即保存成功
14、导入 面板信息
15、输入 4701 点 load , 4701 为面板的ID ,其他可访问 Dashboards | Grafana Labs 查看
16、我这里已经导入过了,所以显示已存在,正常我们会看到 JVM (Micrometer) ,后点击 Prometheus 选择我们刚刚添加过的data course
17、最后点击 Import 即可。
18、最后的效果如下: 可以查看较为详细的JVM 信息,堆、栈、新生代、老年代等。其余的监控我们还可以自定义等等。
OK~ 结束~
- 感谢你赐予我前进的力量