一、relabel_configs 中 hashmod 的用法
利用hash取模将监控数据源分片,降低单个prometheus的压力,提高prometheus的横向扩展能力
1.hashmode配置
scrape_configs: #采集数据机器的配置
- job_name: some_job
relabel_configs:
- source_labels: [__address__] #以address这个标签的值进行处理
modulus: 4 #对处理后的数据取模4
target_label: __tmp_hash #将取模的值赋值给__tmp_hash这个标签,这个是个临时标签
action: hashmod #执行hashmod处理操作
- source_labels: [__tmp_hash] #以__tmp_hash这个标签的值进行处理
regex: ^1$ #正则匹配为'1'的机器
action: keep #保留为'1'的机器,其余的都丢掉
配置的第一个 souce_labels 是对同一个任务抓取目标的 LabelSet 进行预处理,具体而言就是将抓取目标地址进行 hashmod, 并将 hashmod 的值存到一个自定义字段tmp_hash 中。配置的第二个 souce_labels 对预处理后的抓取目标进行筛选,只选取tmp_hash 值满足正则匹配的,例子中 hashmod != 1 将全部被忽略。
2.加入hashmode的prometheus-server配置文件
每个job中都应加入hashmode配置
global:
external_labels:
scrapeReplica: 2
scrape_interval: 1s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 1s # Evaluate rules every 15 seconds. The default is every 1 minute.
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093'] #填写alertmanager的IP和端口
rule_files:
- "/data/server/prometheus-2.25.2.linux-amd64/rules/alert.yml" #填写报警规则,触发后发给alertmanager
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090'] #静态配置,此处为收集本机prometheus的指标
- job_name: 'web'
consul_sd_configs: #基于consul的服务发现
- server: '192.168.13.29:8500' #consul节点的机器和端口
services: ["web"] #需要监听的consul的哪个services
- job_name: 'NodeExporter'
relabel_configs:
- source_labels: [__address__]
modulus: 4
target_label: __tmp_hash
action: hashmod
- source_labels: [__tmp_hash]
regex: ^1$
action: keep
static_configs:
- targets: ['localhost:9100']