Prometheus基于文件的服务发现配置(file_sd_configs)
解决的问题
之前手动配置了很多个traget
- redis
- mysql
- blackbox
- pushgateway
- 手动配置维护成本高,还容易出错
基于文件的服务发现配置
- 文档地址
- 将配置写在yaml/json的文件当中,通过Prometheus的主配置文件引入,实现在Prometheus主配置文件之外的文件当中动态的添加或删除对应的监控项
特点
- 基于文件的服务发现提供了一种配置静态目标的更通用的方法
- 并充当了插入自定义服务发现机制的接口。
- 摆脱对特定服务发现源的依赖
- 只要能正确给出 json/yaml文件即可
- 和服务树的最好匹配方案
yaml文件类型
- yaml
YAML yaml - targets: [ - '<host>' ] labels: [ <labelname>: <labelvalue> ... ]
- 举例
- targets:
- 192.168.101.222:9100
- 192.168.101.223:9100
labels:
account: "aliyun-01"
region: "ap-south-1"
json文件类型
json [ { "targets": [ "<host>", ... ], "labels": { "<labelname>": "<labelvalue>", ... } }, ... ]
- 举例
[
{
"targets": [
"192.168.101.222:9100"
],
"labels": {
"account": "aliyun-01",
"region": "ap-south-1",
"env": "prod",
"group": "inf",
"project": "monitor",
"stree_gpa": "inf.monitor.prometheus"
}
},
{
"targets": [
"192.168.101.223:9100"
],
"labels": {
"account": "aliyun-02",
"region": "ap-south-2",
"env": "prod",
"group": "inf",
"project": "middleware",
"stree_gpa": "inf.middleware.kafka"
}
}
]
下面来解读一下
- targets 是一组实例地址的列表
- labels 是这组实例的标签,应用到列表中所有实例
- 如果想每个实例不同的标签,可以将targets列表保留一个实例即可
标签可以自定义,下面举几个例子
- account 代表公有云账户,多账户情况
- region 代表区域
- env 代表所属环境 prod代表生产,pre代表预发,test代表测试
- group代表业务大组
- project 代表项目
- stree_gpa 代表服务树三级标签
- 那么prometheus在采集对应target时就会将对应标签打入其metrics中
- 为后续我们按照标签过滤提供方便
配置举例
- files 代表 文件路径 支持通配符
- refresh_interval 代表 文件刷新间隔
- job_name: 'node_exporter'
scrape_interval: 30s
scrape_timeout: 10s
metrics_path: /metrics
scheme: http
honor_timestamps: false
# 配置文件发现配置
file_sd_configs:
- files:
- /opt/app/prometheus/sd/node_exporter.json
# 刷新的频率
refresh_interval: 5m
改造为服务发现类型
- 将 blackbox-http 和 node_exporter 改为文件发现
- prometheus 配置
- job_name: 'blackbox-http'
metrics_path: /probe
# 传入的参数
params:
module: [http_2xx] # Look for a HTTP 200 response. 查看http_2xx的响应
# 抓取间隔
scrape_interval: 15s
# 抓取超时
scrape_timeout: 10s
scheme: http
# 是否采用数据源提供的时间戳作为时间戳
honor_timestamps: false
# 原来是static_config,改为文件发现
file_sd_configs:
- files:
- /opt/app/prometheus/sd/blackbox_http.json
refresh_interval: 2m
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.101.222:9115
- job_name: 'node_exporter'
# metrics的path(metrics_path配置项) 注意不都是/metrics
# 传入的参数
scrape_interval: 30s
scrape_timeout: 10s
scheme: http
honor_timestamps: false
file_sd_configs:
- files:
- /opt/app/prometheus/sd/node_exporter.json
refresh_interval: 2m
- 创建sd目录
mkdir -pv /opt/app/prometheus/sd/
- 写入json文件
cat <<EOF > /opt/app/prometheus/sd/node_exporter.json
[
{
"targets": [
"192.168.101.222:9100"
],
"labels": {
"name": "prome-master01",
"account": "aliyun-01",
"region": "ap-south-1",
"env": "prod",
"group": "inf",
"project": "monitor",
"stree_gpa": "inf.monitor.prometheus"
}
},
{
"targets": [
"192.168.101.223:9100"
],
"labels": {
"name": "prome-node01",
"account": "aliyun-02",
"region": "ap-south-2",
"env": "prod",
"group": "inf",
"project": "middleware",
"stree_gpa": "inf.middleware.kafka"
}
}
]
EOF
cat <<EOF > /opt/app/prometheus/sd/blackbox_http.json
[
{
"targets": [
"192.168.101.222:9115",
"http://prometheus.io",
"http://www.baidu.com",
"https://www.baidu.com"
]
}
]
EOF
- reload prometheus
- 观察target页面 和 sd结果页面
- 修改文件 blackbox_http.json 新增 https://github.com/ 的探测,重新观察target页面 和 sd结果页面,会发现新添加的检测站点也添加到了页面上。
cat <<EOF > /opt/app/prometheus/sd/blackbox_http.json
[
{
"targets": [
"192.168.101.222:9115",
"http://prometheus.io",
"http://www.baidu.com",
"https://www.baidu.com",
"https://github.com/"
]
}
]
EOF
curl -X POST http://localhost:9090/-/reload
版权申明
本文系作者 @Tis-FYM 原创发布在Tis-FYI站点。未经许可,禁止转载。
评论