上文使用靜態配置的方式達到了監控服務的目的,實際的生產環境中微服務的數量多達幾十甚至上百個,這時候靜態配置的方式就顯得難以管理和維護。Prometheus官方提供了多種服務發現的方式配置服務,這里我們使用服務發現的方式解決實際環境下微服務監控的問題。
Prometheus官方集成了Consul實現了微服務的監控,對於國內很多團隊采用的Eureka服務發現組件沒有支持,當然我們可以從Github上找到Eureka的Adapter,我們可以利用這個Adapter變相的實現Eureka和Prometheus的集成。
Eureka
首先給出Github的地址:eureka-consul-adapter 。
首先需要把maven依賴添加到Eureka Server服務中,pom依賴如下:
<properties>
<eureka-consul-adapter.version>1.4.0</eureka-consul-adapter.version>
</properties>
<dependencies>
<!--為了讓prometheus也能監控Eureka Server,添加此依賴-->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>at.twinformatics</groupId>
<artifactId>eureka-consul-adapter</artifactId>
<version>${eureka-consul-adapter.version}</version>
</dependency>
</dependencies>
為了讓Prometheus也能監控Eureka Server,我們也配置一下yaml文件,只需要配置actuator相關的參數:
# actuator相關配置
management:
endpoints:
web:
exposure:
include: "*"
base-path: /actuator
endpoint:
health:
enabled: true
show-details: always
prometheus:
enabled: true
metrics:
export:
prometheus:
enabled: true
step: 1ms
descriptions: true
tags:
application: EUREKA_SERVER
注意這里actuator的路徑是 /actuator。至此Eureka Server的集成就完成了。
Prometheus
和上文配置一樣,我們同樣需求修改prometheus.yml,在 scrape_configs節點下添加Eureka Server的配置,Prometheus支持Consul,通過上面Adapter的集成,我們將Eureka偽裝成了Consul,這里修改server的值,同時配置metrics_path(如果不配置,默認就是/metrics,Prometheus是無法識別的)。
# consul監控
- job_name: 'consul-prometheus'
consul_sd_configs:
- server: '192.168.80.1:1514'
services: []
metrics_path: '/actuator/prometheus'
配置完成后重啟Prometheus,這時候再去觀察targets,在Eureka上注冊的微服務都被Prometheus抓取到了。

Grafana
最后配置Grafana,和上文的配置完全相同,這次我們使用漢化程度比較好的 1 SLS JVM監控大盤 ,導入后就可以看到在Eureka上注冊的微服務了,通過 Application 和 Instance 可以切換不同的微服務和實例。


對於使用Nacos的同學,同樣有現成的Adapter可以使用:nacos-consul-adapter 。
Eureka Server集成的代碼,我已上傳到Github,有需要自取:spring-boot-discovery-server 。
