張堅,科大訊飛開發工程師,云原生愛好者,
本篇文章我們基于 Prometheus 和 Grafana 實作微服務應用監控,

KubeSphere 平臺本身提供了監控功能,包括節點狀態、集群資源使用率、Etcd、API Server 等監控,不過缺少了應用級別的監控,
引入依賴包
在應用中引入監控所需要的 jar 包,包含 Prometheus 和 Actuator
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
引入這 2 個包以后就通過 Prometheus 抓取到應用的監控資訊,
修改應用配置,暴露監控埠
management:
endpoints:
web:
exposure:
include: "*"
base-path: /
metrics:
tags:
application: ${spring.application.name}
- management.server.port:啟用獨立的埠來提供監控,未配置的情況下共用應用埠;
- management.metrics.tags.xxx:在統計資訊中添加自定義的標簽;
- management.endpoints.web.exposure.include:用于包含我們要公開的端點串列 , 我們這里設定為* 代表所有,
- management.endpoints.web.base-path:用于設定 Promethues 的監控路徑,默認是通過
/actuator/prometheus訪問,這樣配置以后只需要通過/prometheus訪問
配置完成后重啟服務,通過瀏覽器訪問 localhost:8080/prometheus 即可抓取到 Prometheus 的監控資料,效果如下:

修改 Service 配置
kind: Service
apiVersion: v1
metadata:
name: spring-cloud-provider-service
namespace: cloud-demo
labels:
app: spring-cloud-provider-service
micrometer-prometheus-discovery: 'true'
spec:
ports:
- name: metrics
protocol: TCP
port: 8080
targetPort: 8080
selector:
app: spring-cloud-provider
修改后端服務端的 Service
- 添加了
micrometer-prometheus-discovery: 'true'這個標簽,方便后面 ServiceMonitor 自動抓取 - 修改 Service 埠映射的名稱未 metrics
創建 ServiceMonitor
安裝 KubeSphere 平臺時已經安裝好了 promethus-operator, ServiceMonitor 是 prometheus-operator 后創建的一種自定義資源,Prometheus 可以通過 ServiceMonitor 自動識別帶有某些 label 的 service ,并從這些 Service 獲取資料,
現在需要讓 Promethus 可以抓取到我們暴露的應用監控,所以需要創建一個如下的 ServiceMonitor,
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: micrometer-demo
namespace: cloud-demo
spec:
endpoints:
- interval: 30s
path: /prometheus
port: metrics
namespaceSelector:
matchNames:
- cloud-demo
# any: true
selector:
matchLabels:
micrometer-prometheus-discovery: 'true'
這段 YAML 檔案的意思是抓取 namespace 為 cloud-demo,并設定了 micrometer-prometheus-discovery: 'true' 的 labels 的所有 Service,抓取的埠為 metrics,抓取路徑為 /prometheus,
詳細說明一下各欄位的意義:
-
metadata下的name和namespace將指定 Service Monitor 所需的一些關鍵元資訊, -
spec的endpoints為服務端點,代表 Prometheus 所需的采集 Metrics 的地址,endpoints為一個陣列,同時可以創建多個endpoints,每個endpoints包含三個欄位,每個欄位的含義如下:interval:指定 Prometheus 對當前endpoints采集的周期,單位為秒,在本次示例中設定為30s,path:指定 Prometheus 的采集路徑,設定為/prometheus,這個跟應用中暴露的監聽埠保持一致,port:指定采集資料需要通過的埠,設定為/metrics設定的埠為 步驟三 創建 Service 時埠所設定的name,
-
spec的namespaceSelector為需要發現的 Service 的范圍,namespaceSelector包含兩個互斥欄位,欄位的含義如下:any:有且僅有一個值true,當該欄位被設定時,將監聽所有符合 Selector 過濾條件的 Service 的變動,matchNames:陣列值,指定需要監聽的namespace的范圍,例如,只想監聽default和cloud-demo兩個命名空間中的 Service,那么matchNames設定如下:
namespaceSelector: matchNames: - default - cloud-demo -
spec的selector用于選擇 Service,
在本次示例所使用的 Service 有micrometer-prometheus-discovery: 'true'Label,所以selector設定如下:selector: matchLabels: micrometer-prometheus-discovery: 'true'
可以通過 kubectl apply -f micrometer-demo.yml 將其部署到集群中,
執行成功后可以在集群的 CRD 下面搜索 ServiceMonitor 并打開可以找到我們部署的 ServiceMonitor 配置,如圖所示:

創建自定義監控
訪問 集群-> 監控告警-> 自定義監控進入,如圖所示:

我們點擊創建 可以看到 KubeSphere 已經集成了部分監控面板,這里我們選擇 Grafana,

在下一步后系統會讓我們上傳 JSON 模版,我們可以通過 Grafana 官網下載一些通用的模版配置,這里我們使用的是 [Spring Boot 2.1 Statistics](Spring Boot 2.1 Statistics | Grafana Labs),在右側可以下載 JSON 檔案,
匯入 JSON 后我們就可以看到相關監控指標了,

使用這種方式有個最大問題就是多個應用無法切換,像我們之前部署了 3 個應用在一張圖中顯示就很亂,所以需要通過外部 Grafana 展示監控資料,
使用外部 Grafana 集成
為了方便,我們直接使用 KubeSphere 提供的應用商店功能安裝外部 Grafana,
- 添加應用倉庫
進入企業空間 -> 應用管理 -> 應用倉庫,點擊添加,加入 bitnami 應用倉庫,

- 安裝 Grafana
-
我們依次打開企業空間-專案-點擊要安裝到的具體專案-點擊應用-點擊右側的創建按鈕;
-
彈出對話框中點擊從應用模版,從應用倉庫串列中選擇我們剛剛添加的 bitnami 的倉庫,搜索 Grafana 點擊后安裝即可,


安裝完成后我們在服務里給 grafana 的服務開啟 NodePort 外部訪問,比如我這里的的訪問地址為:http://172.30.10.73:28328/
- 設定 Grafana 資料源
-
我們使用管理員賬號 admin 登錄進 Grafana,默認密碼可以在專案的保密字典中的
cloud-grafana-admin中找到; -
登錄后我們點擊左側的小齒輪-datasource 在打開頁面中選擇 Add data source 然后選擇 Prometheus 在 URL 中填入我們上面說到的 Prometheus 的 URL 地址,如圖所示:

Prometheus 可以通過如下方式找到 kubectl get svc -n kubesphere-monitoring-system

- 填寫后拖到最下面,點擊 save&test,
- 匯入 Dashbord
- 我們點擊頁面左側?-import;
- 輸入我們從 grafana 官網 獲得的對應的模版的 id 點擊 load(我這里使用的是 Spring Boot 2.1 Statistics | Grafana Labs);
- 在下一步中選擇 Prometheus 為我們配置的資料源 點擊 import 即可,

之后我們就可以看到配置的應用監控了,


多個應用之間可以通過左上角進行切換,符合預期,
附錄
- grafana 官網
- Spring Boot 2.1 Statistics
- ServiceMonitor
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/514260.html
標籤:其他
下一篇:Maximum Entropy Population-Based Training for Zero-Shot Human-AI Coordination
