Myluzh Blog

Prometheus 在 K8S 集群中自动发现常用角色(Role)的解释

发布时间: 2024-11-21 文章作者: myluzh 分类名称: Kubernetes 朗读文章


0x01 Role概述
在 Prometheus 的 Kubernetes 自动发现(kubernetes_sd_configs)中,有许多常用的 角色(roles),可以用来发现不同类型的 Kubernetes 资源。
自动发现的主要优点:
无需手动更新配置文件,减少运维压力。实时适应动态环境,监控目标自动更新。通过 relabeling 和过滤规则灵活管理目标。适用于大规模和快速变化的环境。如果环境是动态的(如 Kubernetes 集群),自动发现是非常有价值的工具,它让 Prometheus 能更高效、智能地工作,从而减少了监控管理的复杂性。


0x02 Role介绍
以下是常用的自动发现角色以及适用场景。
1. ingress
描述: 用于发现 Kubernetes 中的 Ingress 资源(通常对应 HTTP/HTTPS 的路由)。
应用场景: 动态监控暴露的域名或服务入口,结合 Blackbox Exporter 对域名进行探测。
发现的元数据:
__meta_kubernetes_ingress_name:Ingress 名称
__meta_kubernetes_ingress_host:Ingress 中定义的域名
__meta_kubernetes_namespace:Ingress 所属的命名空间

2. pod
描述: 用于发现 Kubernetes 中的 Pod。
应用场景: 动态监控应用的健康状态、性能指标或内部服务。
发现的元数据:
__meta_kubernetes_pod_name:Pod 名称
__meta_kubernetes_pod_label_*:Pod 上的标签
__meta_kubernetes_pod_container_name:容器名称
__meta_kubernetes_pod_ip:Pod 的 IP 地址

3. service
描述: 用于发现 Kubernetes 中的 Service(ClusterIP、NodePort、LoadBalancer)。
应用场景: 动态发现服务的暴露接口,适合监控外部流量或负载均衡器。
发现的元数据:
__meta_kubernetes_service_name:Service 名称
__meta_kubernetes_service_label_*:Service 的标签
__meta_kubernetes_service_port_name:Service 暴露的端口名称
__meta_kubernetes_namespace:Service 所属的命名空间

4. endpoints
描述: 用于发现 Service 的 Endpoints(具体的后端 Pod 或 IP 地址)。
应用场景: 适合监控服务后端的 Pod 或实例(如每个服务的健康状态、负载等)。
发现的元数据:
__meta_kubernetes_endpoints_name:Endpoints 名称
__meta_kubernetes_endpoint_address:后端 IP 地址
__meta_kubernetes_endpoint_port_name:对应的端口名称

5. node
描述: 用于发现 Kubernetes 集群中的 Node(工作节点)。
应用场景: 监控 Kubernetes 节点的资源使用情况(CPU、内存、磁盘等),适合结合 Node Exporter 使用。
发现的元数据:
__meta_kubernetes_node_name:Node 名称
__meta_kubernetes_node_label_*:Node 的标签
__meta_kubernetes_node_address_*:Node 的地址信息(InternalIP、ExternalIP)

6. namespace
描述: 用于发现 Kubernetes 中的 Namespace。
应用场景: 适合在 Namespace 层面进行分组监控(如命名空间级别的资源分配、隔离策略)。
发现的元数据:
__meta_kubernetes_namespace:Namespace 名称
__meta_kubernetes_namespace_label_*:Namespace 的标签

7. configmap 和 secret
描述: 用于发现 Kubernetes 中的 ConfigMap 和 Secret。
应用场景: 监控配置文件或敏感信息的变更(虽然不常用)。
发现的元数据:
__meta_kubernetes_configmap_name:ConfigMap 名称
__meta_kubernetes_secret_name:Secret 名称
__meta_kubernetes_namespace:所属 Namespace

8. cronjob 和 job
描述: 用于发现 Kubernetes 中的 CronJob 和 Job。
应用场景: 监控定时任务或一次性 Job 的执行状态。
发现的元数据:
__meta_kubernetes_cronjob_name:CronJob 名称
__meta_kubernetes_job_name:Job 名称
__meta_kubernetes_namespace:Namespace 名称

9. statefulset, daemonset, replicaset, 和 deployment
描述: 用于发现 Kubernetes 中的工作负载资源。
应用场景: 监控特定的工作负载是否正常运行。
发现的元数据:
__meta_kubernetes_statefulset_name:StatefulSet 名称
__meta_kubernetes_daemonset_name:DaemonSet 名称
__meta_kubernetes_replicaset_name:ReplicaSet 名称
__meta_kubernetes_deployment_name:Deployment 名称

0x03 总结
ingress 动态发现 HTTP/HTTPS 入口资源,适合域名或流量入口监控。
pod 动态发现 Pod,适合监控容器或应用实例。
service 动态发现 Service,适合监控服务暴露的接口或负载均衡器。
endpoints 动态发现后端的具体实例(Pod/IP),适合深度服务监控。
node 动态发现节点资源,适合结合 Node Exporter 进行节点级监控。
namespace 动态发现 Namespace,适合按命名空间分组监控。
configmap/secret 监控配置文件或敏感信息的变更(较少使用)。
cronjob/job 动态发现定时任务或一次性 Job,适合任务状态监控。
statefulset 动态发现有状态的应用资源,适合持久化服务(如数据库)监控。
daemonset 动态发现守护进程类工作负载,适合主机级别监控工具(如日志、监控代理)。
replicaset 动态发现副本集,适合监控具体副本状态。
deployment 动态发现 Deployment,适合监控无状态服务的分发和运行状态。

选择角色时,请根据实际监控需求确定需要自动发现的资源类型,配合 relabeling 规则进一步筛选和优化目标。


标签: k8s Prometheus 监控 自动发现 sd kubernetes_sd_configs

发表评论