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

 

 

 

 

 

 

 

 

posted on 2019-10-10 16:25  光阴8023  阅读(5462)  评论(0编辑  收藏  举报