prometheus基于k8s API服务发现

参考文章:https://edu.51cto.com/course/30254.html

一、为什么需要服务发现

Prometheus Server 的数据抓取工作基于 Pull 模型,因而,它必须要事先知道各 target 的位置,然后才能从相应的 Exporter 或 Instrumentation 中抓取数据。
对于小型的系统环境,使用 static_configs 指定各 target 即可解决问题,但是对于较大的集群不适用,尤其不适用于使用容器和基于云的实例的动态集群,因为这些实例会经常出现变化、创建、或销毁的情况。Prometheus 为此专门设计了一组服务发现机制,以便于能够基于服务注册中心自动发现、检测、分类可被监控的各 target ,以及更新发生了变动的 target。
Prometheus 可以集成到多种不同的开源服务发现工具上,以便动态发现需要监控的目标。Prometheus 可以很好的集成到 Kubernetes 平台上,通过其 API Server 动态发现各类被监控的 Pod、Service、Endpoint、Ingress 及 Node 对象,还支持基于文件实现的动态发现。

二、prometheus目前支持的服务发现类型

prometheus目前支持的服务发现类型主要有如下几种:

1、基于文件的服务发现

2、基于consul的服务发现

3、基于k8s API的服务发现

4、基于eureka的服务发现

5、基于nacos的服务发现

6、基于DNS的服务发现

三、什么是基于k8s API的服务发现

基于 Kubernetes API 的服务发现机制支持将 API Server 中的 Pod、Service、Endpoint、Ingress 和 Node 等资源类型下的各资源对象作为 target 对其进行监控。这些资源对象分别由各自的发现机制进行定义,负责发现每种类型资源对象的组件,在 Prometheus 中被称为一个 role (并非 Kubernetes 中的 role)。并且支持在集群上基于 DaemonSet 控制器部署 node_exporter 后发现各节点。
Node 资源发现
Prometheus 的 node role 将集群中的每个节点视作一个 target,这些节点都监听着 Kubelet 使用的端口。node role 会依次检索节点规范上的 NodeInternalIP,NodeExternalIP, NodeLegacyHostIP 和 NodeHostName,并将发现的第一个地址作为目标地址 address
节点上 instance 标签的值取自 API Server 中发现的节点名称。
Service 资源发现
Prometheus 的 service role 负责发现集群上的每个 service 资源。会把 service 上声明的每个端口视作一个 target,地址为 service 的 DNS 名称及相应的端口。
Pod 资源发现
Prometheus 的 pod role 负责发现集群上的每个 pod 资源并暴露其容器为 target。会把 pod 上的每个端口视作一个 target,会为未指定端口的容器创建 “无端口” 类型的 target,方便用户通过 relabel 功能手动添加端口。
Endpoint 资源发现
Prometheus 的 endpoint role 会从各 endpoint 资源中发现目标。会把 endpoint 上的每个端口都视作一个 target,如果 endpoint 的后端工作负载是 pod 则会把该 pod 上其他未绑定到 endpoint 的端口同样视作一个 target。
Ingress 资源发现
Prometheus 的 ingress role 会从 API Server 中发现 ingress 资源。会把 Ingress 资源上的每一个 path 视作一个 target。相关的地址会被设定为 ingress 资源上相关 host 字段的值。

具体实现案例详情请看参考文档

你可能感兴趣的:(prometheus,监控,k8s,prometheus,监控类,监控体系,服务发现)