Spring Boot 监控实战:集成 Prometheus 与 Grafana,打造全方位监控体系

前言

在当今微服务架构盛行的时代,应用程序的监控变得尤为重要。Spring Boot 作为广泛使用的微服务框架,其监控需求也日益增加。Prometheus 和 Grafana 作为开源监控领域的佼佼者,为 Spring Boot 应用提供了强大的监控能力。本文将详细介绍如何将 Spring Boot 应用与 Prometheus 和 Grafana 集成,实现从数据采集到可视化展示,再到报警通知的全方位监控体系。通过本文的实践,你将能够快速搭建一套高效、可靠的监控系统,提升系统的可维护性和稳定性。

Prometheus 与 Grafana 简介

Prometheus
Prometheus 是一个开源的监控系统,主要用于收集和存储时间序列数据。它通过 HTTP 协议从目标系统拉取监控指标,并将这些指标存储在本地的时间序列数据库中。Prometheus 提供了强大的查询语言 PromQL,可以方便地查询和分析监控数据。
Grafana
Grafana 是一个开源的分析和可视化平台,支持多种数据源,包括 Prometheus。它允许用户创建丰富的仪表板,通过图表、表格等形式展示监控数据。Grafana 提供了灵活的配置选项,可以满足不同用户的需求。
二者关系
Prometheus 和 Grafana 是监控领域的黄金搭档。Prometheus 负责采集和存储监控数据,而 Grafana 则负责将这些数据以可视化的方式展示出来。通过将二者结合,用户可以快速搭建一套完整的监控系统,实现从数据采集到可视化的全流程监控。

为什么使用 Prometheus 和 Grafana

1.开源免费:Prometheus 和 Grafana 都是开源软件,无需支付高昂的许可费用,适合各种规模的企业和个人开发者。
2.强大的功能:Prometheus 提供了强大的监控数据采集和查询功能,而 Grafana 提供了丰富的可视化选项,可以满足各种监控需求。
3.社区支持:二者拥有庞大的社区,提供了大量的插件、模板和文档,用户可以轻松找到解决方案。
4.易用性:Prometheus 和 Grafana 的配置和使用都非常简单,即使是新手也能快速上手。

下面我们开始针对 Spring Boot 来集成 Prometheus 与 Grafana!

一、Spring Boot 应用配置

1.添加依赖

在 Spring Boot 项目中,我们首先需要添加必要的依赖。打开项目的 pom.xml 文件,添加以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

这些依赖将使 Spring Boot 应用能够通过 Actuator 暴露 Prometheus 格式的监控指标。

2.配置 application.yml

接下来,我们需要在 application.yml 文件中配置 Actuator 以暴露 Prometheus 端点:

management:endpoints:web:exposure:include: prometheus,health,metricsprometheus:metrics:export:enabled: true

通过以上配置,Spring Boot 应用将能够通过 /actuator/prometheus 端点输出监控指标,供 Prometheus 采集,这里需要在你使用的安全框架中将 /actuator/** 白名单放开

二、Docker 安装 Prometheus 和 Grafana

1.创建配置文件目录

在宿主机上创建 Prometheus 和 Grafana 的配置文件目录并配置权限:

mkdir -p /data/docker/{grafana,prometheus}
chmod -R 777 /data/docker/grafana
chmod -R 777 /data/docker/prometheus

这些目录将用于存放 Prometheus 和 Grafana 的配置文件和数据。

2.准备 Prometheus 配置文件

创建 prometheus.yml 文件并放置在 /data/docker/prometheus 目录下:

global:scrape_interval: 15sevaluation_interval: 15sscrape_configs:- job_name: 'spring-boot-application'metrics_path: '/actuator/prometheus'static_configs:- targets: ['<Spring Boot 应用的 IP>:<端口>']

注意:在 targets 中填写你的 Spring Boot 应用的 IP 地址和端口,以便 Prometheus 能够正确采集监控指标。

3.启动 Prometheus 容器

运行 Prometheus 容器并挂载配置文件和数据目录:

docker run -d \--name=prometheus \-p 9090:9090 \-v /data/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \-v /data/docker/prometheus:/prometheus \prom/prometheus

启动后,你可以通过访问 http://服务器IP:9090 来查看 Prometheus 的 Web 界面。

4.启动 Grafana 容器

运行 Grafana 容器并挂载数据目录:

docker run -d \--name=grafana \-p 3000:3000 \-v /data/docker/grafana:/var/lib/grafana \grafana/grafana

启动后,访问 http://服务器IP:3000,默认用户名和密码为 admin/admin,登录后即可开始使用 Grafana。

三、Grafana 配置

1.添加数据源

访问 Grafana 的 Web 界面(默认地址为 http://服务器IP:3000,用户名和密码为 admin/admin),添加 Prometheus 作为数据源:

  • URL:http://localhost:9090
  • Access:Browser

在最新版中,左侧菜单栏有一个 Connections ,在这里添加即可:
在这里插入图片描述
点击 “Save & Test” 按钮,如果配置正确,将显示 “Data source is working” 的提示

2.创建仪表板

在 Grafana 中创建新的仪表板,并添加面板来展示关心的监控指标。可以通过 Prometheus 查询语言(PromQL)选择希望可视化的指标。例如,你可以添加一个面板来展示 Spring Boot 应用的请求延迟:

job:http_request_duration_seconds:mean5m{job="spring-boot-application"}

通过这种方式,你可以创建多个面板,展示不同的监控指标,如请求量、错误率等。

另外也可通过去 grafana官网 下载适合自己的仪表盘,最后导入即可使用;

四、报警配置(可选)

1.配置 Alertmanager

创建 alertmanager.yml 文件并放置在 /data/docker/prometheus 目录下:

global:resolve_timeout: 5mroute:group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 12hreceiver: 'webhook'receivers:- name: 'webhook'webhook_configs:- url: 'https://your-webhook-url'

在 url 中填写你的 Webhook 接收地址,用于接收报警通知

2.配置 Prometheus 告警规则

创建 prometheus.rules.yml 文件并放置在 /data/docker/prometheus 目录下:

groups:- name: examplerules:- alert: HighRequestLatencyexpr: job:http_request_duration_seconds:mean5m{job="spring-boot-application"} > 0.5for: 10mlabels:severity: pageannotations:summary: "High request latency on {{ $labels.instance }}"description: "{{ $labels.instance }} has a mean request latency above 0.5s (current value: {{ $value }}s)"

在 expr 中定义了告警规则,当请求延迟超过 0.5 秒时触发告警

3.启动 Alertmanager 容器

运行 Alertmanager 容器并挂载配置文件:

docker run -d \--name=alertmanager \-p 9093:9093 \-v /data/docker/prometheus/alertmanager.yml:/etc/alertmanager/config.yml \prom/alertmanager

4.配置 Prometheus 使用 Alertmanager
prometheus.yml 文件中添加 Alertmanager 配置:

alerting:alertmanagers:- static_configs:- targets: ['localhost:9093']

通过以上配置,Prometheus 将能够将告警信息发送到 Alertmanager,进而触发报警通知

结语

通过本文的介绍,你已经掌握了如何将 Spring Boot 应用与 Prometheus 和 Grafana 集成,实现从数据采集到可视化展示,再到报警通知的全方位监控体系。希望本文能够帮助你在实际项目中快速搭建高效、可靠的监控系统,提升系统的可维护性和稳定性。如果你在实践过程中遇到任何问题,欢迎随时交流和探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96461.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS中的多线程——Web Worker

众所周知&#xff0c;JavaScript 是单线程运行的&#xff08;至于为什么是单线程可以看一下这篇文章——事件循环机制&#xff09;&#xff0c;当浏览器主线程被大量计算任务阻塞时&#xff0c;页面就会出现明显的卡顿现象。Web Worker 提供了在独立线程中运行 JavaScript 的能…

【SQL注入】延时盲注

sleep(n)​​: 核心延时函数。使数据库程序暂停 n秒。​​if(condition, true_expr, false_expr)​​: 条件判断函数。如果 condition为真&#xff0c;执行 true_expr&#xff0c;否则执行 false_expr。​​用于将延时与判断条件绑定​​。​​mid(a, b, c)​​: 字符串截取函数…

IntelliJ IDEA 2025.1 Java Stream Debugger 快速使用指南

1. 功能概览 Java Stream Debugger 提供 Trace Current Stream Chain 功能&#xff0c;用来在调试时分析和可视化 Stream 操作链。 主要用途&#xff1a; 在运行时查看流操作链的每一步输出找出 map/filter 等操作的问题避免手动加 peek() 打印调试2. 使用入口 在 IDEA 2025.1 …

ARM-指令集全解析:从基础到高阶应用

一、ARM 指令集体系结构版本ARM 公司定义了多个指令集版本&#xff1a;ARMv1&#xff1a;原型机 ARM1&#xff0c;没有用于商业产品。ARMv2&#xff1a;扩展 V1&#xff0c;包含 32 位乘法指令和协处理器指令。ARMv3&#xff1a;第一个微处理器 ARM6 核心&#xff0c;支持 Cach…

第3讲 机器学习入门指南

近年来&#xff0c;随着企业和个人生成的数据量呈指数级增长&#xff0c;机器学习已成为日益重要的技术领域。从自动驾驶汽车到流媒体平台的个性化推荐&#xff0c;机器学习算法已广泛应用于各个场景。让我们深入解析机器学习的核心要义。3.1 机器学习定义机器学习是人工智能的…

深入理解跳表:多层索引加速查找的经典实现

跳表&#xff08;Skip List&#xff09;是一种多层有序链表结构&#xff0c;通过引入多级索引加速查找&#xff0c;其核心设计类似于“立体高速公路系统”&#xff0c;底层是原始链表&#xff0c;上面有各种高度的"高架桥"。 高层道路跨度大&#xff0c;连接远方节点…

Flutter 视频播放器——flick_video_player 介绍与使用

在移动端应用中&#xff0c;视频播放是一个常见的功能场景&#xff0c;例如短视频、直播、课程、广告展示等。 Flutter 本身并没有直接提供视频播放器组件&#xff0c;而是依赖第三方库来实现。 今天要介绍的库是 flick_video_player&#xff0c;它基于 video_player 封装&…

编写cmakelists文件常用语句

cmake_minimum_required (VERSION 3.10) 指定最小版本project(XXXX) 指定项目名字 ---------------set(MAIN_EXEC_NAME dwarf_parser) 定义变量${ MAIN_EXEC_NAME } 变量取值set(CMAKE_CXX_STANDARD 14) 指定c14标准&#xff0c;还有11、17、20等标准…

麒麟桌面系统找不到mbr启动,并重新安装grub

根据你提供的情况,“麒麟桌面系统找不到MBR启动”,这通常是由于GRUB引导损坏、MBR记录丢失或分区表异常导致的。你可以按照以下步骤重新安装GRUB并修复MBR启动: ✅ 步骤一:准备工具 使用银河麒麟LiveCD或U盘启动盘(可用Ventoy制作); 启动电脑,选择从U盘或光盘进入Live环…

【音频字幕】构建一个离线视频字幕生成系统:使用 WhisperX 和 Faster-Whisper 的 Python 实现

一、背景介绍 对于一端没有字幕外国视频、字幕&#xff0c;在不懂外语的情况下&#xff0c;怎么获取相关内容&#xff1f;作为技术宅&#xff0c;怎么自建搭建一个语音转文字的环境当前AI技术这么发达&#xff1f; 试试 二、系统设计 音频提取(仅仅是视频需要该逻辑、本身就是音…

Linux ALSA架构:PCM_OPEN流程 (二)

一 应用端源码路径: external\tinyalsa\pcm.c external\tinyalsa\pcm_hw.cstruct pcm *pcm_open(unsigned int card, unsigned int device,unsigned int flags, struct pcm_config *config) {...pcm->ops &hw_ops;pcm->fd pcm->ops->open(card, device,…

tp5的tbmember表闭包查询 openid=‘abc‘ 并且(wx_unionid=null或者wx_unionid=‘‘)

闭包查询 tbmember表闭包查询查询 openid‘abc并且islose0并且islogout0并且&#xff08;wx_unionidnull或者wx_unionid’&#xff09; Db::table(tbmember)->where([openid>abc,islose>0,islogout>0])->where(function ($query){$query->where(wx_unioni…

邪修实战系列(3)

1、第一阶段邪修实战总览&#xff08;9.1-9.30&#xff09; 把第一阶段&#xff08;基础夯实期&#xff09;的学习计划拆解成极具操作性的每日行动方案。这个计划充分利用我“在职学习”的特殊优势&#xff0c;强调“用输出倒逼输入”&#xff0c;确保每一分钟的学习都直接服务…

【GD32】ROM Bootloader、自定义Bootloader区别

Bootloader是应用程序跑起来之前&#xff0c;用于初始化的一段程序&#xff0c;它分为两种&#xff0c;ROM Bootloader、自定义Bootloader。GD32芯片出厂时预烧录在ROM中的Bootloader&#xff08;以下简称ROM Bootloader&#xff09;和自己编写的Bootloader&#xff08;以下简称…

Linux防火墙-Firewalld

一、 概述 按表现形式划分&#xff1a; 软件防火墙&#xff1a; 集成在系统内部&#xff0c;Linux系统&#xff1a; iptables、firewalld、ufw&#xff1b; windows系统下&#xff1a; windows defender 硬件防火墙&#xff1a; 华为防火墙、思科防火墙、奇安信防火墙、深信服防…

【Qt】PyQt、原生QT、PySide6三者的多方面比较

目录 引言 一、基本定义 二、核心对比维度 1. 编程语言与开发效率 2. 功能与 API 兼容性 3. 性能表现 4. 许可证与商业使用 5. 社区与文档支持 三、迁移与兼容性 四、适用场景推荐 五、总结对比表 总结 引言 PySide6、PyQt&#xff08;通常指 PyQt5/PyQt6&#xf…

JavaWeb站内信系统 - 技术设计文档

1. 系统概述1.1 项目背景本系统旨在为企业或社区平台提供一套完整的站内信解决方案&#xff0c;支持用户之间的消息发送、接收、管理等功能&#xff0c;提升用户间的沟通效率。1.2 设计目标实现用户间消息发送和接收支持一对一和一对多消息发送提供消息状态跟踪&#xff08;已读…

Java基础 9.10

1.System类常见方法和案例exit&#xff1a;退出当前程序arraycopy&#xff1a;复制数组元素&#xff0c;比较适合底层调用&#xff0c;一般使用 Arrays.copyOf 完成复制数组int[] src{1,2,3};int[] dest new int[3]; System.arraycopy(src, 0, dest, 0, 3);currentTimeMilens&…

详解flink性能优化

1. 简介 Apache Flink是一个强大的流处理框架&#xff0c;其性能很大程度上取决于内存的使用效率。在大规模数据处理场景中&#xff0c;合理的内存配置和优化可以显著提升Flink作业的性能和稳定性。本文将深入探讨Flink内存优化的各个方面&#xff0c;包括状态后端选择、内存配…

VueFlow的箭头怎么调整

正好最近用到了VueFlow组件&#xff0c;发现箭头默认样式太小&#xff0c;无法体现流程展示&#xff0c;因此翻阅相关资料得出下列方法&#xff0c;有什么更好的方法&#xff0c;大家可以推荐推荐&#xff0c;谢谢。方法1&#xff1a;通过边&#xff08;Edge&#xff09;的样式…