## 基于文件的服務發現
## 一、概述
定義一組資源”子“配置文件(json格式或者yaml格式),里面只存放需要采集的targets信息,此種方式可以被prometheus動態獲取到,而不需要重啟。
基于文件的服務發現僅僅略優于靜志配置的服務發現方式,它不依賴于任何平臺或第三方服務,因而也是最為簡單和通用的實現方式。
prometheus server 定期從文件中加載target 信息(prometheus-server pull指標發現機制-job_name 獲取要 pu 的對象target)文件它含有定義的target 列表,以及可選的標簽信息
### 1.1 原理
它讀取一組包含零個或多個<static_config>列表的文件,對所有定義的文件的變更通過磁盤監視被檢測到并立即應用,文件可以以YAML或JSON 格式提供。文件必須包含一個靜態配置的列表
文件內容也會在指定的刷新間隔時間內定期重新讀取。(在去讀取files的時候,可以去配置Refresh interval,如果沒有配置,這里有個默認值是5m鐘的,另外一個就是在配置文件自動發現的時候,支持通配符這樣一個模式。)
### 1.2 實驗描述
* 定義一個服務發現的目標文件targets.yml
<br><hr><br>
## 二、定義一個服務發現的目標文件targets.yml
### 2.1 創建targets.yaml文件
接下來我們來創建一個用于服務發現的目標文件,在與 prometheus.ym文件目錄下面創建個名為 targets/targets.yml的文件,內容
cd /data/docker-prometheus/prometheus
mkdir targets -p
vi targets/tragets.yml
把簡單的不需要額外參數的都放進去這個配置文件,如下圖所示

- targets: ['localhost:9090']
labels:
job: prometheus server
instance:prometheus Server
- targets: ['cadvisor:8080']
labels:
job: cadvisor
instance: Prometheus服務器所在docker
- targets: ['192.168.100.141:8079']
labels:
job: cadvisor
instance: Centos2服務器的所在docker
- targets: ['node-exporter:9100']
labels:
job: node-exporter
instance: Centos1服務器監控Linux
- targets: ['192.168.100.141:9100']
labels:
job: node-exporter
instance: Centos2服務器監控Linux
- targets: ['192.168.100.141:9121']
labels:
job: redis-exporter
instance: Centos2服務器監控redis
- targets: ['192.168.100.141:9216']
labels:
job: mongodb-exporter
instance: Centos2服務器監控mongodb
- targets: ['192.168.100.141:9104']
labels:
job: mysqld-exporter
instance: Centos2服務器監控mysql
- targets: ['192.168.100.141:9113']
labels:
job: nginx-exporter
instance: Centos2服務器監控nginx
- targets: ['192.168.100.141:9419']
labels:
job: rabbitmq-exporter
instance: Centos2服務器監控rabbitmq
- targets: ['192.168.100.141:9256']
labels:
job: process-exporter
instance: Centos2服務器監控進程
- targets: ['192.168.100.58:8182']
labels:
job: golang-exporter
instance: Centos3服務器監控go自定義程序
再修改prometheus配置
vim prometheus/prometheus.yml

- job_name: "file-sd-test"
file_sd_configs:
- refresh_interval: 10s
files:
- "targets/targets.yml"
保存后輸入命令更新:
curl -XPOST http://localhost:9090/-/reload
成功監聽

其他監控配置
#domain
vim prometheus/targets/domain.yml
- targets:
- 'qq.com'
- 'baidu.com'
#snmp
vim prometheus/targets/snmp.yml
- targets:
- 192.168.100.141
#blockerbox_http
vim prometheus/targets/blockerbox_http.yml
- targets:
- https://www.baidu.com
- https://wy.ldw520.top
#blockerbox_tcp
vim prometheus/targets/blockerbox_tcp.yml
- targets:
- 192.168.28.87:9090
- 192.168.100.141:9100
#blockerbox_icmp
vim prometheus/targets/blockerbox_icmp.yml
- targets:
- 192.168.100.87
- 192.168.100.141
再修改prometheus配置
vim prometheus/prometheus.yml

- job_name: "domain-exporter"
metrics_path: /probe
relabel_configs:
- source_labels: ['__address__']
target_label: __param_target
- source_labels: ['__param_target'] # 這里使用 __param_target 作為源標簽
target_label: instance # 設置目標標簽為 instance
- target_label: __address__
replacement: 192.168.100.141:9222 # 指向 Blackbox Exporter 的地址
file_sd_configs:
- refresh_interval: 10s
files:
- "targets/domain.yml"
- job_name: "snmp-exporter"
scrape_interval: 30s
scrape_timeout: 30s
file_sd_configs:
- refresh_interval: 10s
files:
- "targets/snmp.yml"
metrics_path: /snmp
params:
module: [if_mib]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.100.141:9116
- job_name: "blackbox_http"
metrics_path: /probe
params:
module: [http_2xx]
file_sd_configs:
- refresh_interval: 10s
files:
- "targets/blackbox_http.yml"
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox_exporter:9115
- job_name: "blackbox_tcp"
metrics_path: /probe
params:
module: [tcp_connect]
file_sd_configs:
- refresh_interval: 10s
files:
- "targets/blackbox_tcp.yml"
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox_exporter:9115
- job_name: "blackbox_icmp"
metrics_path: /probe
params:
module: [icmp]
file_sd_configs:
- refresh_interval: 10s
files:
- "targets/blackbox_icmp.yml"
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox_exporter:9115
保存后輸入命令更新:
curl -XPOST http://localhost:9090/-/reload
成功監聽

- Prometheus教程
- 一. dokcer 安裝
- 二. 安裝docker-compose
- 三. docker-compose安裝Prometheus
- 四. 配置grafana的數據源
- 五. Prometheus的Exporter
- 六. Prometheus的基本術語
- 七. 監控Linux
- 八. 監控redis和mongodb
- 九. 監控mysql數據庫
- 十. 監控go程序
- 十一. 監控nginx
- 十二. 監控消息隊列
- 十三. 監控docker
- 十四. 監控進程
- 十五. 域名監控
- 十六. SNMP監控
- 十七. 黑盒監控
- 十八. 自定義監控
- 十九. go實現自定義監控
- 二十. 服務發現概述
- 二十一. 基于文件的服務發現
- 二十二. 基于Consul的服務發現
- 二十三. relabeling機制