Prometheus 服务发现

为什么要有服务发现?

Prometheus Server的数据抓取工作于Pull模型,因而,它必需要事先知道各Target的位置,然后才能从相应的Exporter或Instrumentation中抓取数据
  • 对于小型的系统环境来说,通过static_configs指定各Target便能解决问题,这也是最简单的配置方法;
    • 每个Targets用一个网络端点(ip:port)进行标识;
 对于中大型的系统环境或具有较强动态性的云计算环境来说,静态配置显然难以适用;
因此,Prometheus为此专门设计了一组服务发现机制,以便于能够基于服务注册中心(服务总线)自动发现、检测、分类可被监控的各Target,以及更新发生了变动的Target;

可集成的服务发现机制

不用场景中, 服务注册中心的指标也会有不同.

  1. 共有云或私有云 LassS 云自身保存有平台上的所有资源信息, 其API Server 便可作为Prometheus 的服务发现媒介.

  2. Prometheus 也可以集成到多种不同的开源服务发现工具上, 以动态发现需要监控的目标. 例如: Consul, Eureka, Zookeeper, Serverset等

  3. Prometheus 也可以很好的集成 Kubernetes 平台上, 通过其 API Server 动态发现各类被监控的 Pod , Service, Endpoint, Ingress 和 Node对象.

  4. Prometheus 还支持基于DNS 或者文件的动态发现机制.

基于文件的服务发现

  基于文件的服务发现是仅仅略优于静态配置的服务发现方式, 他不仅依赖于任何平台和第三方服务, 因而也是最为简单和通用的实现方式.

  Prometheus Server 定义从文件中加载各个 Target 信息,

Prometheus 配置文件

[root@ops prometheus]# cat prometheus.yml

scrape_configs:
  - job_name: "prometheus"
    honor_timestamps: true
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    file_sd_configs:
    - files:
      - targets/prometheus-*.yml
      refresh_interval: 1m              # 刷新间隔时间

  - job_name: "nodes"
    honor_timestamps: true
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    file_sd_configs:
    - files:
      - targets/nodes-*.yml
      refresh_interval: 1m

Target 配置文件

[root@ops prometheus]# mkdir targets
[root@ops prometheus]# cd targets/
[root@ops targets]# cat prometheus-server.yml 
- targets:
  - 127.0.0.1:9090
  labels:
    app: prometheus-server

[root@ops targets]# cat nodes-linux.yml 
- targets:
  - 192.168.168.106:9100
  - 192.168.168.105:9100
  labels:
    app: node_exporter

基于Consul的服务发现

     Prometheus的Consul服务发现机制将通过Consul的Catalog API来发现target;

  官网地址: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#consul_sd_config

meta标签

  • __meta_consul_address:                            # 目标地址
  • __meta_consul_dc:                                   # 目标的数据中心名称
  • __meta_consul_health:                              # 服务的健康状态
  • __meta_consul_metadata_<key>:             # 目标的每个节点元数据键值
  • __meta_consul_node:                                  # 为目标定义的节点名称
  • __meta_consul_service_address:           # 目标的服务地址
  • __meta_consul_service_id:                    # 目标的服务ID
  • __meta_consul_service_metadata_<key>:# 目标的每个服务元数据键值
  • __meta_consul_service_port:                  # 目标的服务端口
  • __meta_consul_service:                           # 目标所属的服务名称
  • __meta_consul_tagged_address_<key>:      # 每个节点标记目标的地址键值
  • __meta_consul_tags:                                    # 由标签分隔符连接的目标标签列表

consul部署

xx

prometheus配置文件

  # All nodes
  - job_name: 'nodes'
    consul_sd_configs:
    - server: "192.168.168.105:8500"
      tags:
      - "nodes"
      refresh_interval: 1m

consul配置文件

[root@ops prometheus]# cat /etc/consul/nodes.json 
{
    "services": [
        {
            "id": "node_exporter-node01",
            "name": "node01",
            "address": "192.168.168.105",
            "port": 9100,
            "tags": ["nodes"],
            "checks": [{
                "http": "http://192.168.168.105:9100/metrics",
                "interval": "5s"    
            }]
        },
        {
            "id": "node_exporter-node02",
            "name": "node02",
            "address": "192.168.168.102",
            "port": 9100,
            "tags": ["nodes"],
            "checks": [{
                "http": "http://192.168.168.102:9100/metrics",
                "interval": "5s"
            }]
        },
        {
            "id": "node_exporter-node06",
            "name": "node06",
            "address": "192.168.168.106",
            "port": 9100,
            "tags": ["nodes"],
            "checks": [{
                "http": "http://192.168.168.106:9100/metrics",
                "interval": "5s"
            }]
        },
        {
            "id": "node_exporter-node07",
            "name": "node07",
            "address": "192.168.168.107",
            "port": 9100,
            "tags": ["nodes"],
            "checks": [{
                "http": "http://192.168.168.107:9100/metrics",
                "interval": "5s"
            }]
        },
        {
            "id": "node_exporter-mysql07",
            "name": "node055",
            "address": "192.168.168.105",
            "port": 9104,
            "tags": ["nodes"],
            "checks": [{
                "http": "http://192.168.168.105:9104/metrics",
                "interval": "5s"
            }]
        },
        {
            "id": "node_exporter-process",
            "name": "node066",
            "address": "192.168.168.105",
            "port": 9256,
            "tags": ["nodes"],
            "checks": [{
                "http": "http://192.168.168.105:9256/metrics",
                "interval": "5s"
            }]
        }

    ]
}
原文地址:https://www.cnblogs.com/yanshicheng/p/15525389.html