天天看點

Prometheus + Grafana:一套 SpringBoot 應用的可視化監控方案!

作者:程式猿阿嘴

來源:tillend.blog.csdn.net/article/details/86768376

此系列文章将會描述Java架構Spring Boot、服務治理架構Dubbo、應用容器引擎Docker,及使用Spring Boot內建Dubbo、Mybatis等開源架構,其中穿插着Spring Boot中日志切面等技術的實作,然後通過gitlab-CI以持續內建為Docker鏡像。

本文為Spring Boot 通過監控門面 micrometer 內建 Prometheus,再使用Grafana進行資料的實時展示

本系列文章中所使用的架構版本為Spring Boot 2.0.3-RELEASE,Spring 5.0.7-RELEASE,Dubbo 2.6.2。

監控門面,概念同日志門面slf4j,均為基于外觀設計模式所實作的規範,支援衆多監控系統的應用程式Metrics外觀

Micrometer

SpringBoot 2.x上已引入第三方實作的metrics Facade,預設與Micrometer內建,而Micrometer具有Prometheus的MeterRegistry規範的實作。

Prometheus拉取及處理SpringBoot應用中的監控資料,最後通過Grafana提供的UI界面進行資料的實時展示。

更多關于Micrometer功能的資訊,請參閱其參考文檔,特别是概念部分:

  • https://micrometer.io/docs

metrics tag/label

關于metrics是否支援tag/label,則代表其metrics是否能夠有多元度的支援。像statsd不支援tag,如果要區分多host的同一個jvm名額,則通常是通過添加prefix來解決,不過這個給查詢統計以及後續擴充帶了諸多的不便。

支援tag的好處就是可以進行多元度的統計和查詢,以同一微服務但是不同執行個體的jvm名額來說,可以通過tag來添加host辨別,這樣監控系統就可以靈活根據tag查詢過濾來檢視不同主機粒度的,甚至是不同資料中心的粒度。

埋點

Maven依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>${springboot.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
    <version>${springboot.version}</version>
</dependency>

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.1.2</version>
</dependency>
           

application配置

management.metrics.export.prometheus.enabled=true
management.metrics.export.prometheus.step=1m
management.metrics.export.prometheus.descriptions=true
management.web.server.auto-time-requests=true
management.endpoints.web.exposure.include=health,info,env,prometheus,metrics,httptrace,threaddump,heapdump
           

web埋點

servlet容器undertow

@SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ComponentScan("com.test")
public class Starter {

    public static void main(String[] args) {

        new SpringApplicationBuilder(Starter.class)
                .web(WebApplicationType.SERVLET).run(args);

    }
}
           

Prometheus

Prometheus是一個開源的監控系統,起源于SoundCloud。它由以下幾個核心元件構成:

  • 資料爬蟲: 根據配置的時間定期的通過HTTP抓去metrics資料。
  • time-series 資料庫: 存儲所有的metrics資料。
  • 簡單的使用者互動接口: 可視化、查詢和監控所有的metrics。
Prometheus + Grafana:一套 SpringBoot 應用的可視化監控方案!

Docker安裝

docker run -d \
--name prometheus \
--net dubbo \
--hostname prom \
-p 9090:9090 \
-v /media/raid10/tmp/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus \
--config.file=/etc/prometheus/prometheus.yml
           

增加promtheus拉取資料的項目,需在挂載的配置檔案prometheus.yml中增加對應的Endpoint設定并重新開機服務

Prometheus + Grafana:一套 SpringBoot 應用的可視化監控方案!

Grafana

Grafana使你能夠把來自不同資料源比如Elasticsearch, Prometheus, Graphite, influxDB等多樣的資料以絢麗的圖示展示出來。它也能基于你的metrics資料發出告警。當一個告警狀态改變時,它能通知你通過email,slack或者其他途徑。

Docker安裝

docker run -d \
--name grafana \
--net dubbo \
-p 3000:3000 \
-e "GF_SERVER_ROOT_URL=http://grafana.server.name" \
-e "GF_SECURITY_ADMIN_PASSWORD=secret" \
grafana/grafana
           

效果:

Prometheus + Grafana:一套 SpringBoot 應用的可視化監控方案!