- 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算成功
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}'
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
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