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最后定义的检查。