場景
? ? ? ? 為保障java服務正常運行,對服務的jvm進行監控,通過使用actuator組件監控jvm情況,使用prometheus對數據進行采集,并在Grafana展現。
? ? ? ? ?基于k8s場景
prometheus數據收集
- 配置service的lable,便于prometheus使用lable進行數據采集,本案例使用prometheus=jvm為標簽
kubectl edit service lizz-test-server -n lizz#輸出修改
...
apiVersion: v1
kind: Service
metadata:creationTimestamp: "2022-05-05T08:16:46Z"labels:prometheus: jvm # 增加采集識別標簽app: lizz-test-servername: lizz-test-servernamespace: lizz
...
# 查看k8s中service
kubectl describe service lizz-test-server -n lizz#輸出
name: lizz-test-server
Namespace: lizz
Labels: prometheus=jvmapp=lizz-test-server
Selector: app=lizz-test-server
...
- 重啟service或pod,新增標簽生效,pod中會帶上server中的lable
# 刪除pod方式重啟,k8s啟動pod
kubectl delete pod lizz-test-server-xxx# k8s滾動重啟service
kubectl rollout restart deployment/lizz-test-server
- 修改prometheus配置文件,增加采集數據任務
# 查看monitoring空間下的configMap,可以看到prometheus的configMap
# cm 和 ConfigMap一個意思
kubectl get cm -n monitoring
#修改配置,加入jvm數據采集
kubectl edit cm prometheus-server-conf -n monitoring
- ?在配置文件中的scrape_configs下增加抓取任務如下:
global:scrape_interval: 30sevaluation_interval: 30s
...
scrape_configs:- job_name: 'jvm-monitor' #任務名稱metrics_path: /actuator/prometheus # 數據抓取地址scheme: http # 請求協議kubernetes_sd_configs: # 服務發現配置- role: endpoints # 在Kubernetes Endpoints中查找服務relabel_configs:- source_labels: [__meta_kubernetes_service_label_prometheus] # 匹配標簽regex: 'jvm' # 保留標簽值為jvm的服務action: keep- source_labels: [__meta_kubernetes_namespace] action: replace # 替換標簽,用于和模板中的內容一致target_label: spring_namespace #可以根據模板中的內容進行調整- source_labels: [__meta_kubernetes_service_name]action: replace # 替換標簽,用于和模板中的內容一致target_label: spring_name #可以根據模板中的內容進行調整- source_labels: [__meta_kubernetes_pod_name]action: replace # 替換標簽,用于和模板中的內容一致target_label: instance #可以根據模板中的內容進行調整
...
- 當抓取地址不一致時,可以將metrics_path進行替換,配置如下:
...relabel_configs:- source_labels: [__meta_kubernetes_service_label_prometheus]regex: 'jvm'action: keep- source_labels: [__meta_kubernetes_service_name]regex: 'lizz-test1-server' #當service.name=lizz-test1-server是action: replace # 替換方法target_label: __metrics_path__ # 替換標簽metrics.pathreplacement: /lizz-test1-server/actuator/prometheus # 替換后的路徑
...
- ?刷prometheus緩存,在服務配置中查看配置是否生效。?
- 在graph中搜索jvm就可以看到是否已經采集成功。
Grafana創建面板
- 下載jvm面板模板
Dashboards | Grafana Labs
?
- dashboards中使用import導入?
- 填寫面板信息和數據源后導入完成
- ?完成后顯示jvm監控面板信息,其中篩選項如果沒有正確顯示,可以進行修改如下
修改篩選項內容和取值
- Name:這個選項的id,取值時使用
- Lable:顯示明細
- Date source:數據來源
- query Type:數據類型
- lable:取值標簽
- metric:匹配條件,為空時顯示所有內容
- ?jvm_memory_used_bytes{spring_namespace="$namespace",spring_name="$service"}
- jvm_memory_used_bytes指標對應的就是prometheus中采集的數據指標
- jvm_memory_used_bytes指標中,spring_namespace等于name為“namespace”選擇中的值,spring_name等于name為“service”框中的值。