应用容器监控
登录到MiniKube主机,并且访问本机的4194端口,可以获取到当前节点上cAdvisor的监控样本数据:
在本节中,我们将利用Prometheus的服务发现能力,自动的找到这些cAdvisor的采集目标。
在上一小节中,我们已经能够通过Kubernetes自动的发现当前集群中的所有Node节点。
如上所示,当role的配置为node时,Prometheus会通过Kubernetes API找到集群中的所有Node对象,并且将其转换为Prometheus的Target对象,从Prometheus UI中可以查看该Target实例包含的所有Metadata标签信息,如下所示,在从MiniKube集群中获取到的一个节点Metadata标签信息:
__meta_kubernetes_node_name
:该节点在集群中的名称;- :该节点中包含的用户自定义标签以及Kubernetes自动生成的标签;
__meta_kubernetes_node_annotation_<annotationname>
:该节点中包含的Kubernetes自动生成的注解信息;
用户也可以通过以下命令查看节点的详细信息:
$ kubectl get nodes/minikube -o yaml
为了能够通过Prometheus采集到cAdvisor的metrics服务,我们为cAdvisor定义了单独采集任务。该任务将基于Node模式发现集群中所有的节点,并通过Relabel修改Target的数据采集配置,从而获取到cAdvisor的监控数据,修改prometheus-config.yml如下:
这里定义了三个relabel步骤:
- 默认获取到的target地址为,当前节点中kubelet的访问地址。因此通过通过正则表达式(.+):(.+)匹配出IP地址和端口,并将将匹配到的内容按照$1:4194的形式覆盖的值。 从而获得cAdvisor访问地址;
- 默认返回的
__scheme__
为https,通过直接修改其值为http,从而可以让Prometheus通过访问http://IP:4193/metrics作为采集目标地址;
除了直接访问cAdvisor监听的端口以外,更通用的方式是通过apiserver访问kubelet提供的/metrics/cadvisor接口获取cAdvisor的样本数据。例如,想要获取节点minikube上cAdvisor的监控数据可以使用ca证书和令牌在Kubernetes集群内访问以下地址获取:
https://kubernetes.default.svc:443/api/v1/nodes/minikube/proxy/metrics/cadvisor
因此,修改kubernetes-cadvisor的relabel配置,通过获取节点的__meta_kubernetes_node_name
并重写将采集任务地址重定向到apiserver的API地址:
如下图所示,Prometheus使用了访问地址后的任务采集状态: