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
英文地址,請注明出處:http://en.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;的樣式…