北京好治疗皮肤科医院 http://m.39.net/pf/a_6171978.html一、背景介绍
前面我们一起配置了如何在kube-prometheus下面新增一个监控项Kubernetes集群监控ETCD组件。如果我们在Kubernetes集群中有了很多的Service和Pod,那么我们都得一个一个的去建立一个对应的ServiceMonitor对象来进行监控吗?这样岂不是又变得很繁琐起来了?
答案「否定的」,我们可以通过prometheus的自动发现功能轻松解决这个问题。
二、什么是服务发现?
我们在每个节点上面都运行了node-exporter,如果我们通过一个Service来将数据收集到一起用静态配置的方式配置到Prometheus去中,就只会显示一条数据,我们得自己在指标数据中去过滤每个节点的数据,当然我们也可以手动的把所有节点用静态的方式配置到Prometheus中去,但是以后要新增或者去掉节点的时候就还得手动去配置,那么有没有一种方式可以让Prometheus去自动发现我们节点的node-exporter程序,并且按节点进行分组呢?这就是Prometheus里面非常重要的「服务发现」功能。
Prometheus支持多种服务发现机制:文件、DNS、Consul、Kubernetes、OpenStack、EC2等。基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus查询到需要监控的Target列表,然后轮训这些Target获取监控数据,下面主要介绍Kubernetes服务发现机制。
目前,在Kubernetes下,Prometheus通过与KubernetesAPI集成主要支持5种服务发现模式:Node、Service、Pod、Endpoints、Ingress。不同的服务发现模式适用于不同的场景,例如:node适用于与主机相关的监控资源,如节点中运行的Kubernetes组件状态、节点上运行的容器状态等;service和ingress适用于通过黑盒监控的场景,如对服务的可用性以及服务质量的监控;endpoints和pod均可用于获取Pod实例的监控数据,如监控用户或者管理员部署的支持Prometheus的应用。
三、规则解析
为解决服务发现的问题,kube-prometheus为我们提供了一个额外的抓取配置来解决这个问题,我们可以通过添加额外的配置来进行服务发现进行自动监控。我们可以在kube-prometheus当中去自动发现并监控具有prometheus.io/scrape=true这个annotations的Service。
配置项规则参考链接: