Agent的一個重要角色是管理系統級和應用級的健康檢查。git
健康檢查能夠經過在配置文件中定義或是經過HTTP接口添加。github
腳本檢查機制經過執行程序外的腳本。腳本輸出限制爲4KB,超過的將被截取。檢查腳本會被配置一個超時時間(缺省爲30s)。當檢查超時後Consul會強制殺掉腳本或是任何子進程。Consul 0.9.0後,script checks
不在是缺省的檢查機制,能夠經過配置enable_local_script_checks
或是enable_script_checks
啓用:web
enable_local_script_checks
: enable script checks defined in local config files. Script checks defined via the HTTP API will not be allowed.enable_script_checks
: enable script checks regardless of how they are defined.檢查腳本能夠執行任何操做來肯定檢查的狀態,但惟一限制的是退出必須遵照:docker
{
"check": {
"id": "mem-util",
"name": "Memory utilization",
"args": ["/usr/local/bin/check_mem.py", "-limit", "256MB"],
"interval": "10s",
"timeout": "1s"
}
}
複製代碼
HTTP檢查機制是經過向指定的URL發起GET
請求,服務的狀態依賴HTTP請求的狀態碼:shell
與使用Curl或是外部進程檢查的健康檢查機制相比,HTTP檢查機制應該是首選的。默認檢查請求是GET
請求,能夠經過添加參數到請求頭。另外,請求的超時時間爲10s,請求的輸出大小限制爲4KB,超過的同一會被截取。HTTP請求正常TLS。默認須要配置TLS證書,提供經過配置tls_skip_verify
爲true跳過檢查。json
{
"check": {
"id": "api",
"name": "HTTP API on port 5000",
"http": "https://localhost:5000/health",
"tls_skip_verify": false,
"method": "POST",
"header": {"x-foo":["bar", "baz"]},
"interval": "10s",
"timeout": "1s"
}
}
複製代碼
TCP檢查機制經過與指定的IP/hostname + 端口監理TCP鏈接,若是hostname沒有指定缺省訪問"localhost"。服務的狀態經過鏈接是否創建成功來判斷。相比外部腳本檢查,更建議選擇TCP檢查機制。能夠經過配置timeout
配置TCP鏈接創建超時限制。api
{
"check": {
"id": "ssh",
"name": "SSH TCP on port 22",
"tcp": "localhost:22",
"interval": "10s",
"timeout": "1s"
}
}
複製代碼
TTL檢查機制保留了給定的TTL(生命週期)的最新的狀態,這些狀態必須經過HTTP接口定時進行更新。若是外部系統在給定的TTL中更新狀態失敗,檢查檢查也表示爲失敗。這種機制在概念上相似於a dead man's switch
,依賴應用主動上報他本身的監控狀態。bash
{
"check": {
"id": "web-app",
"name": "Web App Status",
"notes": "Web app does a curl internally every 10 seconds",
"ttl": "30s"
}
}
複製代碼
Docker檢查機制(能夠理解爲容器的監控檢查)Docker機制依賴觸發一同被打包進容器的外部應用程序。這些應用能夠在容器外經過Docker Exec API
進行觸發。經過配置enable_script_checks
使用Docker健康檢查機制。app
{
"check": {
"id": "mem-util",
"name": "Memory utilization",
"docker_container_id": "f972c95ebf0e",
"shell": "/bin/bash",
"args": ["/usr/local/bin/check_mem.py"],
"interval": "10s"
}
}
複製代碼
gRPC檢查機制須要應用實現了gRPC的標準。gRPC health checking protocolless
{
"check": {
"id": "mem-util",
"name": "Service health status",
"grpc": "127.0.0.1:12345",
"grpc_use_tls": true,
"interval": "10s"
}
}
複製代碼
別名檢查機制是依賴另外一個已註冊節點或是服務的運行狀態反應自生的狀態。
{
"check": {
"id": "web-alias",
"alias_service": "web"
}
}
複製代碼
全部類型的健康檢查必須提供name
,id
和notes
字段可選。每一個agent的ID必須是惟一的,consul只會註冊具備ID最後定義的檢查。