云原生第十周——promethus简介(下)

发布时间 2023-09-04 18:09:51作者: 黑夜有约

Prometheus 服务发现

简介

prometheus采用pull方式拉取指定目标实例的监控数据,也就是间隔固定的周期去目标实例上抓取metrics数据,每一个被抓取的目标实例都需要暴露一个数据指标API接口,prometheus通过这个暴露的接口就可以获取到其指标数据,这种方式需要由目标服务决定采集的指标有哪些,prometheus通过配置在scrape_configs中指定目标节点,static_configs(静态配置)无法动态感知新的节点,即如果后面增加了节点或者删除节点,就得手动修promrtheus的配置文件,并重启promethues,因此后期维护很不方便,所以出现了很多不同类型的service discovery即动态服务发现机制,动态服务发现能够使prometheus自动发现集群中的新目标,并对其进行数据采集,通过服务发现机制使Prometheus能自动获取到需要监控的Target列表,然后轮询这些Target获取监控数据。

prometheus常用的服务发现类型:

  • kubernetes_sd_configs: #基于Kubernetes API实现的服务发现,让prometheus动态发现kubernetes中被监控的新目标
  • static_configs: #静态服务发现,基于prometheus配置文件指定的监控目标
  • dns_sd_configs: #DNS 服务发现监控目标
  • consul_sd_configs: #Consul 服务发现,基于consul服务动态发现监控目标
  • file_sd_configs: #基于指定的文件实现服务发现,基于指定的文件发现监控目标

基于kubernetes_sd_config支持的动态服务发现类型:

  • node #node节点
  • service #发现svc
  • pod #发现pod
  • endpoints #基于svc发现endpoints(pod)
  • Endpointslice #对endpoint进行切片
  • ingress #发现ingress

image

Prometheus服务发现基础-relabeling:

promethues的relabeling(重新修改标签)功能很强大,它能够在抓取到目标实例之前把目标实例的元数据标签动态重新修改,动态
添加或者覆盖标签。

prometheus从Kubernetes API动态发现目标(targer)之后,在被发现的target实例中,都包含一些原始的Metadata标签信息,默认的标签有:

__address__:以<host>:<port> 格式显示目标targets的地址
__scheme__:采集的目标服务地址的Scheme形式,HTTP或者HTTPS
__metrics_path__:采集的目标服务的访问路径

为了更好的识别监控指标,便于后期调用数据绘图、告警等需求,prometheus支持对发现之后的目标进行label修改,在两个阶段可以重新标记:

  • relabel_configs : 在对target进行数据采集之前(比如在采集数据之前重新定义标签信息,如目的IP、目的端口等信息),可以使用relabel_configs添加、修改或删除一些标签、也可以只采集特定目标或过滤目标。

  • metric_relabel_configs:在对target进行数据采集之后,即如果是已经抓取到指标数据时,可以使用metric_relabel_configs做最后的重新标记和过滤。

image

label类型:

  • source_labels:源标签,没有经过relabel处理之前的标签名字
  • target_label:通过action处理之后的新的标签名字
  • regex:给定的值或正则表达式匹配,匹配源标签的值
  • replacement:通过分组替换后标签(target_label)对应的/()/() $1:$2

配置示例:

静态配置:

- job_name: "prometheus-node"
static_configs:
- targets: ["192.168.110.206:9100","192.168.110.207:9100"]

基于kubernetes API Server的动态发现:

- job_name: 'kubernetes-apiserver' #job名称
kubernetes_sd_configs: #基于kubernetes_sd_configs实现服务发现
- role: endpoints #发现类型为endpoinsts
scheme: https #当前jod使用的发现协议
tls_config: #证书配置
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt #容器里的证书路径
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token #容器里的token路径
relabel_configs: #重新re修改标签label配置configs
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] #源标签,即对哪些标签进行操作
action: keep #action定义了relabel的具体动作,action支持多种
regex: default;kubernetes;https #指定匹配条件、只发现default命名空间的kubernetes服务后面的endpoint并且是https协议