其他參考:https://www.cnblogs.com/duanxz/p/9660766.html
原文:https://www.douban.com/note/629645759/
自己筆記----start------
curl -s 127.0.0.1:8500/v1/catalog/services | jq . { "xxx-common-api": [], "xxx-api": [], "xxx-agent": [], "xxx-backer": [ "backer-172.16.100.211", "backer-172.16.100.212" ], ...... }
備注,雖然上面的xxx-common-api返回為空,但是使用下面請求的時候還是會返回詳細數據
curl -s 127.0.0.1:8500/v1/catalog/service/xxx-common-api | jq .
返回結果如下
[ { "ModifyIndex": 6637041, "CreateIndex": 6637041, "ServiceEnableTagOverride": false, "ServicePort": 9088, "ServiceAddress": "172.16.33.55", "ServiceTags": [], "ID": "76200401-8e28-082c-f128-6d1b322d372a", "Node": "bj_e_online_java_consul_11", "Address": "172.16.33.55", "Datacenter": "xxx-api-online", "TaggedAddresses": { "wan": "172.16.33.55", "lan": "172.16.33.55" }, "NodeMeta": { "consul-network-segment": "" }, "ServiceID": "XxxAgent", "ServiceName": "XxxAgent" }, ...... ]
可以添加passing參數,只查看健康的示例,請求方式如下
curl -s 127.0.0.1:8500/v1/catalog/service/xxx-common-api?passing | jq .
使用如下命令過濾 consul members 中Status為failed的實例
curl -s http://localhost:8500/v1/health/state/critical | jq .
自己筆記----end-------
注意:使用API需嚴格控制url末尾有無斜杠
服務增減測試,API和reload優先級測試
1、手動增減conf.d/*.json,然后操作consul reload,會增減對應的服務
2、通過HTTP API增減服務后,執行consul reload,會還原成conf.d/*.json的服務配置,之前HTTP API的增減服務操作會被覆蓋,也就是API會導致json文件和內存中的服務信息不一致。(尚未發現consul提供將當前內存中的服務配置信息dump出.json文件的功能)
實踐結論1:consul reload會以conf.d/*.json為准去同步當前consul內存中當前機器注冊的服務。
使用consul建議使用conf.d/*.json文件的方式增減服務,而非API,這樣有落地的json文件多一份保障。
實踐結論2:
Node名稱唯一,通過修改json然后consul reload方式增加節點時會取當前機器的(內網)IP,具體如何區別的內外外網未知。
通過API注冊服務時,json參數Node和Address必填,會使用Address覆蓋掉Node當前的Address
實踐結論3:
consul reload不會reload配置文件consul.json,只reload conf.d/*.json
實踐結論4:
若干agent server會保存同樣的數據到設置的data目錄,agent client也會保存一部分數據至data目錄,重啟consul agent(server或client)的時候,會重新加載data目錄的信息,猜測client存放的是有版本號的服務信息,並且重啟時會從server端同步最新的數據。
consul HTTP API KV篇
0、查看當前集群所有服務
curl -s 127.0.0.1:8500/v1/catalog/services | python -m json.tool
0.5、查看本機配置
curl -s 127.0.0.1:8500/v1/agent/self | python -m json.tool
1、查看服務狀態
curl -s http://127.0.0.1:8500/v1/catalog/service/prometheus-pushgateway | python -m json.tool
1.5、查看本機服務
curl -s 127.0.0.1:8500/v1/agent/services | python -m json.tool
2、查看不健康的服務
curl -s http://localhost:8500/v1/health/state/critical | python -m json.tool
3、添加KV(值為test,url末尾的斜杠會算作key的一部分)
curl -X PUT-d 'test' http://localhost:8500/v1/kv/key1
curl -X PUT-d 'test' http://localhost:8500/v1/kv/key1/
4、查看當前所有的KV
curl -s http://localhost:8500/v1/kv/?recurse | python -m json.tool
5、查看單個KV
curl -s http://localhost:8500/v1/kv/petanne/key1 | python -m json.tool
6、查看指定路徑下的KV(url末尾的斜杠會算作key的一部分,可以理解為以petanne開頭的所有key)
curl-s http://localhost:8500/v1/kv/petanne?recurse | python -m json.tool
curl-s http://localhost:8500/v1/kv/petanne/?recurse | python -m json.tool
7、刪除單個KV
curl -X DELETE http://localhost:8500/v1/kv/petanne
8、刪除指定路徑下的KV(末尾斜杠同查看)
curl -X DELETE http://localhost:8500/v1/kv/petanne?recurse
9、修改單個KV
curl -X PUT -d 'newval' http://localhost:8500/v1/kv/petanne/key1
curl -X PUT -d 'newval' http://localhost:8500/v1/kv/petanne/key1?cas=5820778
(cas == ModifyIndex 才能修改成功,防止多人同時修改時沖突)
10、查看KV(查看比指定index大的ModifyIndex的該key的值,最多等待5秒,否則返回當前最新值)
curl "http://localhost:8500/v1/kv/petanne/key2?index=5820781&wait=5s"
agent篇
agent endpoints用來和本地agent進行交互,一般用來服務注冊和檢查注冊,支持以下接口
/v1/agent/checks : 返回本地agent注冊的所有檢查(包括配置文件和HTTP接口)
/v1/agent/services : 返回本地agent注冊的所有 服務
/v1/agent/members : 返回agent在集群的gossip pool中看到的成員
/v1/agent/self : 返回本地agent的配置和成員信息
/v1/agent/join/<address> : 觸發本地agent加入node
/v1/agent/force-leave/<node>>: 強制刪除node
/v1/agent/check/register : 在本地agent增加一個檢查項,使用PUT方法傳輸一個json格式的數據
/v1/agent/check/deregister/<checkID> : 注銷一個本地agent的檢查項
/v1/agent/check/pass/<checkID> : 設置一個本地檢查項的狀態為passing
/v1/agent/check/warn/<checkID> : 設置一個本地檢查項的狀態為warning
/v1/agent/check/fail/<checkID> : 設置一個本地檢查項的狀態為critical
/v1/agent/service/register : 在本地agent增加一個新的服務項,使用PUT方法傳輸一個json格式的數據
/v1/agent/service/deregister/<serviceID> : 注銷一個本地agent的服務項
catalog篇
catalog endpoints用來注冊/注銷nodes、services、checks
/v1/catalog/register : Registers a new node, service, or check
/v1/catalog/deregister : Deregisters a node, service, or check
/v1/catalog/datacenters : Lists known datacenters
/v1/catalog/nodes : Lists nodes in a given DC
/v1/catalog/services : Lists services in a given DC
/v1/catalog/service/<service> : Lists the nodes in a given service
/v1/catalog/node/<node> : Lists the services provided by a node
health篇
health endpoints用來查詢健康狀況相關信息,該功能從catalog中單獨分離出來
/v1/healt/node/<node>: 返回node所定義的檢查,可用參數?dc=
/v1/health/checks/<service>: 返回和服務相關聯的檢查,可用參數?dc=
/v1/health/service/<service>: 返回給定datacenter中給定node中service
/v1/health/state/<state>: 返回給定datacenter中指定狀態的服務,state可以是"any", "unknown", "passing", "warning", or "critical",可用參數?dc=
session篇
session endpoints用來create、update、destory、query sessions
/v1/session/create: Creates a new session
/v1/session/destroy/<session>: Destroys a given session
/v1/session/info/<session>: Queries a given session
/v1/session/node/<node>: Lists sessions belonging to a node
/v1/session/list: Lists all the active sessions
acl篇
acl endpoints用來create、update、destory、query acl
/v1/acl/create: Creates a new token with policy
/v1/acl/update: Update the policy of a token
/v1/acl/destroy/<id>: Destroys a given token
/v1/acl/info/<id>: Queries the policy of a given token
/v1/acl/clone/<id>: Creates a new token by cloning an existing token
/v1/acl/list: Lists all the active tokens
event篇
event endpoints用來fire新的events、查詢已有的events
/v1/event/fire/<name>: 觸發一個新的event,用戶event需要name和其他可選的參數,使用PUT方法
/v1/event/list: 返回agent知道的events
status篇
status endpoints用來或者consul 集群的信息
/v1/status/leader : 返回當前集群的Raft leader
/v1/status/peers : 返回當前集群中同事