plugin/health: add logging for local health request (#4533)

This commit is contained in:
Miek Gieben
2021-03-19 11:40:38 +01:00
committed by GitHub
parent 8faca26873
commit 634e3fe8f5
2 changed files with 9 additions and 4 deletions

View File

@@ -27,7 +27,7 @@ health [ADDRESS] {
~~~ ~~~
* Where `lameduck` will delay shutdown for **DURATION**. /health will still answer 200 OK. * Where `lameduck` will delay shutdown for **DURATION**. /health will still answer 200 OK.
Note: The *ready* plugin will not answer OK while CoreDNS is in lameduck mode prior to shutdown. Note: The *ready* plugin will not answer OK while CoreDNS is in lame duck mode prior to shutdown.
If you have multiple Server Blocks, *health* can only be enabled in one of them (as it is process If you have multiple Server Blocks, *health* can only be enabled in one of them (as it is process
wide). If you really need multiple endpoints, you must run health endpoints on different ports: wide). If you really need multiple endpoints, you must run health endpoints on different ports:
@@ -67,7 +67,7 @@ Run another health endpoint on http://localhost:8091.
} }
~~~ ~~~
Set a lameduck duration of 1 second: Set a lame duck duration of 1 second:
~~~ corefile ~~~ corefile
. { . {

View File

@@ -12,7 +12,7 @@ import (
// overloaded queries the health end point and updates a metrics showing how long it took. // overloaded queries the health end point and updates a metrics showing how long it took.
func (h *health) overloaded() { func (h *health) overloaded() {
timeout := time.Duration(5 * time.Second) timeout := time.Duration(3 * time.Second)
client := http.Client{ client := http.Client{
Timeout: timeout, Timeout: timeout,
} }
@@ -27,10 +27,15 @@ func (h *health) overloaded() {
resp, err := client.Get(url) resp, err := client.Get(url)
if err != nil { if err != nil {
HealthDuration.Observe(timeout.Seconds()) HealthDuration.Observe(timeout.Seconds())
log.Warningf("Local health request to %q failed: %s", url, err)
continue continue
} }
resp.Body.Close() resp.Body.Close()
HealthDuration.Observe(time.Since(start).Seconds()) elapsed := time.Since(start)
HealthDuration.Observe(elapsed.Seconds())
if elapsed > time.Second { // 1s is pretty random, but a *local* scrape taking that long isn't good
log.Warningf("Local health request to %q took more than 1s: %s", url, elapsed)
}
case <-h.stop: case <-h.stop:
return return