Prometheus 服务发现机制

目录

    • Prometheus 服务发现机制概述
    • static_configs: 静态服务发现
    • file_sd_configs: 文件服务发现
    • dns_sd_configs: DNS 服务发现
    • kubernetes_sd_configs: Kubernetes 服务发现
      • Prometheus 的relabel_configs配置详解:
    • consul_sd_configs: Consul 服务发现
      • consul介绍
      • Consul 安装配置
      • prometheus.yml 配置:

Prometheus 服务发现机制概述

Prometheus数据源的配置主要分为静态配置和动态发现, 常用的为以下几类:

  1. static_configs: #静态服务发现
  2. file_sd_configs: #文件服务发现
  3. dns_sd_configs: #DNS 服务发现
  4. kubernetes_sd_configs: #Kubernetes 服务发现
  5. consul_sd_configs: #Consul 服务发现(推荐使用)

static_configs: 静态服务发现

Prometheus.yaml配置文件:

scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
      - job_name: 'grafana'
        static_configs:
          - targets:
              - 'grafana-service.ns-monitor:3000'
      - job_name: 'kubernetes-apiservers'

file_sd_configs: 文件服务发现

基于文件的服务发现方式不需要依赖其他平台与第三方服务,用户只需将要新的target信息以yaml或json文件格式添加到target文件中 ,prometheus会定期从指定文件中读取target信息并更新。

target文件:

vim targets.json
[
  {
    "targets": [ "192.168.20.136:9100"],
    "labels": {
      "instance": "nodeone",
      "job": "expor_test1"
    }
  },
  {
    "targets": [ "192.168.20.137:9100"],
    "labels": {
      "instance": "nodetwo",
      "job": "expor_test2"
    }
  }
]

Prometheus.yaml配置文件:

scrape_configs:
- job_name: 'file_sd'   #此处定义了自动发现的采集任务
  file_sd_configs:
    - files:
      - targets.json         #采集文件名

查看web界面targets 出现targets.json 所定义的2个job。

dns_sd_configs: DNS 服务发现

忽略

kubernetes_sd_configs: Kubernetes 服务发现

对于kubernetes而言,Promethues通过与Kubernetes API交互,然后轮询资源端点。目前主要支持5种服务发现模式,分别是:
1: Node、
2 :Service、
3 :Pod、
4 :Endpoints、
5 :Ingress
对应配置文件中的role: node / role:service

动态获取所有节点node的信息,可以添加如下配置:

  • role: node
kubernetes_sd_configs:
        - role: node
        relabel_configs:
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)
        - target_label: __address__
          replacement: kubernetes.default.svc:443
        - source_labels: [__meta_kubernetes_node_name]
          regex: (.+)
          target_label: __metrics_path__
          replacement: /api/v1/nodes/${1}/proxy/metrics

  • role: endpoints
      - job_name: 'kubernetes-service-endpoints'

        kubernetes_sd_configs:
        - role: endpoints
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
          action: keep
          regex: true
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
          action: replace
          target_label: __scheme__
          regex: (https?)
        - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
          action: replace
          target_label: __metrics_path__
          regex: (.+)
        - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
          action: replace
          target_label: __address__
          regex: ([^:]+)(?::\d+)?;(\d+)
          replacement: $1:$2
        - action: labelmap
          regex: __meta_kubernetes_service_label_(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_service_name]
          action: replace
          target_label: kubernetes_name

对应的service、pod也是同样的方式。
需要注意的是,为了能够让Prometheus能够访问收到Kubernetes API,我们要对Prometheus进行访问授权,即serviceaccount。否则就算配置了,也没有权限获取。

Prometheus 的relabel_configs配置详解:

  1. source_labels:源标签,没有经过relabel处理之前的标签名字

  2. target_label:通过action处理之后的新的标签名字

  3. regex:正则表达式,匹配源标签

  4. replacement:replacement指定的替换后的标签(target_label)对应的数值

  5. action:action定义了relabel的动作,action支持多种,如下:

    • replace: 替换标签值,根据regex正则匹配到源标签的值,并把匹配的值写入到目的标签中
    • keep: 满足regex正则条件的实例进行采集,把source_labels中没有匹配到regex正则内容的Target实例丢掉
    • drop: 满足regex正则条件的实例不采集,把source_labels中匹配到regex正则内容的Target实例丢掉
    • labeldrop: 对抓取到的符合过滤规则的target标签进行删除
    • labelkeep: 对抓取到的符合过滤规则的target标签进行保留
    • labelmap会根据regex的定义去匹配Target实例所有标签的名称,并且以匹配到的内容为新的标签名称,其值作为新标签的值
    • hashmod 设置target_label为modulus连接的哈希值source_labels

consul_sd_configs: Consul 服务发现

consul介绍

Consul 是基于 GO 语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。
Consul 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。
之前我们通过 Prometheus 实现监控,当新增一个 Target 时,需要变更服务器上的配置文件,即使使用 file_sd_configs 配置,也需要登录服务器修改对应 Json 文件,会非常麻烦。

Consul 安装配置

prometheus.yml 配置:

- job_name: 'consul-prometheus'
  consul_sd_configs:
  - server: '172.30.12.167:8500'
    services: []  

说明一下:这里需要使用 consul_sd_configs 来配置使用 Consul 服务发现类型,server 为 Consul 的服务地址。 配置完毕后,重启 Prometheus 服务。

你可能感兴趣的:(prometheus)