Java中如何實現(xiàn)監(jiān)控 掌握Prometheus

要實現(xiàn)Java應(yīng)用監(jiān)控與prometheus集成,關(guān)鍵在于暴露指標并配置抓取。首先,使用micrometer暴露java應(yīng)用指標,通過添加io.micrometer依賴支持prometheus;其次,在spring boot中配置management.endpoints.web.exposure.include=prometheus開啟端點;接著,可自定義指標如counter、gauge等用于監(jiān)控特定行為;然后,配置prometheus的scrape_configs抓取應(yīng)用指標;此外,prometheus能通過jvm_gc相關(guān)指標查詢gc信息,如jvm_gc_pause_seconds_sum;同時,應(yīng)根據(jù)數(shù)據(jù)性質(zhì)選擇指標類型,如counter用于遞增統(tǒng)計,gauge用于瞬時狀態(tài);最后,可通過grafana可視化監(jiān)控數(shù)據(jù),添加prometheus數(shù)據(jù)源并創(chuàng)建dashboard展示圖表,使用promql進行查詢分析,從而實現(xiàn)全面監(jiān)控。

Java中如何實現(xiàn)監(jiān)控 掌握Prometheus

Java應(yīng)用監(jiān)控,說白了就是讓你能隨時知道你的代碼跑得怎么樣,有沒有出問題。Prometheus是個強大的監(jiān)控系統(tǒng),兩者結(jié)合,能讓你對Java應(yīng)用的健康狀況一目了然。

Java中如何實現(xiàn)監(jiān)控 掌握Prometheus

實現(xiàn)Java應(yīng)用監(jiān)控,掌握Prometheus,關(guān)鍵在于暴露應(yīng)用的指標,讓Prometheus可以抓取。

Java中如何實現(xiàn)監(jiān)控 掌握Prometheus

使用Micrometer暴露Java應(yīng)用指標

立即學習Java免費學習筆記(深入)”;

Java中如何實現(xiàn)監(jiān)控 掌握Prometheus

Micrometer是spring boot Actuator默認使用的指標庫,它提供了一套通用的API,可以方便地將應(yīng)用的指標暴露給不同的監(jiān)控系統(tǒng),包括Prometheus。

  1. 添加依賴:

在你的pom.xml或build.gradle文件中添加Micrometer和Prometheus的依賴。

<!-- pom.xml --> <dependency>     <groupId>io.micrometer</groupId>     <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
// build.gradle implementation 'io.micrometer:micrometer-registry-prometheus'
  1. 配置Prometheus端點:

如果使用的是Spring Boot,Actuator會自動暴露Prometheus端點。你只需要在application.properties或application.yml中開啟它。

# application.properties management.endpoints.web.exposure.include=prometheus
# application.yml management:   endpoints:     web:       exposure:         include: prometheus
  1. 自定義指標:

除了Actuator默認提供的指標,你還可以自定義指標來監(jiān)控應(yīng)用的特定行為。

import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import org.springframework.stereotype.Component;  @Component public class MyCustomMetrics {      private final Counter myCounter;      public MyCustomMetrics(MeterRegistry registry) {         myCounter = Counter.builder("my.custom.counter")                 .description("A custom counter metric")                 .register(registry);     }      public void increment() {         myCounter.increment();     } }

在這個例子中,我們創(chuàng)建了一個名為my.custom.counter的計數(shù)器。你可以通過調(diào)用increment()方法來增加它的值。

  1. Prometheus配置:

配置Prometheus來抓取你的Java應(yīng)用暴露的指標。在prometheus.yml文件中添加如下配置:

scrape_configs:   - job_name: 'my-java-app'     metrics_path: '/actuator/prometheus'     scrape_interval: 5s     static_configs:       - targets: ['localhost:8080'] # 替換為你的Java應(yīng)用地址
  1. 驗證:

