一、relabel_configs 中 hashmod 的用法

利用hash取模将监控数据源分片,降低单个prometheus的压力,提高prometheus的横向扩展能力

1.hashmode配置

  1. scrape_configs: #采集数据机器的配置
  2. - job_name: some_job
  3. relabel_configs:
  4. - source_labels: [__address__] #以address这个标签的值进行处理
  5. modulus: 4 #对处理后的数据取模4
  6. target_label: __tmp_hash #将取模的值赋值给__tmp_hash这个标签,这个是个临时标签
  7. action: hashmod #执行hashmod处理操作
  8. - source_labels: [__tmp_hash] #以__tmp_hash这个标签的值进行处理
  9. regex: ^1$ #正则匹配为'1'的机器
  10. action: keep #保留为'1'的机器,其余的都丢掉

配置的第一个 souce_labels 是对同一个任务抓取目标的 LabelSet 进行预处理,具体而言就是将抓取目标地址进行 hashmod, 并将 hashmod 的值存到一个自定义字段tmp_hash 中。配置的第二个 souce_labels 对预处理后的抓取目标进行筛选,只选取tmp_hash 值满足正则匹配的,例子中 hashmod != 1 将全部被忽略。

2.加入hashmode的prometheus-server配置文件

每个job中都应加入hashmode配置

  1. global:
  2. external_labels:
  3. scrapeReplica: 2
  4. scrape_interval: 1s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  5. evaluation_interval: 1s # Evaluate rules every 15 seconds. The default is every 1 minute.
  6. alerting:
  7. alertmanagers:
  8. - static_configs:
  9. - targets: ['localhost:9093'] #填写alertmanager的IP和端口
  10. rule_files:
  11. - "/data/server/prometheus-2.25.2.linux-amd64/rules/alert.yml" #填写报警规则,触发后发给alertmanager
  12. scrape_configs:
  13. - job_name: 'prometheus'
  14. static_configs:
  15. - targets: ['localhost:9090'] #静态配置,此处为收集本机prometheus的指标
  16. - job_name: 'web'
  17. consul_sd_configs: #基于consul的服务发现
  18. - server: '192.168.13.29:8500' #consul节点的机器和端口
  19. services: ["web"] #需要监听的consul的哪个services
  20. - job_name: 'NodeExporter'
  21. relabel_configs:
  22. - source_labels: [__address__]
  23. modulus: 4
  24. target_label: __tmp_hash
  25. action: hashmod
  26. - source_labels: [__tmp_hash]
  27. regex: ^1$
  28. action: keep
  29. static_configs:
  30. - targets: ['localhost:9100']