zoukankan      html  css  js  c++  java
  • 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"
                }]
            }
    
        ]
    }
  • 相关阅读:
    poj 2195 Going Home
    poj 3068 "Shortest" pair of paths
    aoj 2226 Merry Christmas
    poj 2226 Muddy Fields
    foj Problem 2275 Game
    foj Problem 2283 Tic-Tac-Toe
    XidianOJ 1081 锘爷与矩阵
    XidianOJ 1061 a+boflw
    XidianOJ 1080 锘爷与跳楼塔
    XidianOJ 1017 Codeforce上的rating
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/15525389.html
Copyright © 2011-2022 走看看