Prometheus之Consul服务发现

  • Docker方式启动
docker run -d  -p 8500:8500/tcp --name consul  consul agent -data-dir=/consul/data -config-dir=/consul/config -dev -ui -client 0.0.0.0  consul:latest
  • K8S启动方式
cat <<END> consul.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: consul
spec:
  replicas: 1
  selector:
    matchLabels:
      app: consul-example
  template:
    metadata:
      labels:
        app: consul-example
    spec:
      containers:
      - name: example
        image: consul:latest
        command:
          - '/bin/sh'
          - '-c'
          - |
            consul agent -data-dir=/consul/data -config-dir=/consul/config -dev -ui -client 0.0.0.0 
        securityContext:
          privileged: true
          runAsUser: 0
---
apiVersion: v1
kind: Service
metadata:
  name: consul
spec:
 ports:
 - port: 8500
   targetPort: 8500
   nodePort: 30100
 type: NodePort
 selector:
   app: consul-example
END

可以访问ui算成功
在这里插入图片描述

  • prometheus服务端需要添加以下
    consul_sd_configs:
     - server: "10.0.5.75:30100"
       tags:
       - "prometheus"
       refresh_interval: 10s
  - job_name: nodes
    consul_sd_configs:
    - server: "10.0.5.75:30100"
      tags:
      - "nodes"    <<<<-----tags
      services: []
      refresh_interval: 10s
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        target_label: 'environment'
        regex: '(.*)_discover'
        replacement:   '${1}'
  • 注册1
curl -X PUT -d '{
    "id": "node-12.5.141.9",
    "name": "node-12.5.141.9",
    "address": "12.5.141.9",
    "port": 9100,
    "tags": [
        "nodes"  <<<<-----tags对应服务端的
    ],
    "checks": [
        {
            "http": "http://12.1.11.9:9100/metrics",
            "interval": "5s"
        }
    ]
}' http://10.0.5.75:30100/v1/agent/service/register
  • 注册2

curl -X PUT -d '{
    "id": "node-10.0.1.5",
    "name": "node-10.0.1.5",
    "address": "10.0.1.5",
    "port": 9100,
    "tags": [
        "nodes"
    ],
    "checks": [
        {
            "http": "http://10.0.1.5:9100/metrics",
            "interval": "5s"
        }
    ]
}' http://10.0.5.75:30100/v1/agent/service/register

注销

curl -X PUT http://10.0.5.75:30100/v1/agent/service/deregister/加上id或者name 如下:
curl -X PUT http://10.0.5.75:30100/v1/agent/service/deregister/node-10.0.1.5

在这里插入图片描述

批量注册

在这里插入图片描述

cat<<END>regis
#!/bin/bash 
all_IP=`cat  /opt/ip`
name=bbc
port=9100
for  I  in $all_IP
do
       echo `curl -X PUT -d '{"id": "'$I'","name": "'$name'","address": "'$I'","port": '$port',"tags": ["bbc"], "checks": [{"http": "http://'$I':'$port'/","interval": "5s"}]}'     http://10.0.5.75:30100/v1/agent/service/register >>11.txt` 
done

在这里插入图片描述

批量删除

cat <<END>xx.sh
#!/bin/bash

for i in `cat /opt/ip` 
do 
echo $i
curl --request PUT http://10.0.5.75:30100/v1/agent/service/deregister/$i
done
END

在这里插入图片描述
定义多个组

    consul_sd_configs:
     - server: "10.0.5.75:30100"
       tags:
       - "prometheus"
       refresh_interval: 10s
  - job_name: test
    consul_sd_configs:
    - server: "10.0.5.75:30100"
      tags:
      - "test"
      services: []
      refresh_interval: 10s

  - job_name: nodes
    consul_sd_configs:
    - server: "10.0.5.75:30100"
      tags:
      - "nodes"
      services: ["bbc"]
      refresh_interval: 10s

  - job_name: node-release
    consul_sd_configs:
    - server: "10.0.5.75:30100"
      tags:
      - "node-release"
      services: []
      refresh_interval: 10s

可以使用的元标签

__meta_consul_address:目标的地址
__meta_consul_dc:目标的数据中心名称
__meta_consul_tagged_address_<key>:每个节点标记目标的地址键值
__meta_consul_metadata_<key>:目标的每个节点元数据键值
__meta_consul_node:为目标定义的节点名称
__meta_consul_service_address:目标的服务地址
__meta_consul_service_id:目标的服务ID
__meta_consul_service_metadata_<key>:目标的每个服务元数据键值
__meta_consul_service_port:目标的服务端口
__meta_consul_service:目标所属服务的名称
__meta_consul_tags:标记分隔符连接的目标的标记列表

使用relabel将consul的元标签重写便于查看

  - job_name: 'consul'
    consul_sd_configs:
      - server: '192.168.16.173:8900'
        services: []  #匹配所有service
    relabel_configs:
      - source_labels: [__meta_consul_service] #service 源标签
        regex: "consul"  #匹配为"consul" 的service
        action: drop       # 执行的动作
      - source_labels: [__meta_consul_service]  # 将service 的label重写为appname
        target_label: appname
      - source_labels: [__meta_consul_service_address]
        target_label: instance
      - source_labels: [__meta_consul_tags]
        target_label:  job

最后热加载

curl -X POST http://127.0.0.1:9090/-/reload

猜你喜欢

转载自blog.csdn.net/weixin_42562106/article/details/115067508