Prometheus监控k8s(5)-grafana用k8s插件展示Prometheus监控数据
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