前提
項目重要技術(shù)棧主要是Spring cloud 2.x + docker
現(xiàn)狀
項目中使用到Spring boot admin 迎变,zipkin范咨,以及http上報等形式收集數(shù)據(jù)氛谜,mysql持久化必要數(shù)據(jù)君账,在superset上連接數(shù)據(jù)源,以圖表的形式展示數(shù)據(jù)
改進(jìn)目標(biāo)
目前有多個緯度瞎饲,不同的監(jiān)控平臺口叙,需要登陸多個地址去查看不同的數(shù)據(jù),稍顯繁瑣企软,并且數(shù)據(jù)統(tǒng)計形式比較亂庐扫,查看也不方便,希望有一個統(tǒng)一的監(jiān)控平臺
選型
最后選擇Prometheus和Grafna
監(jiān)控產(chǎn)品有很多仗哨,比如Prometheus形庭,Graphite,InfluxDB厌漂,OpenTSDB等有很多時間序列數(shù)據(jù)庫萨醒。有興趣可以去官網(wǎng)看下Prometheus和其他產(chǎn)品的對比。
快速搭建過程
這個僅僅是一個快速上手的描述苇倡,如果有需要請按照官方文檔說下進(jìn)行按需配置富纸。
- 項目中改動:
引入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:這個改動是因為Spring boot 2.x 默認(rèn)只暴露info和health接口囤踩,需要暴露出其他接口。(*是圖測試省事晓褪,如果服務(wù)暴露公網(wǎng)的情況堵漱,自己酌情暴露需要的服務(wù),一般情況下是不需要暴露公網(wǎng)的)
這兩步過后涣仿,啟動服務(wù)勤庐,就會采集一些監(jiān)控信息,并且通過http://localhost:8080/actuator/prometheus進(jìn)行暴露出來好港,可以看到metric數(shù)據(jù)愉镰。原理就是prometheus定時去掃描配置文件中配置的targets,獲取metric然后存入prometheus中钧汹。
- docker啟動prometheus+grafna
編寫prometheus.xml的簡單配置文件丈探,配置項有很多,詳情參考官方文檔:
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:注意事項
在docker環(huán)境下拔莱,promethus 配置job掃描機(jī)器和 grafna配置數(shù)據(jù)源都需要使用真實IP碗降。上面targets是寫死的機(jī)器IP和端口,這個為了靈活性最好配置成類似consul注冊中心的形式塘秦,prometheus支持主流的配置中心遗锣,請移步文檔查看。還有生產(chǎn)中請不要單機(jī)運行嗤形,查看文檔如何集群部署。
- 編寫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
- 啟動docker容器
docker-compose up -d
啟動完成后校驗一下:
prometheus訪問:http://localhost:9090
grafna 訪問:http://localhost:3000
grafna配置監(jiān)控項
主要配置監(jiān)控內(nèi)容:
-
Basic
應(yīng)用啟動時間弧圆,運行時長赋兵,cpu使用率,內(nèi)存使用率等
image.png -
JVM
Eden搔预,Survivor霹期,Old,MetaData 等Space拯田,classload數(shù)历造,線程數(shù),gc數(shù)船庇,gc停頓時長等信息
image.png -
Http
Http請求數(shù)吭产,Http響應(yīng)時長,各個狀態(tài)碼等請求數(shù)鸭轮,請求速率(QPS)等
image.png Log
各種級別log等數(shù)量臣淤,主要關(guān)注error和warn~其他
根據(jù)actuator/prometheus接口的收集的內(nèi)容,結(jié)合prometheus提供的各種函數(shù)窃爷,可以根據(jù)需求顯示自己想要的監(jiān)控信息邑蒋。
ps: 重點P辗洹!医吊!理清自己的需求钱慢,需要監(jiān)控那些信息,熟悉prometheus的各種使用方式和函數(shù)卿堂。官方文檔~束莫!
比如:
topk(5, sum(rate(http_requests_total[$__range])) by (instance))
比如$__range == 1m,統(tǒng)計instance這個實例1m內(nèi)請求速率等top5
- 統(tǒng)計機(jī)器信息
通過在本地安裝node_exporter這個go服務(wù),可以收集本地機(jī)器的監(jiān)控信息御吞。具體信息詳情查看官方文檔
配置grafna等小技巧(官方文檔中有):
-
配置變量
在dashboard等setting中配置麦箍,下圖配置都prometheus都兩個變量,application 和 instance陶珠,instance根據(jù)application來獲取的挟裂,很方便靈活
image.png
使用變量,通過$variable來使用
image.png
最后是使用效果揍诽,根據(jù)配置的變量诀蓉,選擇變量,下面的dashboard會相應(yīng)的變動暑脆。
image.png