diff --git a/website/content/docs/discovery/checks.mdx b/website/content/docs/discovery/checks.mdx index d9a6986d33..02ef1c2846 100644 --- a/website/content/docs/discovery/checks.mdx +++ b/website/content/docs/discovery/checks.mdx @@ -142,6 +142,19 @@ There are several different kinds of checks: A script check: + + +```hcl +check = { + id = "mem-util" + name = "Memory utilization" + args = ["/usr/local/bin/check_mem.py", "-limit", "256MB"] + interval = "10s" + timeout = "1s" +} + +``` + ```json { "check": { @@ -154,8 +167,29 @@ A script check: } ``` + + A HTTP check: + + +```hcl +check = { + id = "api" + name = "HTTP API on port 5000" + http = "https://localhost:5000/health" + tls_server_name = "" + tls_skip_verify = false + method = "POST" + header = { + Content-Type = ["application/json"] + } + body = "{\"method\":\"health\"}" + interval = "10s" + timeout = "1s" +} +``` + ```json { "check": { @@ -173,8 +207,23 @@ A HTTP check: } ``` + + A TCP check: + + +```hcl +check = { + id = "ssh" + name = "SSH TCP on port 22" + tcp = "localhost:22" + interval = "10s" + timeout = "1s" +} + +``` + ```json { "check": { @@ -187,8 +236,21 @@ A TCP check: } ``` + + A TTL check: + + +```hcl +check = { + id = "web-app" + name = "Web App Status" + notes = "Web app does a curl internally every 10 seconds" + ttl = "30s" +} +``` + ```json { "check": { @@ -200,8 +262,23 @@ A TTL check: } ``` + + A Docker check: + + +```hcl +check = { + id = "mem-util" + name = "Memory utilization" + docker_container_id = "f972c95ebf0e" + shell = "/bin/bash" + args = ["/usr/local/bin/check_mem.py"] + interval = "10s" +} +``` + ```json { "check": { @@ -215,8 +292,22 @@ A Docker check: } ``` + + A gRPC check for the whole application: + + +```hcl +check = { + id = "mem-util" + name = "Service health status" + grpc = "127.0.0.1:12345" + grpc_use_tls = true + interval = "10s" +} +``` + ```json { "check": { @@ -229,8 +320,22 @@ A gRPC check for the whole application: } ``` + + A gRPC check for the specific `my_service` service: + + +```hcl +check = { + id = "mem-util" + name = "Service health status" + grpc = "127.0.0.1:12345/my_service" + grpc_use_tls = true + interval = "10s" +} +``` + ```json { "check": { @@ -243,8 +348,22 @@ A gRPC check for the specific `my_service` service: } ``` + + A h2ping check: + + +```hcl +check = { + id = "h2ping-check" + name = "h2ping" + h2ping = "localhost:22222" + interval = "10s" + h2ping_use_tls = false +} +``` + ```json { "check": { @@ -257,8 +376,19 @@ A h2ping check: } ``` + + An alias check for a local service: + + +```hcl +check = { + id = "web-alias" + alias_service = "web" +} +``` + ```json { "check": { @@ -268,6 +398,8 @@ An alias check for a local service: } ``` + + ~> Configuration info: The alias check configuration expects the alias to be registered on the same agent as the one you are aliasing. If the service is not registered with the same agent, `"alias_node": ""` must also be @@ -342,6 +474,17 @@ to be healthy. In certain cases, it may be desirable to specify the initial state of a health check. This can be done by specifying the `status` field in a health check definition, like so: + + +```hcl +check = { + "id": "mem", + "args": ["/bin/check_mem", "-limit", "256MB"] + "interval": "10s" + "status": "passing" +} +``` + ```json { "check": { @@ -353,6 +496,8 @@ health check definition, like so: } ``` + + The above service definition would cause the new "mem" check to be registered with its initial state set to "passing". @@ -363,6 +508,17 @@ that the status of the health check will only affect the health status of the given service instead of the entire node. Service-bound health checks may be provided by adding a `service_id` field to a check configuration: + + +```hcl +check = { + id = "web-app" + name = "Web App Status" + service_id = "web-app" + ttl = "30s" +} +``` + ```json { "check": { @@ -374,6 +530,8 @@ provided by adding a `service_id` field to a check configuration: } ``` + + In the above configuration, if the web-app health check begins failing, it will only affect the availability of the web-app service. All other services provided by the node will remain unchanged. @@ -389,6 +547,32 @@ to use the agent's credentials when configured for TLS. Multiple check definitions can be defined using the `checks` (plural) key in your configuration file. + + +```hcl +checks = [ + { + id = "chk1" + name = "mem" + args = ["/bin/check_mem", "-limit", "256MB"] + interval = "5s" + }, + { + id = "chk2" + name = "/health" + http = "http://localhost:5000/health" + interval = "15s" + }, + { + id = "chk3" + name = "cpu" + args = ["/bin/check_cpu"] + interval = "10s" + }, + ... +] +``` + ```json { "checks": [ @@ -415,6 +599,8 @@ key in your configuration file. } ``` + + ## Success/Failures before passing/warning/critical To prevent flapping health checks, and limit the load they cause on the cluster, @@ -436,6 +622,22 @@ This feature is available for HTTP, TCP, gRPC, Docker & Monitor checks. By default, both passing and critical thresholds will be set to 0 so the check status will always reflect the last check result. + + +```hcl +checks = [ + { + name = "HTTP TCP on port 80" + tcp = "localhost:80" + interval = "10s" + timeout = "1s" + success_before_passing = 3 + failures_before_warning = 1 + failures_before_critical = 3 + } +] +``` + ```json { "checks": [ @@ -451,3 +653,5 @@ status will always reflect the last check result. ] } ``` + +