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

 

posted @ 2021-08-31 17:43  闫世成  阅读(79)  评论(0编辑  收藏  举报