前言
雲原生時代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部分內容. :)
點擊閱讀原文,歡迎在我的博客給我留言.
點個
在看
你最好看
2021-03-16
2020-03-14
本文分享自微信公衆號 - 四顆咖啡豆(gh_71aedc0a994c)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。