1. 程式人生 > >prometheus+grafana+springboot2監控整合配置

prometheus+grafana+springboot2監控整合配置

前言

本文基於設計開發一個應用功能監控專案的需求,其能在不入侵系統的情況下正常監控應用功能。調研之後選擇了prometheus+grafana+springboot2的方案。本文基於此簡單講述一下這幾個系統之間的配置、互動和使用。並從prometheus的功能,配置,使用,以及與dashboard和springboot/springcloud的整合等方面簡單分析,對於各單獨系統的安裝不在本文講述範圍之內。

一、prometheus

1.簡介

Prometheus,是一個開源的系統監控和告警的工具包,其採用Pull方式採集時間序列的度量資料(也支援push方式),通過Http協議傳輸。它的工作方式是被監控的服務需要公開一個

Prometheus端點,這端點是一個HTTP介面,該介面公開了度量的列表和當前的值,然後Prometheus應用從此介面定時拉取資料,一般可以存放在時序資料庫中,然後通過視覺化的Dashboard(e.g.Grafana)進行資料展示。

2.支援的prometheus metrics

Counter,Gauge,Histogram,Summary,不進行細節介紹了,後面會專門寫prometheus的文章。需要注意的是counter只能增不能減,適用於服務請求量,使用者訪問數等統計,但是如果需要統計有增有減的指標需要用Gauge。

3.支援的exporter很多,可以方便的監控很多應用,同時也可以自定義開發非官方提供的exporter。

二、grafana

1.簡介

grafana,是一個開源的dashboard展示工具,可以支援很多主流資料來源,包括時序性的和非時序性的。其提供的展示配置以及可擴充套件效能滿足絕大部分時間序列資料展示需求,是一個比較優秀的工具。

2.支援的資料來源

prometheus,inflexdb,elasticsearch,mysql,postgreSQL,openTSDB等,更多資料來源

三、springboot2與prometheus的整合

1.springboot整合配置

springboot2.x與prometheus的整合與springboot1.x區別比較大。prometheus官方提供的Java client不能支援2.x的處理。很多其中呼叫的class都找不到了。所以在2.x中 simpleclient_spring_boot就不起作用了,啟動會報錯。幸好開源工具包io.micrometer提供了2.x中對prometheus採集端點的支援。所以在依賴中新增以下配置(使用gradle作為編譯工具):

compile group: 'io.micrometer', name: 'micrometer-registry-prometheus', version: '1.0.6'

另外springboot2.x中提供了actuator作為採集exporter,為prometheus暴露採集端點,只需要在專案依賴中新增以下配置即可:

compile('org.springframework.boot:spring-boot-starter-actuator')

完成之後就可以在springboot專案中自定義採集樣本和方式了。

同時在配置檔案application.yaml中要增加如下配置

management:
    security:
# 僅限於 開發環境可對security進行關閉。
        enabled: false
    metrics:
        export:
            prometheus:
                enabled: true
                step: 1m
                descriptions: true
    web:
        server:
            auto-time-requests: true
    endpoints:
        prometheus:
            id: springmetrics
        web:
            exposure:
                include:         health,info,env,prometheus,metrics,httptrace,threaddump,heapdump,springmetrics

配置完成之後即可在啟動應用之後通過host:port/actuator/prometheus 訪問採集資訊

之後在prometheus的配置檔案prometheus.yml中新增scrape_configs:

- job_name: 'demo'
    metrics_path: /actuator/prometheus
    static_configs:
    - targets: ['localhost:9009']

即可與prometheus建立聯絡。之後就可以在grafana中配置prometheus的資料來源進行監控展示。

2.整合框架

micrometer提供了基於Java的monitor facade,其與springboot應用和prometheus的整合方式如下圖展示

上圖中展示的很清楚,應用通過micrometer採集和暴露監控端點給prometheus,prometheus通過pull模式來採集監控時序資料資訊。之後作為資料來源提供給grafana進行展示。

