prometheus基于k8s的自动发现方式主要支持以下5种角色(role):node、service、endpoint、pod、ingress。在实际部署中经常用到的是node、endpoints、pod三种,其中node适用于与节点相关的资源监控,比如node-exporter;pod和endpoints适用于直接采集pod实例提供的监控数据。
下面将具体说明node,endpoints,pod三种角色的可用label并举例说明其用法:
node
可用标签
- __meta_kubernetes_node_name: node节点的名称,可通过 kubectl get node查看
- __meta_kubernetes_node_label_<labelname>: k8s中node节点的标签.<labelname>代表标签名称,可通过kubectl get node --show-labels查看
- __meta_kubernetes_node_labelpresent_<labelname>: 标签存在则为true.<labelname>代表标签名称
- __meta_kubernetes_node_annotation_<annotationname>: k8s中node节点的注解.<annotationname>代表注解名称
- __meta_kubernetes_node_address_<address_type>: 不同类型的node节点地址
- instance: 从apiserver获取到的节点名称
举例:
在该例子中,利用了gpu节点的label:gpu-node="true"做了过滤,action为keep,实现了只采集gpu节点的node-exporter指标,可通过prometheus的接口(/api/v1/targets?state=active)查看过滤出来的targets
pod
可用标签
- __meta_kubernetes_namespace: pod所在的命名空间
- __meta_kubernetes_pod_name: pod的名称
- __meta_kubernetes_pod_ip: pod的ip
- __meta_kubernetes_pod_label_<labelname>: pod的标签
- __meta_kubernetes_pod_annotation_<annotationname>: pod的注解
- __meta_kubernetes_pod_annotationpresent_<annotationname>: 注解存在则为true
- __meta_kubernetes_pod_container_init: 如果容器是InitContainer,则为true
- __meta_kubernetes_pod_container_name: 容器的名称
- __meta_kubernetes_pod_container_port_name: 容器的端口名称
- __meta_kubernetes_pod_container_port_number: 容器的端口号
- __meta_kubernetes_pod_container_port_protocol: 容器的端口协议
- __meta_kubernetes_pod_ready: pod的就绪状态,true或false。
- __meta_kubernetes_pod_phase: pod的生命周期状态.Pending, Running, Succeeded, Failed or Unknown
- __meta_kubernetes_pod_node_name: pod所在node节点名称
- __meta_kubernetes_pod_host_ip: pod所在node节点ip
- __meta_kubernetes_pod_controller_kind: pod控制器的类型ReplicaSet ,DaemonSet,Job,StatefulSet…
- __meta_kubernetes_pod_uid: pod的uid
- __meta_kubernetes_pod_controller_name: pod控制器的名称
举例
其中__metrics_path__默认为/metrics,在该例子中替换成了/metric
endpoints
可用标签
- __meta_kubernetes_namespace : ep对象所在的命名空间
- __meta_kubernetes_endpoints_name : ep的名称
若endpoint是一个service,则会带上service的所有标签
- __meta_kubernetes_namespace: service所在的命名空间
- __meta_kubernetes_service_annotation_<annotationname>: k8s中service的注解
- __meta_kubernetes_service_annotationpresent_<annotationname>: 注解存在则为true
- __meta_kubernetes_service_cluster_ip: k8s中service的clusterIP
- __meta_kubernetes_service_external_name: k8s中service的external_name
- __meta_kubernetes_service_label_<labelname>: k8s中service的标签
- __meta_kubernetes_service_labelpresent_<labelname>: 标签存在则为true
- __meta_kubernetes_service_name: k8s中service的名称
- __meta_kubernetes_service_port_name: k8s中service的端口
- __meta_kubernetes_service_port_protocol: k8s中service的端口协议
- __meta_kubernetes_service_type: k8s中service的类型
举例
在该例子中,利用了service的annotation进行targets过滤。