Loading

Prometheus基于consul服务发现

安装consul

wget https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip
unzip consul_1.5.3_linux_amd64.zip
./consul agent -dev

  或者

docker run --name consul -d -p 8500:8500 consul

  访问地址为: http://172.30.12.167:8500 

  添加测试注册服务,添加本机的node-exporter和另一台主机的cadvisor-exporter。

curl -X PUT -d '{"id": "node-exporter1","name": "node-exporter1-192.168.31.131","address": "192.168.31.131","port": 9100,"tags": ["test"],"checks": [{"http": "http://192.168.31.131:9100/metrics", "interval": "5s"}]}'  http://192.168.31.131:8500/v1/agent/service/register
curl -X PUT -d '{"id": "cadvisor-exporter1","name": "cadvisor-exporter1-192.168.31.158","address": "192.168.31.158","port": 9200,"tags": ["test1"],"checks": [{"http": "http://192.168.31.158:9200/metrics", "interval": "5s"}]}'  http://192.168.31.131:8500/v1/agent/service/register

  注销服务,如果不需要继续监控注册到consul的某个服务,如node-exporter,通过如下命令删除

#curl -X PUT http://192.168.31.131:8500/v1/agent/service/deregister/node-exporter

  更新Prometheus配置

[root@localhost prometheus]# vim /home/prometheus/prometheus.yml
global:             # 全局设置,可以被覆盖
  scrape_interval: 15s                # 抓取采样数据的时间间隔,每15秒去被监控机上采样,即数据采集频率
  evaluation_interval: 15s         # 监控数据规则的评估频率,比如设置文件系统使用率>75%发出告警则每15秒执行一次该规则,进行文件系统检查
scrape_configs:              # 抓取配置
#服务发现
  - job_name: 'consul-prometheus'
    consul_sd_configs:                #基于服务发现类型
    - server: '192.168.31.131:8500'      #服务地址
    relabel_configs:
    - source_labels: [__meta_consul_tags]    #注意两个下划线"__"
      regex: .*,test,.*			#匹配__meta_consul_tags值包含test的数据(即tags=test)
      action: keep			#丢弃__meta_consul_tags值中不包含test的数据
热加载prometheus
#curl -X POST http://localhost:9090/-/reload	#热加载prometheus命令

  

 

 自定义标签信息

Prometheus 允许用户在采集任务设置中,通过 relabel_configs 来添加自定义的 Relabeling 的额过程,来对标签进行指定规则的重写。Target 以 __ 作为前置的标签是在系统内部使用的。Prometheus 内部做了一次标签重写处理,所以 instance 标签的内容刚好对应 Target 实例的 __address__ 值。

详细  relabel_configs  配置及说明可以参考 relabel_config 官网说明。

  • replace: 根据 regex 的配置匹配 source_labels 标签的值(注意:多个 source_label 的值会按照 separator 进行拼接),并且将匹配到的值写入到 target_label 当中,如果有多个匹配组,则可以使用 ${1}, ${2} 确定写入的内容。如果没匹配到任何内容则不对 target_label 进行重新, 默认为 replace。
  • keep: 丢弃 source_labels 的值中没有匹配到 regex 正则表达式内容的 Target 实例
  • drop: 丢弃 source_labels 的值中匹配到 regex 正则表达式内容的 Target 实例
  • hashmod: 将 target_label 设置为关联的 source_label 的哈希模块
  • labelmap: 根据 regex 去匹配 Target 实例所有标签的名称(注意是名称),并且将捕获到的内容作为为新的标签名称,regex 匹配到标签的的值作为新标签的值
  • labeldrop: 对 Target 标签进行过滤,会移除匹配过滤条件的所有标签
  • labelkeep: 对 Target 标签进行过滤,会移除不匹配过滤条件的所有标签

上面的 relabel_configs 配置作用为丢弃源标签中 __meta_consul_tags 不包含 test 标签的服务,__meta_consul_tags 对应到 Consul 服务中的值为 "tags": ["test"],默认 consul 服务是不带该标签的,从而实现过滤。

下面进行标签自定义,并分组。

  向 Meta Data 数据添加自定义标签信息

#vim /home/prometheus/config/consul-0.json
{
  "ID": "node-exporter",
  "Name": "node-exporter-192.168.31.131",
  "Tags": [
    "test"
  ],
  "Address": "192.168.31.131",
  "Port": 9100,
  "Meta": {
    "app": "spring-boot",
    "team": "appgroup",
    "project": "bigdata"
  },
  "EnableTagOverride": false,
  "Check": {
    "HTTP": "http://192.168.31.131:9100/metrics",
    "Interval": "10s"
  },
  "Weights": {
    "Passing": 10,
    "Warning": 1
  }
}

 

  注:该 Json 文件为要注册的服务信息,同时往 Meta 信息中添加了 app=spring-bootteam=appgroupproject=bigdata 三组标签,目的就是为了方便告警分组使用。

  注册服务

curl --request PUT --data @/home/prometheus/config/consul-0.json http://192.168.31.131:8500/v1/agent/service/register?replace-existing-checks=1

  

 

 

   更新Prometheus.yml

  - job_name: 'consul-prometheus'
    consul_sd_configs:          #基于服务发现类型
    - server: '192.168.31.131:8500'      #服务地址
    relabel_configs:
    - source_labels: [__meta_consul_tags]
      regex: .*,test,.*
      action: keep
    - regex: __meta_consul_service_metadata_(.+)
      action: labelmap

  

 

 将自动发现的服务进行分类

可以通过服务 Tag 来进行匹配来创建不同的类型 exporter 分组,通过给每个服务标记不同的 Tag,然后通过 relabel_configs 来进行匹配区分。

  注册服务

$ vim /home/prometheus/config/consul-1.json
{
  "ID": "node-exporter",
  "Name": "node-exporter-192.168.31.131",
  "Tags": [
    "node-exporter"
  ],
  "Address": "192.168.31.131",
  "Port": 9100,
  "Meta": {
    "app": "spring-boot",
    "team": "appgroup",
    "project": "bigdata"
  },
  "EnableTagOverride": false,
  "Check": {
    "HTTP": "http://192.168.31.131:9100/metrics",
    "Interval": "10s"
  },
  "Weights": {
    "Passing": 10,
    "Warning": 1
  }
}

# 更新注册服务
$ curl --request PUT --data @/home/prometheus/config/consul-1.json http://192.168.31.131:8500/v1/agent/service/register?replace-existing-checks=1

$ vim /home/prometheus/config/consul-2.json
{
  "ID": "cadvisor-exporter",
  "Name": "cadvisor-exporter-192.168.31.131",
  "Tags": [
    "cadvisor-exporter"
  ],
  "Address": "192.168.31.131",
  "Port": 9080,
  "Meta": {
    "app": "docker",
    "team": "cloudgroup",
    "project": "docker-service"
  },
  "EnableTagOverride": false,
  "Check": {
    "HTTP": "http://192.168.31.131:9080/metrics",
    "Interval": "10s"
  },
  "Weights": {
    "Passing": 10,
    "Warning": 1
  }
}

# 注册服务
$ curl --request PUT --data @/home/prometheus/config/consul-2.json http://192.168.31.131:8500/v1/agent/service/register?replace-existing-checks=1

  更新Prometheus.yml

[root@localhost prometheus]# vim /home/prometheus/prometheus.yml
#文件发现
  - job_name: 'file_ds'     #任务名 全局唯一
    file_sd_configs:        #基于文件发现配置
    - files: ['/etc/prometheus/config/*.yml']        #配置文件路径
      refresh_interval: 5s  #每五秒扫描刷新配置文件
#服务发现
  - job_name: 'consul-node-exporter'
    consul_sd_configs:							#基于服务发现类型
      - server: '192.168.31.131:8500'			#服务地址
        services: []  
    relabel_configs:
      - source_labels: [__meta_consul_tags]		#注意两个横杠"__"
        regex: .*node-exporter.*				#匹配__meta_consul_tags中值包含node-exporter的
        action: keep							#keep丢弃未匹配到regex中内容的数据
      - regex: __meta_consul_service_metadata_(.+)	#获取__meta_consul_service_metadata_的值(标签)
        action: labelmap							#将获取的值作为新的标签

  - job_name: 'consul-cadvisor-exproter'
    consul_sd_configs:
      - server: '192.168.31.131:8500'
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*cadvisor-exporter.*
        action: keep
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap

  

 

参考:Prometheus 通过 consul 实现自动服务发现_哎_小羊的博客-CSDN博客

posted @ 2021-08-03 09:03  萝卜青菜~  阅读(341)  评论(0编辑  收藏  举报