使用Prometheus进行服务发现
背景- Background
在添加Prometheus的监视目标时,必须先停止Prometheus的服务,然后添加监视目标。这一过程很麻烦。当我在寻找是否有其他方法时,发现可以使用基于文件的服务发现。以下是我尝试的方法的总结。
Service Discovery指的是服务发现。
由于在Sakura Internet公司的技术博客上有一个简洁明了的解释,我们引用了以下的说明:
https://knowledge.sakura.ad.jp/20489/
在许多云端和容器集群环境中,服务网格的诞生背景之一是由于无法事先知道分配给运行服务的IP地址的限制。因此,需要通过某种方式在服务运行后了解其他服务的IP地址以访问它们(这被称为”服务发现”等)。
基于文件的服务发现是什么?
Prometheus的官方文档中包含以下描述:
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#file_sd_config
文件为基础的服务发现提供了一个更通用的方式来配置静态目标,并作为插入自定义服务发现机制的接口。
对于基于文件的服务发现,它提供了一种更常见的方式,即通过设置可扩展的服务发现机制的接口,来管理静态目标和服务。
环境
以下是本次使用的各个服务的版本和文件结构。
# 各バージョン
Prometheus: 2.23.0
node-exporter: 1.0.1
docker-compose: 2.2
# ファイル構成
docker-compose.yaml
prometheus
-- prometheus.yaml
-- service_discovery.yaml
建立
使用以下的docker-compose环境配置Prometheus和node-exporter容器。为了在之后确认服务发现,准备node-exporter1和node-exporter2。同时,也创建docker网络–subnet=172.19.0.0/19 prom_net作为准备。
version: '2.2'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus:/etc/prometheus
command: "--config.file=/etc/prometheus/prometheus.yaml"
ports:
- 9090:9090
restart: "no"
networks:
prom_net:
ipv4_address: 172.19.0.2
node_exporter1:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter1
ports:
- 9100:9100
networks:
prom_net:
ipv4_address: 172.19.0.3
node_exporter2:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter2
ports:
- 9100:9100
networks:
prom_net:
ipv4_address: 172.19.0.4
Prometheus的配置文件如下所示。在file_sd_configs中定义一个名为service_discovery.yaml的配置文件作为服务发现的配置。
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'node-exporter'
file_sd_configs:
- files:
- service_discovery.yaml
下面是刚刚定义的service_dicovery.yaml文件的内容。这次我们只将node-exporter1作为目标。
- targets:
- 172.19.0.3:9100
labels:
subsystem: "node-exporter1"
结果 (jié guǒ)
- targets:
- 172.19.0.3:9100
labels:
subsystem: "node-exporter1"
# 新規で追加
- targets:
- 172.19.0.4:9100
labels:
subsystem: "node-exporter2"
感受
只需更新service_discovery.yaml,即可在保持Prometheus运行的同时添加监视目标。除了基于文件的服务发现,还可以使用Consul等方法,所以我想在有时间的时候尝试一下。