运维监控系列(18)-Prometheus服务发现机制及基于文件服务发案例

前言

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

对于小型的系统环境来说,通过static_configs指定各Target便能解决问题,这也是最简单的配置方法,每个Target用一个网络端点(ip:port)进行标识。

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

Prometheus中的服务发现

在Prometheus 的配置中,一个最重要的概念就是数据源 target,而数据源的配置主要分为静态配置和动态发现, 大致为以下几类:

配置项 描述
static_configs 静态服务发现
dns_sd_configs DNS 服务发现
file_sd_configs 文件服务发现
consul_sd_configs Consul 服务发现
serverset_sd_configs Serverset 服务发现
nerve_sd_configs Nerve 服务发现
marathon_sd_configs Marathon 服务发现
kubernetes_sd_configs Kubernetes 服务发现
gce_sd_configs GCE 服务发现
ec2_sd_configs EC2 服务发现
openstack_sd_configs OpenStack 服务发现
azure_sd_configs Azure 服务发现
triton_sd_configs Triton 服务发现

基于文件的服务发现

Prometheus 提供了多种服务发现选项来发现抓取目标,包括Kubernetes、Consul等。如果您需要使用当前不受支持的服务发现系统,Prometheus基于文件的服务发现机制可能会为您的用例提供最佳服务,该机制使您能够在 JSON 文件中列出抓取目标(以及有关这些目标的元数据)。

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

基于文件服务发案例演示

1. 添加文件服务发现配置

之前我们监控了多台Linux服务器,使用的是静态配置,接下来我们改造为基于文件服务发现加载target。
 

之前我们的配置是这样的:

  # 服务器 监控 
  - job_name: nodes
    static_configs:
    - targets: ['192.168.12.5:9109','192.168.12.4:9109']

需要改为如下配置,此配置指定有一个名为nodes(用于节点导出器)的作业,该作业从files-sd/nodes.yml文件中检索节点导出器实例的主机和端口信息。

scrape_configs:
- job_name: 'nodes'
  # 文件服务发现
  file_sd_configs:
  - files:
    # 文件服务发现配置文件路径
    - 'files-sd/nodes.yml'
    # 每隔1分钟重新加载一次文件中定义的Targets,默认为5m;
    refresh_interval: 1m

 

然后在Prometheus的主目录下创建一个files-sd文件夹及nodes.yml文件,用来存放服务发现文件,并添加节点信息。配置指定有一个nodes具有两个目标的任务。

文件可使用JSON和YAML格式,它含有定义的Target列表,以及可选的标签信息。

[root@node8 prometheus]# cd files-sd/
[root@node8 files-sd]# vim nodes.yml
# 添加内容
- targets:
  - 192.168.12.4:9109
  labels:
    app: node-exporter223
- targets:
  - 192.168.12.5:9109
  labels:
    app: node-exporter245

因为我使用的是docker-compose安装,所以还需要将这个配置映射到容器内部。

    volumes:
      - ./prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus/data:/prometheus
      - ./prometheus/files-sd/:/etc/prometheus/files-sd/

最后重启docker

[root@node8 ops]# docker-compose up -d 

查看控制台,发现这些监控target已经被加载进来了。
 

2. 测试

当使用Prometheus 的基于文件的服务发现机制时,Prometheus 实例会监听文件的变化并自动更新抓取目标列表,而无需实例重启。

接下来,我们在另外一台服务器装node_exporter,安装文档

然后在nodes.json文件中,添加我们刚配置的target。

[root@node8245 ops]# vim prometheus/files-sd/nodes.yml
# 加入一个新的targets
- targets:
  - 192.168.8.6:9109
  labels:
    app: node-exporter246

然后查看控制点,发现我们新配置的节点已经被动态的加载过来了。
 

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: