天天看點

Metrics埋點監控

Metrics埋點監控

在應用程式中,通常會記錄日志以便事後分析,在很多情況下是産生了問題之後,再去檢視日志,是一種事後的靜态分析。在很多時候,我們可能需要了解整個系統在目前,或者某一時刻運作的情況,比如一個系統背景服務,我們可能需要了解一些實時監控的資料例如

1、每秒鐘的請求數是多少(TPS)?

2、平均每個請求處理的時間?

3、請求處理的最長耗時?

4.請求處理的響應的直方圖?

5、請求處理正确響應率?

6、等待處理的請求隊列長度?

7、檢視整個系統的的CPU使用率、記憶體占用、jvm運作情況;以及系統運作出錯率等等一系列的實時資料采集時,最簡單的方法就是在系統的入口、出口和關鍵位置設定埋點,然後将采集到的資訊發送到實時監控平台或者存入到緩存和DB中做進一步的分析和展示。

Metrics提供5種基本的度量類型:

Meters 

是一種隻能自增的計數器,通常用來度量一系列事件發生的機率。它提供了平均速率,以及指數平滑平均速率,以及采樣後的1分鐘,5分鐘,15分鐘的樣例。

Gauges 

Gauge是一個最簡單的計量,一般用來統計瞬時狀态的資料資訊      

RatioGauge

 作用:度量事件成功率的計算。  例:度量緩存命中率、接口調用率等等。

Counters   

    Counter是Gauge的一個特例,維護一個計數器,可以通過inc()和dec()方法對計數器做修改。使用步驟與Gauge基本類似,在MetricRegistry中提供了靜态方法可以直接執行個體化一個Counter。可以用來度量生産者和消費者之間的關系

Histograms 

  主要使用來統計資料的分布情況, 最大值、最小值、平均值、中位數,百分比(75%、90%、95%、98%、99%和99.9%)。

    例如,需要統計某個頁面的請求、接口方法請求的響應時間

Timers

  作用:統計請求的速率和處理時間

  例如:某接口的總在一定時間内的請求總數,平均處理時間

HealthChecks 

  作用:健康檢查,用于對系統應用、子子產品、關聯子產品的運作是否正常做檢測

  實作過程:

    類A:繼承 HealthCheck ,并重寫check()方法 ,在check()中調用類B中的被檢測方法

    類B:定義一個方法,傳回結果是boolean類型。(類B也可以是其它系統中的一個類)

在日志中列印

public static void main(String[] args) throws InterruptedException {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        Slf4jReporter report = Slf4jReporter.forRegistry(registry) //
                .prefixedWith("region_") //
                .withLoggingLevel(Slf4jReporter.LoggingLevel.INFO) //
                .outputTo(LoggerFactory.getLogger(MetricsTest.class)) //
                .scheduleOn(scheduler) //
                .shutdownExecutorOnStop(scheduler != null) //
                .build();
        report.start(5, TimeUnit.SECONDS);
        Random r = new Random();
        while (true) {
            processHandle(r.nextDouble());
            Thread.sleep(100);
        }
    }