要實現(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應(yīng)用監(jiān)控,說白了就是讓你能隨時知道你的代碼跑得怎么樣,有沒有出問題。Prometheus是個強大的監(jiān)控系統(tǒng),兩者結(jié)合,能讓你對Java應(yīng)用的健康狀況一目了然。
實現(xiàn)Java應(yīng)用監(jiān)控,掌握Prometheus,關(guān)鍵在于暴露應(yīng)用的指標,讓Prometheus可以抓取。
使用Micrometer暴露Java應(yīng)用指標
立即學習“Java免費學習筆記(深入)”;
Micrometer是spring boot Actuator默認使用的指標庫,它提供了一套通用的API,可以方便地將應(yīng)用的指標暴露給不同的監(jiān)控系統(tǒng),包括Prometheus。
- 添加依賴:
在你的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'
- 配置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
- 自定義指標:
除了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()方法來增加它的值。
- 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)用地址
- 驗證:
啟動你的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信息。
- 確認Actuator已啟用:
確保Spring Boot Actuator已啟用,并且Prometheus端點已暴露(參考上面的配置)。
- 查詢GC指標:
Prometheus會自動抓取與GC相關(guān)的指標,例如jvm_gc_memory_promoted_bytes_total(晉升到老年代的內(nèi)存總量)、jvm_gc_pause_seconds_sum(GC暫停時間總和)等。
- 使用PromQL查詢:
使用PromQL(Prometheus Query Language)可以查詢和分析GC指標。例如,查詢最近5分鐘的GC暫停時間總和:
sum(rate(jvm_gc_pause_seconds_sum[5m]))
這個查詢會計算過去5分鐘內(nèi),每秒鐘GC暫停時間的平均值,然后將它們加起來。
- 創(chuàng)建告警:
可以基于GC指標創(chuàng)建告警規(guī)則,當GC行為異常時,及時通知你。例如,當GC暫停時間超過某個閾值時,觸發(fā)告警。
自定義Prometheus指標時,如何選擇合適的指標類型?
選擇合適的指標類型對于準確監(jiān)控和分析應(yīng)用行為至關(guān)重要。Prometheus提供了幾種基本的指標類型:
- Counter:
計數(shù)器,用于表示單調(diào)遞增的數(shù)值,例如請求總數(shù)、錯誤總數(shù)。
- 適用場景:統(tǒng)計事件發(fā)生的次數(shù)。
- 示例:Counter.builder(“http.requests.total”).tags(“method”, “GET”, “path”, “/users”).register(registry).increment();
- Gauge:
儀表盤,用于表示可以任意變化的數(shù)值,例如當前內(nèi)存使用量、CPU利用率。
- 適用場景:監(jiān)控瞬時狀態(tài)。
- 示例:Gauge.builder(“jvm.memory.used”, () -> getMemoryUsed()).register(registry);
- Histogram:
直方圖,用于統(tǒng)計數(shù)據(jù)的分布情況,例如請求響應(yīng)時間。
- 適用場景:統(tǒng)計數(shù)據(jù)的分位數(shù)。
- 示例:Histogram.builder(“http.request.duration”).register(registry).record(responseTime);
- 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ù)以圖表的形式展示出來。
- 添加Prometheus數(shù)據(jù)源:
在Grafana中添加Prometheus數(shù)據(jù)源,配置Prometheus的地址。
- 創(chuàng)建Dashboard:
創(chuàng)建一個新的Dashboard,添加各種圖表來展示監(jiān)控數(shù)據(jù)。
- 使用PromQL查詢:
在圖表中,使用PromQL查詢來獲取Prometheus中的數(shù)據(jù)。例如,展示CPU利用率:
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
- 自定義圖表:
可以自定義圖表的類型、顏色、標題等,使其更易于理解和分析。
- 分享Dashboard:
可以將Dashboard分享給團隊成員,方便大家共同監(jiān)控應(yīng)用狀態(tài)。
通過Grafana,你可以將Prometheus中的原始數(shù)據(jù)轉(zhuǎn)化為直觀的圖表,幫助你更好地理解和分析應(yīng)用行為,及時發(fā)現(xiàn)和解決問題。