3.micrometer支援的度量方式及在springboot中的應用示例

  • Counter

Counter(計數器)簡單理解就是一種只增不減的計數器。它通常用於記錄服務的請求數量、完成的任務數量、錯誤的發生數量等等。

@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(儀表)是一個表示單個數值的度量,它可以表示任意地上下移動的數值測量。Gauge通常用於變動的測量值,如當前的記憶體使用情況,同時也可以測量上下移動的"計數",比如佇列中的訊息數量

@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);
            }
        }

    }

}

這裡使用了一個true的迴圈用來展示不斷更新的效果。

同樣的可以在grafana中看到監控展示資訊

  • Timer

Timer(計時器)同時測量一個特定的程式碼邏輯塊的呼叫(執行)速度和它的時間分佈。簡單來說,就是在呼叫結束的時間點記錄整個呼叫塊執行的總時間,適用於測量短時間執行的事件的耗時分佈,例如訊息佇列訊息的消費速率。

    @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));
    }

響應資料

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中,對應的類是DistributionSummary,它的用法有點像Timer,但是記錄的值是需要直接指定,而不是通過測量一個任務的執行時間。

    @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());
    }

響應資料:

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

後記

本文從prometheus、grafana與springboot2.x的整合,配置和應用開發使用方面進行了介紹。對於細節方面以及使用中遇到的一些問題,我會再開文章繼續補充。文中部分內容有參考其他博文以及官方文件,如有不妥請及時指出。共同學習。

refer links:

相關推薦

prometheus+grafana+springboot2監控整合配置

前言 本文基於設計開發一個應用功能監控專案的需求,其能在不入侵系統的情況下正常監控應用功能。調研之後選擇了prometheus+grafana+springboot2的方案。本文基於此簡單講述一下這幾個系統之間的配置、互動和使用。並從prometheus的功能,配置,使用,

基於Prometheus&Grafana監控方案[2]-安裝配置

架構 這裡我們用第三方的exporter採集機器資料,prometheus直接從exporter的例項pull資料,然後用grafana展現和告警。 grafana可以選擇多個數據來源,所以機器較多時,我們可以配置多個prometheus彙集資料,再統一

springboot2+exporter+prometheus+grafana搭建監控體系

com 執行 下載 reat RoCE image art ons ica 項目中需要監控系統指標(JVM,CPU,IO,MySQL等),這時候可以使用Prometheus來做。如果是需要監控日誌系統,可以使用ELK stack。監控=日誌(ELK)+指標(Promethe

基於prometheus+grafana 搭建監控mysql redis mongodb等

基於prometheus+grafana 搭建監控mysql redis mongodb等先把題目定好,具體待這幾天整理我的筆記補充進來。官方網站https://prometheus.io/ 參考文檔:http://www.cnblogs.com/sfnz/p/6566951.htmlhttp://www.j

prometheus+grafana+docker 監控tomcat jvm

prometheus mesos docker tomcat jvm 說明:基於環境mesos+marathon+docker+prometheus+grafana監控tomcat一、配置環境(1)dockerfile from tomcat COPY tomcat-users.xml /

Prometheus+Grafana部署監控docker服務

int mar alt src x86_64 follow emd contain nod 1.環境192.168.244.128 Prometheus 監控服務器192.168.244.129 docker 服務(被監控端)註:都是centos7.5系統 2.下載安

prometheus + grafana 實時監控 Windows效能

Prometheus 實時監控 Windows效能 Prometheus 簡介 Prometheus 具有以下特點 Prometheus 元件 Prometheus功能特性 在業務層用作埋點系統 在應用層

Spring Boot Actuator詳解與深入應用(三):Prometheus+Grafana應用監控

《Spring Boot Actuator詳解與深入應用》預計包括三篇,第一篇重點講Spring Boot Actuator 1.x的應用與定製端點;第二篇將會對比Spring Boot Actuator 2.x 與1.x的區別,以及應用和定製2.x的端點;第三篇將會介紹Actuator metric指

Python3.5+SQL+Prometheus+Grafana報表/監控 pymysql 單獨獲取表的欄位名稱 pymysql返回資料為字典形式(key:value--列:值)

參考資料: pymysql 單獨獲取表的欄位名稱 pymysql返回資料為字典形式(key:value--列:值)   #coding=utf-8 import sys import pymysql import os from prometheus_cl

Prometheus+Grafana搭建監控系統(一)

基本概念Prometheus時間序列化資料庫,我的理解就是將資料打上標籤,以時間維度儲存。後面有機會在深入研究。GrafanaPrometheus中儲存的資料,通過Grafana很優美的展現出來。 好就講這麼多,多了我也不懂。。軟體安裝Prometheus官網下載(https://prometheus.io/

原創:Prometheus+Grafana搭建監控系統

1. prometheus安裝 Prometheus 主程式,主要是負責儲存、抓取、聚合、查詢方面 解壓執行命令:tar zxf prometheus-2.3.2.linux-amd64.tar.gz 編輯解壓目錄下的prometheus.yml,執行命令:vi

.NetCore下使用Prometheus實現系統監控和警報 (三)整合Grafana

有了前面InfluxDB的經驗,這裡就很好處理了,資料型別選擇Prometheus選地址等,填好儲存 同樣通過匯入資料處理,我們在https://grafana.com/dashboards上選擇Dashboards,可以拷貝Josn也可以輸入ID      

使用prometheus+grafana監控springboot2專案jvm情況

軟體需求: jdk8+ grafana下載地址:https://grafana.com/grafana/download p

Prometheus+Grafana監控部署實踐

tle tom timeout 自帶 ora mct image none rest 參考文檔: Prometheus github:https://github.com/prometheus grafana github:https://github.com/grafa

初試 Prometheus + Grafana 監控系統搭建並監控 Mysql

目錄 文章目錄 1、Prometheus & Grafana 介紹 1.1、Prometheus 介紹 1.2、Grafana 介紹 2、環境、軟體準備 3、Prometheus 安裝配置

.NetCore下使用Prometheus實現系統監控和警報 (六)進階Grafana集成自定義收集指標

之前 技術 bsp (六) com ota 選擇 netcore 面板 Prometheus中包含了很多收集指標,那麽我們怎來在Grafana中來使用呢? 接下來我們還是以之前自定義的來演示如圖:我們在Prometheus中已經可以看到這個之前我們自定義的類型了 關

Prometheus+Grafana打造Mysql監控平臺

下載Prometheus放到監控端(或被監控端)。 配置檔案prometheus.yml ```yml scrape_configs: job_name: prometheus static_configs: - targets: ['localhost:9090'] labels: instance:

prometheus+grafana 監控生產環境機器的系統資訊、redis、mongodb以及jvm

介紹:       為了更好的對生產環境的一些中介軟體和作業系統的執行情況進行視覺化的展示,近期瞭解了下prometheus加上grafana來實現這種效果,由於prometheus是新出來的開源專案,所以,監控的外掛還不是很多,但是對基本的一些需求能夠滿足。     Prometheus 是源於 Googl

Spring boot2.0以上整合Druid連線池及監控資訊配置

1. Springboot 2.0選擇HikariCP作為預設資料庫連線池 理由參考: 2. 資料庫連線池效能比對(hikari druid c3p0 dbcp jdbc) 本文是整合Druid連線池,資料庫為mysql pom檔案新增druid的依

基於Docker+Prometheus+Grafana監控SpringBoot健康資訊

在微服務體系當中,監控是必不可少的。當系統環境超過指定的閥值以後,需要提醒指定的運維人員或開發人員進行有效的防範,從而降低系統宕機的風險。在CNCF雲端計算平臺中,Prometheus+Grafana是比較通用的解決方案,在SpringBoot2.0以後metrics預設與micrometer整合,而micr