Prometheus + Grafana 構(gòu)建強(qiáng)大的監(jiān)控和數(shù)據(jù)可視化系統(tǒng)(最新推薦)
前言
1. Grafana 是什么
開始前首先要問(wèn)一個(gè)問(wèn)題,Grafana 到底是什么。
Grafana 是一個(gè)監(jiān)控儀表系統(tǒng),它是由 Grafana Labs 公司開源的的一個(gè)系統(tǒng)監(jiān)測(cè) (System Monitoring) 工具。它可以大大幫助你簡(jiǎn)化監(jiān)控的復(fù)雜度,你只需要提供你需要監(jiān)控的數(shù)據(jù),它就可以幫你生成各種可視化儀表。同時(shí)它還有報(bào)警功能,可以在系統(tǒng)出現(xiàn)問(wèn)題時(shí)通知你。
Grafana 不對(duì)數(shù)據(jù)源作假設(shè),它支持以下各種數(shù)據(jù),也就是說(shuō)如果你的數(shù)據(jù)源是以下任意一種,它都可以幫助生成儀表。同時(shí)在市面上,如果 Grafana 稱第二,那么應(yīng)該沒(méi)有敢稱第一的儀表可視化工具了。因此,如果你搞定了 Grafana,它幾乎是一個(gè)會(huì)陪伴你到各個(gè)公司的一件稱心應(yīng)手的兵器。
2.Prometheus是什么
Prometheus 是一個(gè)時(shí)間序列數(shù)據(jù)庫(kù)。但是,它不僅僅是一個(gè)時(shí)間序列數(shù)據(jù)庫(kù)。它涵蓋了可以綁定的整個(gè)生態(tài)系統(tǒng)工具集及其功能,非常適合Kubernetes集群的監(jiān)控。Prometheus的基本原理是通過(guò)HTTP協(xié)議周期性抓取被監(jiān)控組件的狀態(tài),任意組件只要提供對(duì)應(yīng)的HTTP接口就可以接入監(jiān)控。不需要任何SDK或者其他的集成過(guò)程。這樣做非常適合做虛擬化環(huán)境監(jiān)控系統(tǒng),比如VM、Docker、Kubernetes等。輸出被監(jiān)控組件信息的HTTP接口被叫做exporter 。目前互聯(lián)網(wǎng)公司常用的組件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系統(tǒng)信息(包括磁盤、內(nèi)存、CPU、網(wǎng)絡(luò)等等)。Promethus有以下特點(diǎn):
- 支持多維數(shù)據(jù)模型:由度量名和鍵值對(duì)組成的時(shí)間序列數(shù)據(jù)
- 內(nèi)置時(shí)間序列數(shù)據(jù)庫(kù)TSDB
- 支持PromQL查詢語(yǔ)言,可以完成非常復(fù)雜的查詢和分析,對(duì)圖表展示和告警非常有意義
- 支持HTTP的Pull方式采集時(shí)間序列數(shù)據(jù)
- 支持PushGateway采集瞬時(shí)任務(wù)的數(shù)據(jù)
- 支持服務(wù)發(fā)現(xiàn)和靜態(tài)配置兩種方式發(fā)現(xiàn)目標(biāo)
- 支持接入Grafana
3.Grafana與Prometheus之間的關(guān)系
把 車輛 類比為 計(jì)算機(jī)系統(tǒng) 或者一個(gè) 軟件系統(tǒng):Grafana就是儀表盤,它和車輛的速度表、水溫表是一類的,通過(guò)這些表盤你可以實(shí)時(shí)了解系統(tǒng)運(yùn)行情況。而Prometheus作為一個(gè)時(shí)序數(shù)據(jù)庫(kù),其實(shí)它和大家熟知的Mysql是一類的東西,都是存儲(chǔ)數(shù)據(jù),提供查詢的,它存儲(chǔ)了計(jì)算機(jī)系統(tǒng)在各個(gè)時(shí)間點(diǎn)上的監(jiān)控?cái)?shù)據(jù)。而Grafana儀表盤上的數(shù)據(jù),就是通過(guò)查詢Prometheus獲取的。
監(jiān)控儀表盤效果預(yù)覽
監(jiān)控系統(tǒng)搭建
這套監(jiān)控主要用到了 SpringBoot Actuator + Prometheus + Grafana 三個(gè)技術(shù)模塊,輕量可擴(kuò)展。
1.環(huán)境搭建(Docker部署Prometheus和Grafana)
拉取鏡像
docker pull bitnami/prometheus:2.47.2 docker pull grafana/grafana:10.2.0
2.配置grafana
運(yùn)行g(shù)rafana鏡像,拷貝配置文件
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服務(wù)端口
# The http port to usehttp_port = 4000
修改grafana服務(wù)的mysql配置
type=mysql host=你的mysqlip:3306 name=grafana user=數(shù)據(jù)庫(kù)賬戶 password=數(shù)據(jù)庫(kù)密碼
接下來(lái)配置數(shù)據(jù)源,這里我們使用的是Prometheus數(shù)據(jù)源
在/root/docker/Grafana/grafana/provisioning/datasources目錄下新建配置文件datasource.yml
apiVersion: 1 datasources: - name: Prometheus type: prometheus access: proxy url: http://你的Prometheus服務(wù)ip地址:9090 isDefault: true
3.配置Prometheus
新建配置文件/root/docker/Grafana/prometheus/prometheus.yml
targets參數(shù)為你要監(jiān)控的應(yīng)用的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)一啟動(dòng)
version: '1' # 啟用腳本;docker-compose -f docker-compose.yml up -d services: # 數(shù)據(jù)采集 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運(yùn)行指令
docker compose up -d
如果要停止服務(wù),在docker-compose.yml目錄下輸入docker compose stop命令即可
查看是否正常啟動(dòng)
4.springboot應(yīng)用導(dǎo)入
以上我們成功部署了監(jiān)控環(huán)境,接下來(lái)我們會(huì)講述如何在springboot程序中引入監(jiān)控
導(dǎo)入maven依賴
<!-- 監(jiān)控;actuator-上報(bào)、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)控所需的內(nèi)容,aspectjweaver 是使用 prometheus 添加自定義的埋點(diǎn),而這個(gè)會(huì)用到切面。
編寫配置類PrometheusConfiguration啟動(dòng)監(jiān)聽服務(wù)
/** * @author www.luckysj.top kitie * @description 啟動(dòng)監(jiān)聽服務(wù) * @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)控埋點(diǎn)
在需要監(jiān)控的方法上添加這個(gè)注解,其中value為監(jiān)控埋點(diǎn)名稱,在grafana儀表盤添加儀表時(shí)可根據(jù)這個(gè)名稱找到相關(guān)的監(jiān)測(cè)值
@Timed(value="chat_completions_http",description="xxxx接口")
5.儀表盤配置
訪問(wèn)grafana儀表盤,訪問(wèn)地址如下
http://你的Grafana服務(wù)ip:4000
默認(rèn)賬戶密碼均為admin,第一次進(jìn)入需要更改密碼
接下來(lái)我們導(dǎo)入jvm儀表盤
儀表盤代碼輸入4701,這是使用較多的jvm儀表盤,他會(huì)根據(jù)代碼自動(dòng)下載對(duì)應(yīng)儀表盤
點(diǎn)擊load,儀表盤加載完成,即可進(jìn)入JVM儀表盤界面了
欸,怎么你的是中文界面?當(dāng)然,這是可以設(shè)置的
6.自定義儀表
最后再講下自定義儀表吧!
進(jìn)入JVM儀表盤,在右上角位置點(diǎn)擊添加可視化
然后會(huì)進(jìn)入到自定義界面
在這里,你可以選擇顯示的數(shù)據(jù),你在springboot那定義的切面數(shù)據(jù)名可以在這里找到,點(diǎn)擊數(shù)據(jù),并點(diǎn)擊右上角的Run queries
然后對(duì)應(yīng)的數(shù)據(jù)圖表的出來(lái)了
在右側(cè)可對(duì)圖表進(jìn)行定制化的樣式設(shè)置
點(diǎn)擊Apply應(yīng)用圖表到儀表盤
在儀表盤界面,可對(duì)圖表進(jìn)行拖動(dòng)位置,調(diào)整大小等操作,很方便!
最后,在儀表盤界面保存設(shè)置(這點(diǎn)很重要,不然功虧一簣)
更后面多細(xì)節(jié)就靠自己挖掘啦
到此這篇關(guān)于Prometheus + Grafana 構(gòu)建強(qiáng)大的監(jiān)控和數(shù)據(jù)可視化系統(tǒng)的文章就介紹到這了,更多相關(guān)Prometheus 數(shù)據(jù)可視化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 解析prometheus+grafana監(jiān)控nginx的方法
- Prometheus 監(jiān)控MySQL使用grafana展示
- 基于docker 搭建Prometheus+Grafana的過(guò)程詳解
- SpringBoot+Prometheus+Grafana實(shí)現(xiàn)應(yīng)用監(jiān)控和報(bào)警的詳細(xì)步驟
- 使用Prometheus+Grafana的方法監(jiān)控Springboot應(yīng)用教程詳解
- 使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能
- 利用Prometheus與Grafana對(duì)Mysql服務(wù)器的性能監(jiān)控詳解
相關(guān)文章
滑動(dòng)驗(yàn)證碼的設(shè)計(jì)與理解
這篇文章主要介紹了滑動(dòng)驗(yàn)證碼的設(shè)計(jì)與理解,本文通過(guò)實(shí)例代碼給大家介紹小網(wǎng)站是怎么設(shè)計(jì)的,代碼簡(jiǎn)單易懂,需要的朋友可以參考下2019-08-08將ChatGPT接入微信實(shí)現(xiàn)智能回復(fù)功能
這篇文章主要介紹了將ChatGPT接入微信實(shí)現(xiàn)智能回復(fù)功能,本項(xiàng)目是基于ChatGPT的微信聊天機(jī)器人,通過(guò)?OpenAI?接口生成對(duì)話內(nèi)容,使用?itchat?實(shí)現(xiàn)微信消息的接收和自動(dòng)回復(fù),需要的朋友可以參考下2023-02-02關(guān)于解決?“Error:?listen?EACCES:?permission?denied?0.0.0.0:
這篇文章主要介紹了在開發(fā)過(guò)程中常見的錯(cuò)誤Error:listenEACCES:permissiondenied0.0.0.0:80,并提供了兩種解決方法,大家可以根據(jù)需求選擇對(duì)應(yīng)的方法,需要的朋友可以參考下2024-12-12詳解使用內(nèi)網(wǎng)穿透工具Ngrok代理本地服務(wù)
本文主要介紹了使用內(nèi)網(wǎng)穿透工具Ngrok代理本地服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03基于ChatGPT使用AI實(shí)現(xiàn)自然對(duì)話的原理分析
ChatGPT是當(dāng)前自然語(yǔ)言處理領(lǐng)域的重要進(jìn)展之一,可以生成高質(zhì)量的文本,可應(yīng)用于多種場(chǎng)景,如智能客服、聊天機(jī)器人、語(yǔ)音助手等。本文將詳細(xì)介紹ChatGPT的原理、實(shí)戰(zhàn)演練和流程圖,幫助讀者更好地理解ChatGPT技術(shù)的應(yīng)用和優(yōu)勢(shì)2023-05-05Typora?免費(fèi)版下載安裝入門使用教程(超簡(jiǎn)單親測(cè)適用于Windows)
Typora是一款輕便簡(jiǎn)潔的Markdown編輯器,支持即時(shí)渲染技術(shù),這也是與其他Markdown編輯器最顯著的區(qū)別,這篇文章主要介紹了Typora?免費(fèi)版下載安裝(超簡(jiǎn)單親測(cè)適用于Windows)與入門,需要的朋友可以參考下2023-09-09