zoukankan      html  css  js  c++  java
  • Prometheus服务发现

    服务发现

    为什么要有服务发现

    Prometheus Server 的数据抓取工作在于Pull模型, 因而它必需要事先知道各 Target 的位置, 然后才能从相应的 Exporter 或 Instrumentation 中抓取数据.

    对于小型的系统环境, 通过 static_configs 指定各 Target 便能解决问题, 这也是最简单的配置方法,

    每个 Targets 用一个网络端点 (ip:port) 进行标识.

    对于中大型的系统环境或具有较强动态性的云计算环境来说, 静态配置难以适用, 因此 Prometheus 为此专门设计了一组服务发现机制, 一边于能够基于服务注册中心(服务总线) 自动发现, 检测, 分类可被监控的各 Target, 以及更新变动的 Target.

    指标抓去的声明周期

    在每个 sample interval 期间, Prometheus 都会检查执行的作业(Job);

    这些作业首先会根据Job上指定的发现配置生成 target 列表, 此即服务发现过程;

    • 服务发现会返回一个 Target 列表, 其中包含一组称为元数据的标签, 这些标签都以 __meta_ 为前缀.

    • 服务发现还会根据目标配置来设置其它标签, 这些标签带有 __ 前缀和后缀, 包括: __scheme__ , __address__, 和__metrics_path__, 分别保存有 target 支持使用协议(http或https), target 的地址及指标的URL路径(默认为/metrics)

    • 若 URL 路径中存在任何参数, 则他们的前缀会设置为 __param__

    • 这些目标列表和标签会返回给 Prometheus, 其中的一些标签也可以在配置中覆盖.

    配置标签会在抓去的生命周期中被重复利用以生成其他标签, 例如, 指标上的 instance 标签的默认值就来自于__address__标签的值.

    对于发现的各项目标, Prometheus 提供了可以重新标记(relabel)目标的机会.

    它定义在job 配置段的 relabel_config 配置中, 常用于实现如下功能.

    • 将来自服务发现的元数据标签中的信息附加到指标的标签上.
    • 过滤目标. 这之后, 便是数据抓取, 以及指标返回的过程.
    • 抓取而来的指标保存之前, 还允许用户对指标重新打标并过滤.

    它定义在job 配置段的 metric_relabel_configs 配置中, 常用于实现如下功能.

    • 删除不必要的指标,
    • 从指标中删除敏感或不需要的标签.
    • 添加, 编辑或者修改指标的标签值,或者标签格式.

    可集成的服务发现机制

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

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

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

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

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

    配置

    原生基于配置文件

    scrape_configs:
       ...
              
      - job_name: "nodes"
        honor_timestamps: true
        scrape_interval: 15s
        scrape_timeout: 10s
        metrics_path: /metrics
        scheme: http
        static_configs:
          - targets:
            - 192.168.168.106:9100
            - 192.168.168.105:9100

    基于文件

    [root@ops ~]# cd /opt/prometheus
    [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
    
    # 主配置文件
    
    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

    基于 Consl

    基于DNS

    基于Kubernetes API

    作者:闫世成

    出处:http://cnblogs.com/yanshicheng

    联系:yans121@sina.com

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题或建议,请多多赐教,非常感谢。
  • 相关阅读:
    Android NDK pthreads详细使用
    Android 音视频深入 十七 FFmpeg 获取RTMP流保存为flv (附源码下载)
    Android事件分发机制
    Gradle之FTP文件下载
    JVM内存回收机制
    Git如何把本地代码推送到远程仓库
    Android 进程间通讯方式
    微信小程序之文件系统初探
    时间选择器组件之关于table走过的弯路
    腾讯地图JavaScript API GL实现文本标记的碰撞避让
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/15194319.html
Copyright © 2011-2022 走看看