prometheus监控kubernetes集群配置详解(七)
kubernetes_sd_config
通过发现k8s中各种对象的IP地址端口等信息,作为target来抓取。
可以配置以下角色类型来获取不同对象的ip和port等信息:
一、角色类型
1. node
node
角色可以发现集群中每个node节点的地址端口,默认为Kubelet的HTTP端口。目标地址默认为Kubernetes节点对象的第一个现有地址,地址类型顺序为NodeInternalIP、NodeExternalIP、NodeLegacyHostIP和NodeHostName。
可用标签
__meta_kubernetes_node_name
: node节点的名称__meta_kubernetes_node_label_<labelname>
: k8s中node节点的标签.<labelname>
代表标签名称__meta_kubernetes_node_labelpresent_<labelname>
: 标签存在则为true.<labelname>
代表标签名称__meta_kubernetes_node_annotation_<annotationname>
: k8s中node节点的注解.<annotationname>
代表注解名称__meta_kubernetes_node_annotationpresent_<annotationname>
: 注解存在则为true.<annotationname>
代表注解名称__meta_kubernetes_node_address_<address_type>
: 不同类型的node节点地址,例如:_meta_kubernetes_node_address_Hostname="test-k8s-node1"
_meta_kubernetes_node_address_InternalIP="10.0.0.11"
instance
: 从apiserver获取到的节点名称
2. service
service
角色可以发现每个service的ip和port,将其作为target。这对于黑盒监控(blackbox)很有用
可用标签
__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的类型
3. pod
pod
角色可以发现所有pod并将其中的pod ip作为target。如果有多个端口或者多个容器,将生成多个target(例如:80,443这两个端口,pod ip为10.0.244.22,则将10.0.244.22:80,10.0.244.22:443分别作为抓取的target)。
如果容器没有指定的端口,则会为每个容器创建一个无端口target,以便通过relabel手动添加端口。
__meta_kubernetes_namespace
: pod所在的命名空间__meta_kubernetes_pod_name
: pod的名称__meta_kubernetes_pod_ip
: pod的ip__meta_kubernetes_pod_label_<labelname>
: pod的标签__meta_kubernetes_pod_labelpresent_<labelname>
: 标签存在则为true__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
orUnknown
__meta_kubernetes_pod_node_name
: pod所在node节点名称__meta_kubernetes_pod_host_ip
: pod所在node节点ip__meta_kubernetes_pod_uid
: pod的uid__meta_kubernetes_pod_controller_kind
: pod控制器的类型ReplicaSet
,DaemonSet
,Job
,StatefulSet
…__meta_kubernetes_pod_controller_name
: pod控制器的名称
4. endpoints
endpoints
角色可以从ep列表中发现target。对于每个ep地址和端口都会发现target。如果端点由Pod支持,则该Pod的所有其他容器端口(未绑定到端点端口)也将作为目标。
可用标签
__meta_kubernetes_namespace
: ep对象所在的命名空间__meta_kubernetes_endpoints_name
: ep的名称直接从ep对象的列表中获取的所有target,下面的标签将会被附加上
__meta_kubernetes_endpoint_hostname
: ep的主机名__meta_kubernetes_endpoint_node_name
: ep的node节点名__meta_kubernetes_endpoint_ready
: ep的就绪状态,true或false。__meta_kubernetes_endpoint_port_name
: ep的端口名称__meta_kubernetes_endpoint_port_protocol
: ep的端口协议__meta_kubernetes_endpoint_address_target_kind
: ep对象的目标类型,比如Pod__meta_kubernetes_endpoint_address_target_name
: ep对象的目标名称,比如pod名称
如果ep是属于service的话,则会附加
service
角色的所有标签对于ep的后端节点是pod,则会附加
pod
角色的所有标签(即上边介绍的pod角色可用标签) 比如我么手动创建一个ep,这个ep关联到一个pod,则prometheus的标签中会包含这个pod
角色的所有标签
|
|
5. ingress
ingress
角色发现ingress的每个路径的target。这通常对黑盒监控很有用。该地址将设置为ingress中指定的host。
可用标签
__meta_kubernetes_namespace
: ingress所在的命名空间__meta_kubernetes_ingress_name
: ingress的名称__meta_kubernetes_ingress_label_<labelname>
: ingress的标签__meta_kubernetes_ingress_labelpresent_<labelname>
: 标签存在则为true__meta_kubernetes_ingress_annotation_<annotationname>
: ingress的注解__meta_kubernetes_ingress_annotationpresent_<annotationname>
: 注解存在则为true__meta_kubernetes_ingress_scheme
: ingress的协议,如果设置了tls则是https,默认http__meta_kubernetes_ingress_path
: ingress中指定的的路径。默认为/
二、配置文件:
|
|
官方示例Prometheus配置文件:https://github.com/prometheus/prometheus/blob/release-2.23/documentation/examples/prometheus-kubernetes.yml