前言
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
然后查看控制点,发现我们新配置的节点已经被动态的加载过来了。
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: