前言
在當今微服務架構盛行的時代,應用程序的監控變得尤為重要。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 集成,實現從數據采集到可視化展示,再到報警通知的全方位監控體系。希望本文能夠幫助你在實際項目中快速搭建高效、可靠的監控系統,提升系統的可維護性和穩定性。如果你在實踐過程中遇到任何問題,歡迎隨時交流和探討。