docker 搭建prometheus監(jiān)控

組件介紹

prometheus

Prometheus是一個開源的服務(wù)監(jiān)控系統(tǒng),它通過HTTP協(xié)議從遠程的機器收集數(shù)據(jù)并存儲在本地的時序數(shù)據(jù)庫上耀石。

多維數(shù)據(jù)模型(時序列數(shù)據(jù)由metric名和一組key/value組成)
在多維度上靈活的查詢語言(PromQl)
不依賴分布式存儲瓮栗,單主節(jié)點工作.
通過基于HTTP的pull方式采集時序數(shù)據(jù)
可以通過push gateway進行時序列數(shù)據(jù)推送(pushing)
可以通過服務(wù)發(fā)現(xiàn)或者靜態(tài)配置去獲取要采集的目標(biāo)服務(wù)器
多種可視化圖表及儀表盤支持
Prometheus通過安裝在遠程機器上的exporter來收集監(jiān)控數(shù)據(jù)寥掐,后面我們將使用到node_exporter收集系統(tǒng)數(shù)據(jù)最岗。

grafana

Grafana 是一個開箱即用的可視化工具蛔六,具有功能齊全的度量儀表盤和圖形編輯器荆永,有靈活豐富的圖形化選項,可以混合多種風(fēng)格国章,支持多個數(shù)據(jù)源特點具钥。

exporter

Exporter 組件是一類組件,它們的主要作用就是提供 metrics 信息以供加工提煉液兽。

有的組件會自行提供 metrics 信息骂删,比如 Grafana掌动、Prometheus、Etcd 等等宁玫,在本文的 3.1

3.1 中給出的 metrics 就是 Grafana 本身產(chǎn)生的粗恢。

有的組件不會提供 metrics 信息,比如說我們自己寫的一些程序欧瘪。

而有的甚至不是組件眷射,比如 Linux 系統(tǒng)本身    

監(jiān)控springboot2.0的服務(wù) 和 node-exporter

服務(wù)依賴

    <!--       autuator 服務(wù)端點監(jiān)控    只需加依賴 默認(rèn)開4個端點 1 yml配置開啟更多端點 2手動up/down  支持手動下機 hystrix,dashboard,admin   -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!--        開啟prometheus監(jiān)控-->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
    </dependency>

服務(wù)yml

    management:
      endpoints:
        web:
          exposure:
            include: "*" #inlude包含哪些端點   exclude 去除哪些端點
      endpoint:
        shutdown:
          enabled: true #開啟遠程shutdown端口
        health:
          show-details: always
        prometheus:
          enabled: true
      metrics:     #開啟prometheus 監(jiān)控
        export:
          prometheus:
            enabled: true
            step: 1m
            descriptions: true
        web:
          server:
            request:
              autotime:
                enabled: true
                #設(shè)置為true來收集所有Spring MVC度量》鹨矗或者妖碉,當(dāng)它設(shè)置為false時,您可以通過用@timed對其進行注釋來為特定的REST控制器啟用度量芥被。
                #可以在控制器內(nèi)注釋單個方法欧宜,以僅為特定端點生成度量

服務(wù)配置

     @Bean
        MeterRegistryCustomizer meterRegistryCustomizer(MeterRegistry meterRegistry) {
            return meterRegistry1 -> meterRegistry.config()
                    .commonTags("application", "service1");
        }

啟動服務(wù) 訪問 localhost:8096/actuator/prometheus 可以看到一些metrix信息

配置 prometheus

  global:
    scrape_interval:     15s # 默認(rèn)抓取間隔, 15秒向目標(biāo)抓取一次數(shù)據(jù)。
    external_labels:
      monitor: 'codelab-monitor'
  # 這里表示抓取對象的配置
  scrape_configs:
    - job_name: 'prometheus'
      #這個配置是表示在這個配置內(nèi)的時間序例拴魄,每一條都會自動添加上這個{job_name:"prometheus"}的標(biāo)簽  - job_name: 'prometheus'
      scrape_interval: 5s # 重寫了全局抓取間隔時間冗茸,由15秒重寫成5秒
      static_configs:
        - targets: ['localhost:9090']
  
    - job_name: 'node'
      static_configs:
        - targets: ['172.17.0.9:9100']
          labels:
            instance: "node"
  
    - job_name: 'service1'
      metrics_path: /actuator/prometheus
      static_configs:
        - targets: ['192.168.10.134:8096']
          labels:
            instance: "service"

啟動 node-exporter

 docker pull prom/node-exporter 
 docker pull prom/node-exporter 

啟動 prometheus

docker pull prom/prometheus

docker run -idt -p 9090:9090 -v /home/spf/docker/promethues/server/prometheus.yml:/etc/prometheus/prometheus.yml -v /home/spf/docker/promethues/server/rules.yml:/etc/prometheus/rules.yml --name prometheus  prom/prometheus  --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle


#--web.enable-lifecycle允許遠程修改配置

這里注意 ip的設(shè)置 因為prometheus是在docker內(nèi)部啟動的所以 localhost訪問的是docker 容器內(nèi)部不能訪問到外部的服務(wù)
可以使用 docker exec -u root -it prometheus /bin/sh ping進去試一下

啟動grafana

#下載鏡像
docker pull grafana/grafana
#運行
docker run -d --name=grafana -p 3000:3000 grafana/grafana

訪問 localhost:3000 默認(rèn)賬號密碼為 admin/admin

home第二項添加datasource 選擇promeetheus 添加ip:port

可以查看dashboard了

dashboard

補充:

    Counter

Counter(計數(shù)器)簡單理解就是一種只增不減的計數(shù)器。它通常用于記錄服務(wù)的請求數(shù)量羹铅、完成的任務(wù)數(shù)量蚀狰、錯誤的發(fā)生數(shù)量等等。

    @Service("collectorService")
    public class CollectorService {
       
        static final Counter userCounter = Metrics.
                counter("user.counter.total", "services", "demo");
        
        public void processCollectResult() throws InterruptedException {
     
            while (true){
                
                 userCounter.increment(1D);
     
            }
     
        }
    }

 

    Gauge

Gauge(儀表)是一個表示單個數(shù)值的度量职员,它可以表示任意地上下移動的數(shù)值測量麻蹋。Gauge通常用于變動的測量值,如當(dāng)前的內(nèi)存使用情況焊切,同時也可以測量上下移動的"計數(shù)"扮授,比如隊列中的消息數(shù)量

    @Component("passCaseMetric")
    public class PassCaseMetric {
     
        List<Tag> init(){
            ArrayList<Tag> list = new ArrayList(){};
            list.add(new ImmutableTag("service", "demo"));
            return list;
        }
     
        AtomicInteger atomicInteger = new AtomicInteger(0);
     
        Gauge passCaseGuage = Gauge.builder("pass.cases.guage", atomicInteger, AtomicInteger::get)
                .tag("service", "demo")
                .description("pass cases guage of demo")
                .register(new SimpleMeterRegistry());
     
     
        AtomicInteger passCases =  Metrics.gauge("pass.cases.guage.value", init(), atomicInteger);
     
        public void handleMetrics() {
     
            while (true){
                if (System.currentTimeMillis() % 2 == 0){
                    passCases.addAndGet(100);
                    System.out.println("ADD + " + passCaseGuage.measure() + " : " + passCases);
                }else {
                    int val = passCases.addAndGet(-100);
                    if (val < 0){
                        passCases.set(1);
                    }
                    System.out.println("DECR - " + passCaseGuage.measure() + " : " + passCases);
                }
            }
     
        }
     
    }

啟動springboot應(yīng)用,可以在http://host:port/actuator/prometheus 看到端點收集到的數(shù)據(jù)专肪。其他的也是類似的不再一一截圖展示刹勃。

這里使用了一個true的循環(huán)用來展示不斷更新的效果。

同樣的可以在grafana中看到監(jiān)控展示信息

    Timer

