Springboot添加支持Prometheus

前言


雲原生時代Golang語言開始火熱起來,Docker、Kubernetes、Istio、Knative、Prometheus、Influx等等雲原生領域的前沿軟件都是用GO語言來實現的,其中監控領域的佼佼者莫過於Prometheus,更是被OpenMetrics以推進Prometheus metrics格式作爲標準發展,而Java作爲最常用輪子也最全的語言自然也會緊跟着步伐,本文來看看SpringBoot如何支持Prometheus生態。

Micrometer


在正式開始之前先來了解一下Micrometer,SpringBoot也是依靠Micrometer和Prometheus來集成,但不僅僅是Prometheus,InfluxDB、Elasticsearch、StatsD、Datadog、Graphite等等中間件都可以依靠Micrometer來對接.

這就像Java日誌領域當中的SLF4J,你只需要引入SLF4J和對應實現的依賴,程序就可以使用SLF4J的對象去打印日誌,而不需要沒替換一個新的日誌系統,你的程序的LOG對象就需要全部替換爲新的對象.

Micrometer也是如此,在文章微服務監控:SpringBoot-Micrometer-Influx[1]當中已經有例子來演示SpringBoot依靠Micrometer將metrics數據發送到InfluxDB,本文只不過再演示一次Micrometer對接Prometheus而已.SpringBoot2在actuator中引入了Micrometer,可以說內置了prometheus支持也不爲過.

暴露prometheus metrics路徑


讓SpringBoot程序支持Prometheus抓取需要做的就是啓用/actuator/prometheus路徑,提供給prometheus抓取metrics.

引入相關依賴


只需要在pom文件中引入兩個相關依賴就可以了:

        <dependency>            <groupId>io.micrometer</groupId>            <artifactId>micrometer-registry-prometheus</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-actuator</artifactId>        </dependency>

啓用/actuator/prometheus


只需要在springboot的yml配置文件添加以下內容即可:

management:  metrics:    tags:      application: ${spring.application.name}      port: ${server.port}      ip: ${spring.cloud.client.ip-address}  endpoints:    web:      base-path: /actuator  #默認 /actuator      exposure:        include: '*'

其中主要的部分是management.endpoints.web.exposure.include,意思是actuator下的路徑開放哪一些路徑,上述的配置是開放所有路徑,項目啓動後可以在瀏覽器訪問http://{IP}:{PORT}/actuator看看都有哪一些路徑.

也可以選擇性的開放部分路徑,例如僅開放/actuator/prometheus/actuator/health路徑,那麼配置文件應該是下面的樣子:

management:  metrics:    tags:      application: ${spring.application.name}      port: ${server.port}      ip: ${spring.cloud.client.ip-address}  endpoints:    web:      base-path: /actuator  #默認 /actuator      exposure:        include: 'prometheus,health'        # exclude: '' #排除哪些路徑

同樣的,也可以選擇性的只關閉某一個路徑,如上述exclude展示,使用exclude來排除某些路徑.

在配置好prometheus路徑開放只有可以訪問http://{IP}:{PORT}/actuator/prometheus來看看prometheus能夠抓取到的metrics.

其中上述配置management.metrics.tags....的作用是可以在配置文件直接添加tag,例如我們再給所有metrics添加一個author的tag,配置如下:

management:  metrics:    tags:      application: ${spring.application.name}      port: ${server.port}      ip: ${spring.cloud.client.ip-address}      author: liangyuanpeng  endpoints:    web:      base-path: /actuator  #默認 /actuator      exposure:        include: 'prometheus,health'        # exclude: '' #排除哪些路徑

可以看到tag已經在metrics加上了.

結語


操作下來其實也不是很難對吧,主要歸功於SpringBoot生態的成熟度,正因爲如此即使Java內存使用量大也依然是使用最多的語言.

Tips


本文沒有寫部署Prometheus的部分,如果有同學希望本文添加這部分內容可以留言讓我知道,我會考慮是否添加Prometheus部分內容. :) 


點擊閱讀原文,歡迎在我的博客給我留言.

點個

在看

你最好看

ASF第一位華人董事

2021-03-16

微服務監控:SpringBoot-Micrometer-Influx

2020-03-14

雲原生編程語言ballerina:hello-world

2020-02-12

本文分享自微信公衆號 - 四顆咖啡豆(gh_71aedc0a994c)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章