Spring Boot Metrics監控之Prometheus&Grafana(轉)


歡迎來到Spring Boot Actuator教程系列的第二部分。在第一部分中,你學習到了spring-boot-actuator模塊做了什么,如何配置spring boot應用以及如何與各樣的actuator endpoints交互。

在這篇文章中,你將學習sprint boot如何整合外部監控系統Prometheus和圖表解決方案Grafana

在這篇文章的末尾,你將在自己本地電腦上建立一個Prometheus和Grafana儀表盤,用來可視化監控Spring Boot應用產生的所有metrics。

Prometheus

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

  • 數據爬蟲:根據配置的時間定期的通過HTTP抓去metrics數據。
  • time-series 數據庫:存儲所有的metrics數據。
  • 簡單的用戶交互接口:可視化、查詢和監控所有的metrics。

Grafana

Grafana使你能夠把來自不同數據源比如Elasticsearch, Prometheus, Graphite, influxDB等多樣的數據以絢麗的圖標展示出來。

它也能基於你的metrics數據發出告警。當一個告警狀態改變時,它能通知你通過email,slack或者其他途徑。

值得注意的是,Prometheus儀表盤也有簡單的圖標。但是Grafana的圖表表現的更好。這也是為什么,在這篇文章中,我們將整合Grafana和Pormetheus來可視化metrics數據。

增加Micrometer Prometheus Registry到你的Spring Boot應用

Spring Boot使用Micrometer,一個應用metrics組件,將actuator metrics整合到外部監控系統中。

它支持很多種監控系統,比如Netflix Atalas, AWS Cloudwatch, Datadog, InfluxData, SignalFx, Graphite, Wavefront和Prometheus等。

為了整合Prometheus,你需要增加micrometer-registry-prometheus依賴:

<!-- Micrometer Prometheus registry --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> 

一旦你增加上述的依賴,Spring Boot會自動配置一個PrometheusMeterRegistryCollectorRegistry來收集和輸出格式化的metrics數據,使得Prometheus服務器可以爬取。

所有應用的metrics數據是根據一個叫/prometheus的endpoint來設置是否可用。Prometheus服務器可以周期性的爬取這個endpoint來獲取metrics數據。

解析Spring Boot Actuator的/prometheus Endpoint

首先,你可以通過actuator endpoint-discovery頁面(http://localhost:8080/actuator)來看一下prometheus endpoint。

"prometheus": { "href": "http://127.0.0.1:8080/actuator/prometheus", "templated": false } 

prometheus endpoint暴露了格式化的metrics數據給Prometheus服務器。你可以通過prometheus endpoint(http://localhost:8080/actuator/prometheus)看到被暴露的metrics數據:

# HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use # TYPE jvm_memory_committed_bytes gauge jvm_memory_committed_bytes{area="nonheap",id="Code Cache",} 9830400.0 jvm_memory_committed_bytes{area="nonheap",id="Metaspace",} 4.3032576E7 jvm_memory_committed_bytes{area="nonheap",id="Compressed Class Space",} 6070272.0 jvm_memory_committed_bytes{area="heap",id="PS Eden Space",} 2.63192576E8 jvm_memory_committed_bytes{area="heap",id="PS Survivor Space",} 1.2058624E7 jvm_memory_committed_bytes{area="heap",id="PS Old Gen",} 1.96608E8 # HELP logback_events_total Number of error level events that made it to the logs # TYPE logback_events_total counter logback_events_total{level="error",} 0.0 logback_events_total{level="warn",} 0.0 logback_events_total{level="info",} 42.0 logback_events_total{level="debug",} 0.0 logback_events_total{level="trace",} 0.0 ... 

使用Docker下載和運行Prometheus

下載Prometheus

你可以使用docker pull命令來下載Prometheus docker image。

$ docker pull prom/prometheus 

一旦這個image被下載下來,你可以使用docker image ls命令來查看本地的image列表:

$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE prom/prometheus latest b82ef1f3aa07 5 days ago 119MB 

Prometheus配置(prometheus.yml)

接下來,我們需要配置Prometheus來抓取Spring Boot Actuator的/prometheus endpoint中的metrics數據。

創建一個prometheus.yml的文件,填入以下內容:

# my global config global:  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.  - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'.  static_configs:  - targets: ['127.0.0.1:9090']  - job_name: 'spring-actuator'  metrics_path: '/actuator/prometheus'  scrape_interval: 5s  static_configs:  - targets: ['HOST_IP:8080'] 

在Prometheus文檔中,上面的配置文件是basic configuration file的擴展。

上面中比較重要的配置項是spring-actuator job中的scrape_configs選項。

metrics_path是Actuator中prometheus endpoint中的路徑。targes包含了Spring Boot應用的HOSTPORT

請確保替換HOST_IP為你Spring Boot應用運行的電腦的IP地址。值得注意的是,localhost將不起作用,因為我們將從docker container中連接HOST機器。你必須設置網絡IP地址。

使用Docker運行Prometheus

最后,讓我們在Docker中運行Prometheus。使用以下命令來啟動一個Prometheus服務器。

$ docker run -d --name=prometheus -p 9090:9090 -v <PATH_TO_prometheus.yml_FILE>:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml 

請確保替換<PATH_TO_prometheus.yml_FILE>為你在上面創建的Prometheus配置文件的保存的路徑。

在運行上述命令之后,docker將在container中啟動一個Prometheus服務器。你可以通過以下命令看到所有的container:

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
e036eb20b8ad        prom/prometheus     "/bin/prometheus --c…" 4 minutes ago Up 4 minutes 0.0.0.0:9090->9090/tcp prometheus 

在Prometheus儀表盤中可視化Spring Boot Metrics

你可以通過訪問http://localhost:9090訪問Prometheus儀表盤。你可以通過Prometheus查詢表達式來查詢metrics。

下面是一些例子:

  • 系統CPU使用
system-cpu-usage.png
  • API的延遲響應
response-latency.jpg

你可以從Prometheus官方文檔中學習更多的 Prometheus Query Expressions

使用Docker下載和運行Grafana

使用以下命令可以使Docker下載和運行Grafana:

$ docker run -d --name=grafana -p 3000:3000 grafana/grafana 

上述命令將在Docker Container中開啟一個Grafana,並且使用3000端口在主機上提供服務。

你可以使用docker container ls來查看Docker container列表:

$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 939dd22a7179 quay.io/prometheus/prometheus "/bin/prometheus --c…" 14 minutes ago Up 14 minutes 0.0.0.0:9090->9090/tcp vigilant_neumann 1f94c46bcf5c grafana/grafana "/run.sh" 22 hours ago Up 22 hours 0.0.0.0:3000->3000/tcp grafana 

你可以訪問http://localhost:3000,並且使用默認的賬戶名(admin)密碼(admin)來登錄Grafana。

配置Grafana導入Prometheus中的metrics數據

通過以下幾步導入Prometheus中的metrics數據並且在Grafana上可視化。

在Grafana上增加Prometheus數據源

data-source.png

建立一個儀表盤圖表

![add-cpu-usage.png](https://upload-images.jianshu.io/upload_images/793918-2e46ebd23646f1f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

添加一個Prometheus查詢

默認的可視化

dashboard.png

你可以在Github上看到完整的Actutator demo應用。

閱讀第一部分:Spring Boot Actuator:健康檢查、審計、統計和監控

更多閱讀資源

翻譯源



作者:alvin_wang
鏈接:https://www.jianshu.com/p/afc3759e75b9
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM