prometheus + grafna 監(jiān)控

前提

項(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)行按需配置。

  1. 項(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中。

  1. 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)行,查看文檔如何集群部署。

  1. 編寫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
  1. 啟動(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)容:

  1. Basic
    應(yīng)用啟動(dòng)時(shí)間,運(yùn)行時(shí)長,cpu使用率,內(nèi)存使用率等


    image.png
  2. JVM
    Eden,Survivor,Old,MetaData 等Space,classload數(shù),線程數(shù),gc數(shù),gc停頓時(shí)長等信息


    image.png
  3. Http
    Http請求數(shù),Http響應(yīng)時(shí)長,各個(gè)狀態(tài)碼等請求數(shù),請求速率(QPS)等


    image.png
  4. Log
    各種級(jí)別log等數(shù)量,主要關(guān)注error和warn~

  5. 其他
    根據(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

  1. 統(tǒng)計(jì)機(jī)器信息
    通過在本地安裝node_exporter這個(gè)go服務(wù),可以收集本地機(jī)器的監(jiān)控信息。具體信息詳情查看官方文檔
配置grafna等小技巧(官方文檔中有):
  1. 配置變量
    在dashboard等setting中配置,下圖配置都prometheus都兩個(gè)變量,application 和 instance,instance根據(jù)application來獲取的,很方便靈活


    image.png

    使用變量,通過$variable來使用


    image.png

    最后是使用效果,根據(jù)配置的變量,選擇變量,下面的dashboard會(huì)相應(yīng)的變動(dòng)。
    image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容