啟動你的Java應(yīng)用和Prometheus,然后訪問Prometheus的Web UI(通常是http://localhost:9090),輸入my_custom_counter_total查詢,看看是否能看到你自定義的指標。

Prometheus如何查詢Java應(yīng)用的GC信息?

GC(Garbage Collection)信息是監(jiān)控Java應(yīng)用的重要組成部分。Prometheus可以通過Micrometer提供的指標來查詢GC信息。

  1. 確認Actuator已啟用:

確保Spring Boot Actuator已啟用,并且Prometheus端點已暴露(參考上面的配置)。

  1. 查詢GC指標:

Prometheus會自動抓取與GC相關(guān)的指標,例如jvm_gc_memory_promoted_bytes_total(晉升到老年代的內(nèi)存總量)、jvm_gc_pause_seconds_sum(GC暫停時間總和)等。

  1. 使用PromQL查詢:

使用PromQL(Prometheus Query Language)可以查詢和分析GC指標。例如,查詢最近5分鐘的GC暫停時間總和:

sum(rate(jvm_gc_pause_seconds_sum[5m]))

這個查詢會計算過去5分鐘內(nèi),每秒鐘GC暫停時間的平均值,然后將它們加起來。

  1. 創(chuàng)建告警:

可以基于GC指標創(chuàng)建告警規(guī)則,當GC行為異常時,及時通知你。例如,當GC暫停時間超過某個閾值時,觸發(fā)告警。

自定義Prometheus指標時,如何選擇合適的指標類型?

選擇合適的指標類型對于準確監(jiān)控和分析應(yīng)用行為至關(guān)重要。Prometheus提供了幾種基本的指標類型:

  1. Counter:

計數(shù)器,用于表示單調(diào)遞增的數(shù)值,例如請求總數(shù)、錯誤總數(shù)。

  • 適用場景:統(tǒng)計事件發(fā)生的次數(shù)。
  • 示例:Counter.builder(“http.requests.total”).tags(“method”, “GET”, “path”, “/users”).register(registry).increment();
  1. Gauge:

儀表盤,用于表示可以任意變化的數(shù)值,例如當前內(nèi)存使用量、CPU利用率。

  • 適用場景:監(jiān)控瞬時狀態(tài)。
  • 示例:Gauge.builder(“jvm.memory.used”, () -> getMemoryUsed()).register(registry);
  1. Histogram:

直方圖,用于統(tǒng)計數(shù)據(jù)的分布情況,例如請求響應(yīng)時間。

  • 適用場景:統(tǒng)計數(shù)據(jù)的分位數(shù)。
  • 示例:Histogram.builder(“http.request.duration”).register(registry).record(responseTime);
  1. Summary:

摘要,類似于直方圖,但提供預(yù)先計算的分位數(shù)。

  • 適用場景:快速獲取分位數(shù)。
  • 示例:Summary.builder(“http.request.size”).register(registry).record(requestSize);

選擇指標類型時,要根據(jù)你要監(jiān)控的數(shù)據(jù)的性質(zhì)來決定。如果數(shù)據(jù)是單調(diào)遞增的,使用計數(shù)器;如果數(shù)據(jù)是瞬時狀態(tài),使用儀表盤;如果需要統(tǒng)計數(shù)據(jù)的分布情況,使用直方圖或摘要。

如何使用Grafana可視化Prometheus監(jiān)控數(shù)據(jù)?

Grafana是一個流行的開源數(shù)據(jù)可視化工具,它可以與Prometheus集成,將監(jiān)控數(shù)據(jù)以圖表的形式展示出來。

  1. 添加Prometheus數(shù)據(jù)源:

在Grafana中添加Prometheus數(shù)據(jù)源,配置Prometheus的地址。

  1. 創(chuàng)建Dashboard:

創(chuàng)建一個新的Dashboard,添加各種圖表來展示監(jiān)控數(shù)據(jù)。

  1. 使用PromQL查詢:

在圖表中,使用PromQL查詢來獲取Prometheus中的數(shù)據(jù)。例如,展示CPU利用率:

100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
  1. 自定義圖表:

可以自定義圖表的類型、顏色、標題等,使其更易于理解和分析。

  1. 分享Dashboard:

可以將Dashboard分享給團隊成員,方便大家共同監(jiān)控應(yīng)用狀態(tài)。

通過Grafana,你可以將Prometheus中的原始數(shù)據(jù)轉(zhuǎn)化為直觀的圖表,幫助你更好地理解和分析應(yīng)用行為,及時發(fā)現(xiàn)和解決問題。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊11 分享