Prometheus + Grafana 構建強大的監(jiān)控和數(shù)據可視化系統(tǒng)(最新推薦)
前言
1. Grafana 是什么
開始前首先要問一個問題,Grafana 到底是什么。
Grafana 是一個監(jiān)控儀表系統(tǒng),它是由 Grafana Labs 公司開源的的一個系統(tǒng)監(jiān)測 (System Monitoring) 工具。它可以大大幫助你簡化監(jiān)控的復雜度,你只需要提供你需要監(jiān)控的數(shù)據,它就可以幫你生成各種可視化儀表。同時它還有報警功能,可以在系統(tǒng)出現(xiàn)問題時通知你。
Grafana 不對數(shù)據源作假設,它支持以下各種數(shù)據,也就是說如果你的數(shù)據源是以下任意一種,它都可以幫助生成儀表。同時在市面上,如果 Grafana 稱第二,那么應該沒有敢稱第一的儀表可視化工具了。因此,如果你搞定了 Grafana,它幾乎是一個會陪伴你到各個公司的一件稱心應手的兵器。
2.Prometheus是什么
Prometheus 是一個時間序列數(shù)據庫。但是,它不僅僅是一個時間序列數(shù)據庫。它涵蓋了可以綁定的整個生態(tài)系統(tǒng)工具集及其功能,非常適合Kubernetes集群的監(jiān)控。Prometheus的基本原理是通過HTTP協(xié)議周期性抓取被監(jiān)控組件的狀態(tài),任意組件只要提供對應的HTTP接口就可以接入監(jiān)控。不需要任何SDK或者其他的集成過程。這樣做非常適合做虛擬化環(huán)境監(jiān)控系統(tǒng),比如VM、Docker、Kubernetes等。輸出被監(jiān)控組件信息的HTTP接口被叫做exporter 。目前互聯(lián)網公司常用的組件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系統(tǒng)信息(包括磁盤、內存、CPU、網絡等等)。Promethus有以下特點:
- 支持多維數(shù)據模型:由度量名和鍵值對組成的時間序列數(shù)據
- 內置時間序列數(shù)據庫TSDB
- 支持PromQL查詢語言,可以完成非常復雜的查詢和分析,對圖表展示和告警非常有意義
- 支持HTTP的Pull方式采集時間序列數(shù)據
- 支持PushGateway采集瞬時任務的數(shù)據
- 支持服務發(fā)現(xiàn)和靜態(tài)配置兩種方式發(fā)現(xiàn)目標
- 支持接入Grafana
3.Grafana與Prometheus之間的關系
把 車輛 類比為 計算機系統(tǒng) 或者一個 軟件系統(tǒng):Grafana就是儀表盤,它和車輛的速度表、水溫表是一類的,通過這些表盤你可以實時了解系統(tǒng)運行情況。而Prometheus作為一個時序數(shù)據庫,其實它和大家熟知的Mysql是一類的東西,都是存儲數(shù)據,提供查詢的,它存儲了計算機系統(tǒng)在各個時間點上的監(jiān)控數(shù)據。而Grafana儀表盤上的數(shù)據,就是通過查詢Prometheus獲取的。
監(jiān)控儀表盤效果預覽

監(jiān)控系統(tǒng)搭建
這套監(jiān)控主要用到了 SpringBoot Actuator + Prometheus + Grafana 三個技術模塊,輕量可擴展。
1.環(huán)境搭建(Docker部署Prometheus和Grafana)
拉取鏡像
docker pull bitnami/prometheus:2.47.2 docker pull grafana/grafana:10.2.0
2.配置grafana
運行grafana鏡像,拷貝配置文件
docker run--name grafana -d grafana/grafana:10.2.0 mkdir ./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

修改grafana服務的mysql配置
type=mysql host=你的mysqlip:3306 name=grafana user=數(shù)據庫賬戶 password=數(shù)據庫密碼

接下來配置數(shù)據源,這里我們使用的是Prometheus數(shù)據源
在/root/docker/Grafana/grafana/provisioning/datasources目錄下新建配置文件datasource.yml
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://你的Prometheus服務ip地址:9090
isDefault: true3.配置Prometheus
新建配置文件/root/docker/Grafana/prometheus/prometheus.yml
targets參數(shù)為你要監(jiān)控的應用的ip地址
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'x-api-app'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: [ '192.168.1.1:7070' ]在/root/docker/Grafana目錄下新建docker-compose.yml文件,方便統(tǒng)一啟動
version: '1'
# 啟用腳本;docker-compose -f docker-compose.yml up -d
services:
# 數(shù)據采集
prometheus:
image: bitnami/prometheus:2.47.2
container_name: prometheus
restart: always
ports:
- 9090:9090
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
# 監(jiān)控界面
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目錄下執(zhí)行compose運行指令
docker compose up -d

如果要停止服務,在docker-compose.yml目錄下輸入docker compose stop命令即可
查看是否正常啟動

4.springboot應用導入
以上我們成功部署了監(jiān)控環(huán)境,接下來我們會講述如何在springboot程序中引入監(jiān)控
導入maven依賴
<!-- 監(jiān)控;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 是監(jiān)控所需的內容,aspectjweaver 是使用 prometheus 添加自定義的埋點,而這個會用到切面。
編寫配置類PrometheusConfiguration啟動監(jiān)聽服務
/**
* @author www.luckysj.top kitie
* @description 啟動監(jiān)聽服務
* @create 2023/12/17 15:25:15
*/
@EnableAspectJAutoProxy
@Configuration
public 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);
}
}自定義監(jiān)控埋點
在需要監(jiān)控的方法上添加這個注解,其中value為監(jiān)控埋點名稱,在grafana儀表盤添加儀表時可根據這個名稱找到相關的監(jiān)測值
@Timed(value="chat_completions_http",description="xxxx接口")
5.儀表盤配置
訪問grafana儀表盤,訪問地址如下
http://你的Grafana服務ip:4000
默認賬戶密碼均為admin,第一次進入需要更改密碼
接下來我們導入jvm儀表盤

儀表盤代碼輸入4701,這是使用較多的jvm儀表盤,他會根據代碼自動下載對應儀表盤

點擊load,儀表盤加載完成,即可進入JVM儀表盤界面了

欸,怎么你的是中文界面?當然,這是可以設置的



6.自定義儀表
最后再講下自定義儀表吧!
進入JVM儀表盤,在右上角位置點擊添加可視化

然后會進入到自定義界面

在這里,你可以選擇顯示的數(shù)據,你在springboot那定義的切面數(shù)據名可以在這里找到,點擊數(shù)據,并點擊右上角的Run queries

然后對應的數(shù)據圖表的出來了

在右側可對圖表進行定制化的樣式設置

點擊Apply應用圖表到儀表盤

在儀表盤界面,可對圖表進行拖動位置,調整大小等操作,很方便!
最后,在儀表盤界面保存設置(這點很重要,不然功虧一簣)

更后面多細節(jié)就靠自己挖掘啦
到此這篇關于Prometheus + Grafana 構建強大的監(jiān)控和數(shù)據可視化系統(tǒng)的文章就介紹到這了,更多相關Prometheus 數(shù)據可視化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于解決?“Error:?listen?EACCES:?permission?denied?0.0.0.0:
這篇文章主要介紹了在開發(fā)過程中常見的錯誤Error:listenEACCES:permissiondenied0.0.0.0:80,并提供了兩種解決方法,大家可以根據需求選擇對應的方法,需要的朋友可以參考下2024-12-12
基于ChatGPT使用AI實現(xiàn)自然對話的原理分析
ChatGPT是當前自然語言處理領域的重要進展之一,可以生成高質量的文本,可應用于多種場景,如智能客服、聊天機器人、語音助手等。本文將詳細介紹ChatGPT的原理、實戰(zhàn)演練和流程圖,幫助讀者更好地理解ChatGPT技術的應用和優(yōu)勢2023-05-05
Typora?免費版下載安裝入門使用教程(超簡單親測適用于Windows)
Typora是一款輕便簡潔的Markdown編輯器,支持即時渲染技術,這也是與其他Markdown編輯器最顯著的區(qū)別,這篇文章主要介紹了Typora?免費版下載安裝(超簡單親測適用于Windows)與入門,需要的朋友可以參考下2023-09-09