Timer(計時器)同時測量一個特定的代碼邏輯塊的調(diào)用(執(zhí)行)速度和它的時間分布嚎尤。簡單來說荔仁,就是在調(diào)用結(jié)束的時間點記錄整個調(diào)用塊執(zhí)行的總時間,適用于測量短時間執(zhí)行的事件的耗時分布芽死,例如消息隊列消息的消費速率乏梁。

        @Test
        public void testTimerSample(){
            Timer timer = Timer.builder("timer")
                    .tag("timer", "timersample")
                    .description("timer sample test.")
                    .register(new SimpleMeterRegistry());
     
            for(int i=0; i<2; i++) {
                timer.record(() -> {
                    try {
                        TimeUnit.SECONDS.sleep(2);
                    }catch (InterruptedException e){
     
                    }
     
                });
            }
     
            System.out.println(timer.count());
            System.out.println(timer.measure());
            System.out.println(timer.totalTime(TimeUnit.SECONDS));
            System.out.println(timer.mean(TimeUnit.SECONDS));
            System.out.println(timer.max(TimeUnit.SECONDS));
        }

響應(yīng)數(shù)據(jù)

    2
    [Measurement{statistic='COUNT', value=2.0}, Measurement{statistic='TOTAL_TIME', value=4.005095763}, Measurement{statistic='MAX', value=2.004500494}]
    4.005095763
    2.0025478815
    2.004500494

 

    Summary

Summary(摘要)用于跟蹤事件的分布。它類似于一個計時器关贵,但更一般的情況是遇骑,它的大小并不一定是一段時間的測量值。在micrometer中揖曾,對應(yīng)的類是DistributionSummary落萎,它的用法有點像Timer亥啦,但是記錄的值是需要直接指定,而不是通過測量一個任務(wù)的執(zhí)行時間练链。

        @Test
        public void testSummary(){
     
            DistributionSummary summary = DistributionSummary.builder("summary")
                    .tag("summary", "summarySample")
                    .description("summary sample test")
                    .register(new SimpleMeterRegistry());
     
            summary.record(2D);
            summary.record(3D);
            summary.record(4D);
     
            System.out.println(summary.count());
            System.out.println(summary.measure());
            System.out.println(summary.max());
            System.out.println(summary.mean());
            System.out.println(summary.totalAmount());
        }

響應(yīng)數(shù)據(jù):

    3
    [Measurement{statistic='COUNT', value=3.0}, Measurement{statistic='TOTAL', value=9.0}, Measurement{statistic='MAX', value=4.0}]
    4.0
    3.0
    9.0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翔脱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子兑宇,更是在濱河造成了極大的恐慌碍侦,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隶糕,死亡現(xiàn)場離奇詭異瓷产,居然都是意外死亡,警方通過查閱死者的電腦和手機枚驻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門濒旦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人再登,你說我怎么就攤上這事尔邓。” “怎么了锉矢?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵梯嗽,是天一觀的道長。 經(jīng)常有香客問我沽损,道長灯节,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任绵估,我火速辦了婚禮炎疆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘国裳。我一直安慰自己形入,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布缝左。 她就那樣靜靜地躺著亿遂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渺杉。 梳的紋絲不亂的頭發(fā)上蛇数,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音少办,去河邊找鬼苞慢。 笑死诵原,一個胖子當(dāng)著我的面吹牛英妓,可吹牛的內(nèi)容都是我干的挽放。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蔓纠,長吁一口氣:“原來是場噩夢啊……” “哼辑畦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腿倚,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤纯出,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后敷燎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暂筝,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年硬贯,在試婚紗的時候發(fā)現(xiàn)自己被綠了焕襟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡饭豹,死狀恐怖鸵赖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拄衰,我是刑警寧澤它褪,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站翘悉,受9級特大地震影響茫打,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镐确,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一包吝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧源葫,春花似錦诗越、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荣堰,卻和暖如春床未,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背振坚。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工薇搁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渡八。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓啃洋,卻偏偏與公主長得像传货,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宏娄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容