基于文件的服务发现是最通用的方式。这种方式不需要依赖于任何的平台或者第三方服务。对于Prometheus而言也不可能支持所有的平台或者环境。通过基于文件的服务发现方式下,Prometheus会定时从文件中读取最新的Target信息,可以通过任意的方式将监控Target的信息写入即可。
Prometheus 可以通过JSON或者YAML格式的文件,定义所有的监控目标。下面我是通过yaml的文件格式来进行配置监控。在添加实例的时候添加了一些额外的标签信息。如: env、service、group等,实例中采集到的样本信息将包含这些标签信息,从而可以通过该标签按照环境对数据进行统计。
cat prometheus.yml
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
scrape_timeout: 10s
# scrape_timeout is set to the global default (10s).
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: 'kxl_docker'
file_sd_configs:
- files:
- /opt/prometheus/sd_config/docker.yml
refresh_interval: 5s
- job_name: 'kxl_vm'
file_sd_configs:
- files:
- /opt/prometheus/sd_config/vm.yml
refresh_interval: 5s
- job_name: 'kxl_mysql'
file_sd_configs:
- files:
- /opt/prometheus/sd_config/mysql.yml
refresh_interval: 5s
scrape_configs 这里我定义了三组,分别是监控docker、vm、mysql的,每一个组对应一个yml文件。
对应的服务到对应的文件进行增加即可。还可以增加(zk、es、ng、redis)等服务。
创建被扫描的文件
mkdir -p /opt/prometheus/sd_config && cd /opt/prometheus/sd_config
- docker.yml ```yaml
labels: service: docker env: test group: docker targets:
- 172.21.1.30:8080 ```
vm.yml ```yaml
labels: env: test group: linux_node service: vm targets:
- 172.21.1.30:9100
- 172.21.1.52:9100
- 172.21.1.52:9100 ```
mysql.yaml ```yaml
labels: service: mysql env: test group: mysql targets:
- 172.21.1.30:9104
labels: service: mysql env: dev group: mysql targets:
- 172.21.1.52:9104
```
在Prometheus UI的Targets下就可以看到当前定义的yml文件中动态获取到实例信息以及监控任务的采集状态,同时在Labels列下会包含用户添加的自定义标签:
- 172.21.1.52:9104
```
在Prometheus UI的Targets下就可以看到当前定义的yml文件中动态获取到实例信息以及监控任务的采集状态,同时在Labels列下会包含用户添加的自定义标签:
在Prometheus UI的service-discovery下可以看到我们定义的job类型