grafana用k8s插件展示Prometheus監控數據
一個個去找模板,還要不停的嘗試,還有各種配置和版本的坑。為此grafana
為 kubernetes
提供了一套插件模板
github: https://github.com/grafana/kubernetes-app
https://grafana.com/grafana/plugins/grafana-kubernetes-app/installation
要使用該模板插件,需要部署kube-state-mertics
和node-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