Prometheus監控k8s(5)-grafana用k8s插件展示Prometheus監控數據


grafana用k8s插件展示Prometheus監控數據

一個個去找模板,還要不停的嘗試,還有各種配置和版本的坑。為此grafanakubernetes 提供了一套插件模板

 

github: https://github.com/grafana/kubernetes-app

https://grafana.com/grafana/plugins/grafana-kubernetes-app/installation

要使用該模板插件,需要部署kube-state-merticsnode-exporter以及prometheus,grafana。那是肯定的啦

1.1 安裝插件

可以在部署grafana的時候,直接把插件裝上:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
   name: monitoring-grafana
   namespace: kube-system
spec:
   replicas: 1
   template:
     metadata:
       labels:
         task: monitoring
         k8s-app: grafana     
     spec:              
       containers:
       - name: grafana
         image: registry.cn-shanghai.aliyuncs.com/grafana_cluster/grafana:latest
         ports:
         - containerPort: 3000
           protocol: TCP         
         env: - name: INFLUXDB_HOST value: monitoring-influxdb - name: GF_INSTALL_PLUGINS value: grafana-kubernetes-app ---
apiVersion: v1
kind: Service
metadata:
   name: monitoring-grafana
   namespace: kube-system
spec:  
   ports:
   - port: 80
     targetPort: 3000
   type: LoadBalancer
   selector:
     k8s-app: grafana

 

  • 也可以在grafana的pod中執行安裝命令:
kubectl get pods -n <namespace>
kubectl exec -it <pod name> /bin/bash -n <namespace>
grafana-cli plugins install grafana-kubernetes-app

 

安裝完成后需要重啟 grafana 才會生效,我們這里直接刪除 Pod,重建即可

1.2 配置

需要在grafana中配置,才會生效
在grafana頁面,點擊plugins
點擊kubernets-enable

 

 

 

配置集群訪問地址以及訪問證書:

 

 

 

 

 

 

 

 apiserver 使用6443端口,以https形式提供服務。客戶端訪問apiserver需要認證客戶端證書。該集群使用kubeadm 安裝,會有一個/etc/kubernetes/admin.conf 文件,里面包含了客戶端的證書和密碼base64編碼。

cat /etc/kubernetes/admin.conf

其中屬性certificate-authority-data、client-certificate-data、client-key-data對應 CA 證書、Client 證書、Client 私鑰, config 文件里面的內容是base64編碼過后的,分別執行 echo "<base64 code>" | base64 -d 就能還原成證書源文件。

 

grafana dashboard中自動出現下圖中的dashboard

 

 

1.3 集群資源監控

 

 

 

1.4 node監控

 

 

 

 

 

 

1.5  POD/容器監控

 

 

 

 

 

1.6 Deployment監控

這個貌似新版添加的

 

 

[root@k8s-master prometheus]# kubectl get deployments -n kube-system
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
coredns                    2/2     2            2           42d
custom-metrics-apiserver   1/1     1            1           27d
grafana                    1/1     1            1           107m
kube-state-metrics         1/1     1            1           9m35s
kubernetes-dashboard       1/1     1            1           35d
tiller-deploy              1/1     1            1           16d
[root@k8s-master prometheus]#
[root@k8s-master prometheus]# kubectl get deployments
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
mysql                    1/1     1            1           11d
nfs-client-provisioner   1/1     1            1           21d
[root@k8s-master prometheus]#
[root@k8s-master prometheus]# kubectl get deployments -n ingress-nginx
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller   1/1     1            1           38d
[root@k8s-master prometheus]#

 

 

 

 

1.7 新版不出圖解決

使用中發現,3個圖中node不出圖,cluster部分不出圖

https://www.wchao.site/archives/granafa-k8s

https://www.cnblogs.com/robinunix/p/11280883.html

 

 

 

官方issue : #13

收集節點信息,依賴node-exporter 暴露的http接口。以獲取cpu使用率接口為例,其格式如下:

 

 

 

 

 

 

node_cpu_guest_seconds_total{addonmanager_kubernetes_io_mode="Reconcile",cpu="3",instance="10.6.76.25:9100",job="kubernetes-service-endpoints",kubernetes_io_cluster_service="true",kubernetes_io_name="NodeExporter",kubernetes_name="node-exporter",kubernetes_namespace="kube-system",mode="user"}

 

 

而圖片模板的計算方式是:

 

 

 

可以看到k8s Node模板里面是使用 nodename 字段來獲取不同節點的數據,但是node-exporter 暴露出來的接口中,並沒有nodename 字段,因此導致了模板查詢不到數據,從而無法繪制圖形。

 

解決方法如下:

點擊 k8s Node dashboard 頁面中的設置按鈕,選擇Variable 菜單

 

 

 

 

可以看到當前有4個變量,點擊右上角New 創建一個新變量

 

 

 

出現所有node才算正確,有時網絡會有點慢

 

點擊保存后,會彈出一個提示框。選擇overwrite 即可。

 

 

 

再回到 k8s Node dashboard 頁面,可以看到多了instance 一欄

 

 

隨后編輯各個panel, 將引用了nodename的地方改為instance。這里以cpu panel 為例:

 

 

 

 

一般修改完成鼠標移走就顯示了,但新版本可能還是不能正常顯示主要原因是有些字段名字已經更換了,下面是部分更改屬性的對應:

* node_cpu ->  node_cpu_seconds_total
* node_memory_MemTotal -> node_memory_MemTotal_bytes
* node_memory_MemFree -> node_memory_MemFree_bytes
* node_filesystem_avail -> node_filesystem_avail_bytes
* node_filesystem_size -> node_filesystem_size_bytes
* node_disk_io_time_ms -> node_disk_io_time_seconds_total
* node_disk_reads_completed -> node_disk_reads_completed_total
* node_disk_sectors_written -> node_disk_written_bytes_total
* node_time -> node_time_seconds
* node_boot_time -> node_boot_time_seconds
* node_intr -> node_intr_total
* node_filesystem_free -> node_filesystem_free_bytes
* node_filesystem_size -> node_filesystem_size_bytes
* node_disk_bytes_read-> node_disk_read_bytes_total
* node_disk_bytes_written -> node_disk_written_bytes_total
* node_disk_reads_completed->node_disk_reads_completed_total
* node_disk_writes_completed  ->
        node_disk_writes_completed_total
* node_network_receive_bytes  ->
        node_network_receive_bytes_total
* node_network_transmit_bytes ->
        node_network_transmit_bytes_total
* node_network_receive_errs   ->
        node_network_receive_errs_total

 

如果上面沒有列出的屬性,你復制一下到prometheus這兒通常會出現大意相同寫法不同的屬性名稱。這就是對應的。

 

也可以在node_exporter頁面查詢

 

 

 

1.8 修改grafana panel的title

為了更裝逼,不想給同事一個個解釋每張圖是什么意思,我們修改一下title

 

 

 

 

 

 

 

 


免責聲明!

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



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