前提
項(xiàng)目重要技術(shù)棧主要是Spring cloud 2.x + docker
現(xiàn)狀
項(xiàng)目中使用到Spring boot admin ,zipkin,以及http上報(bào)等形式收集數(shù)據(jù),mysql持久化必要數(shù)據(jù),在superset上連接數(shù)據(jù)源,以圖表的形式展示數(shù)據(jù)
改進(jìn)目標(biāo)
目前有多個(gè)緯度,不同的監(jiān)控平臺(tái),需要登陸多個(gè)地址去查看不同的數(shù)據(jù),稍顯繁瑣,并且數(shù)據(jù)統(tǒng)計(jì)形式比較亂,查看也不方便,希望有一個(gè)統(tǒng)一的監(jiān)控平臺(tái)
選型
最后選擇Prometheus和Grafna
監(jiān)控產(chǎn)品有很多,比如Prometheus,Graphite,InfluxDB,OpenTSDB等有很多時(shí)間序列數(shù)據(jù)庫。有興趣可以去官網(wǎng)看下Prometheus和其他產(chǎn)品的對比。
快速搭建過程
這個(gè)僅僅是一個(gè)快速上手的描述,如果有需要請按照官方文檔說下進(jìn)行按需配置。
- 項(xiàng)目中改動(dòng):
引入Jar包,最新版本可以去maven倉庫尋找
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.0.8</version>
</dependency>
</dependencies>
yml文件中添加配置:
management:
security:
enabled: false
endpoints:
web:
exposure:
include: '*'
ps:這個(gè)改動(dòng)是因?yàn)镾pring boot 2.x 默認(rèn)只暴露info和health接口,需要暴露出其他接口。(*是圖測試省事,如果服務(wù)暴露公網(wǎng)的情況,自己酌情暴露需要的服務(wù),一般情況下是不需要暴露公網(wǎng)的)
這兩步過后,啟動(dòng)服務(wù),就會(huì)采集一些監(jiān)控信息,并且通過http://localhost:8080/actuator/prometheus進(jìn)行暴露出來,可以看到metric數(shù)據(jù)。原理就是prometheus定時(shí)去掃描配置文件中配置的targets,獲取metric然后存入prometheus中。
- docker啟動(dòng)prometheus+grafna
編寫prometheus.xml的簡單配置文件,配置項(xiàng)有很多,詳情參考官方文檔:
global:
scrape_interval: 5s
evaluation_interval: 5s
scrape_configs:
- job_name: 'metric_job'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:8080'] #Provide your ip and Do not give localhost as we are running the Prometheus in docker
labels:
application: demo-service
ps:注意事項(xiàng)
在docker環(huán)境下,promethus 配置job掃描機(jī)器和 grafna配置數(shù)據(jù)源都需要使用真實(shí)IP。上面targets是寫死的機(jī)器IP和端口,這個(gè)為了靈活性最好配置成類似consul注冊中心的形式,prometheus支持主流的配置中心,請移步文檔查看。還有生產(chǎn)中請不要單機(jī)運(yùn)行,查看文檔如何集群部署。
- 編寫docker-compose文件
version: '3'
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
grafana:
image: grafana/grafana
ports:
- 3000:3000
depends_on:
- prometheus
- 啟動(dòng)docker容器
docker-compose up -d
啟動(dòng)完成后校驗(yàn)一下:
prometheus訪問:http://localhost:9090
grafna 訪問:http://localhost:3000
grafna配置監(jiān)控項(xiàng)
主要配置監(jiān)控內(nèi)容:
-
Basic
應(yīng)用啟動(dòng)時(shí)間,運(yùn)行時(shí)長,cpu使用率,內(nèi)存使用率等
image.png -
JVM
Eden,Survivor,Old,MetaData 等Space,classload數(shù),線程數(shù),gc數(shù),gc停頓時(shí)長等信息
image.png -
Http
Http請求數(shù),Http響應(yīng)時(shí)長,各個(gè)狀態(tài)碼等請求數(shù),請求速率(QPS)等
image.png Log
各種級(jí)別log等數(shù)量,主要關(guān)注error和warn~其他
根據(jù)actuator/prometheus接口的收集的內(nèi)容,結(jié)合prometheus提供的各種函數(shù),可以根據(jù)需求顯示自己想要的監(jiān)控信息。
ps: 重點(diǎn)?。?!理清自己的需求,需要監(jiān)控那些信息,熟悉prometheus的各種使用方式和函數(shù)。官方文檔~!
比如:
topk(5, sum(rate(http_requests_total[$__range])) by (instance))
比如$__range == 1m,統(tǒng)計(jì)instance這個(gè)實(shí)例1m內(nèi)請求速率等top5
- 統(tǒng)計(jì)機(jī)器信息
通過在本地安裝node_exporter這個(gè)go服務(wù),可以收集本地機(jī)器的監(jiān)控信息。具體信息詳情查看官方文檔
配置grafna等小技巧(官方文檔中有):
-
配置變量
在dashboard等setting中配置,下圖配置都prometheus都兩個(gè)變量,application 和 instance,instance根據(jù)application來獲取的,很方便靈活
image.png
使用變量,通過$variable來使用
image.png
最后是使用效果,根據(jù)配置的變量,選擇變量,下面的dashboard會(huì)相應(yīng)的變動(dòng)。
image.png





