Consul Health Check

Agent的一個重要角色是管理系統級和應用級的健康檢查。git

健康檢查能夠經過在配置文件中定義或是經過HTTP接口添加。github

Script + Interval

腳本檢查機制經過執行程序外的腳本。腳本輸出限制爲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

  • Exit code 0 - Check is passing
  • Exit code 1 - Check is warning
  • Any other code - Check is failing
{
  "check": {
    "id": "mem-util",
    "name": "Memory utilization",
    "args": ["/usr/local/bin/check_mem.py", "-limit", "256MB"],
    "interval": "10s",
    "timeout": "1s"
  }
}
複製代碼

HTTP + Interval

HTTP檢查機制是經過向指定的URL發起GET請求,服務的狀態依賴HTTP請求的狀態碼:shell

  • 2xx - passing
  • 429 - Too ManyRequests is a warning
  • other - failure

與使用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 + Interval

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"
  }
}
複製代碼

Time to Live (TTL)

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 + Interval

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 + Interval

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"
  }
}
複製代碼

Alias

別名檢查機制是依賴另外一個已註冊節點或是服務的運行狀態反應自生的狀態。

{
  "check": {
    "id": "web-alias",
    "alias_service": "web"
  }
}
複製代碼

全部類型的健康檢查必須提供nameidnotes字段可選。每一個agent的ID必須是惟一的,consul只會註冊具備ID最後定義的檢查。

相關文章
相關標籤/搜索