feat(metrics): add gatus_results_endpoint_success
(#970)
* feat(metrics): add gatus_endpoint_success Signed-off-by: Devin Buhl <devin@buhl.casa> * feat(metrics): add gatus_endpoint_success Signed-off-by: Devin Buhl <devin@buhl.casa> * chore: update readme Signed-off-by: Devin Buhl <devin@buhl.casa> * chore: update readme Signed-off-by: Devin Buhl <devin@buhl.casa> * chore: update readme Signed-off-by: Devin Buhl <devin@buhl.casa> * chore: update readme Signed-off-by: Devin Buhl <devin@buhl.casa> * chore: update readme Signed-off-by: Devin Buhl <devin@buhl.casa> --------- Signed-off-by: Devin Buhl <devin@buhl.casa>
This commit is contained in:
parent
31073365ed
commit
0bba77ab2b
@ -120,6 +120,7 @@ Have any feedback or questions? [Create a discussion](https://github.com/TwiN/ga
|
|||||||
- [How to change the color thresholds of the response time badge](#how-to-change-the-color-thresholds-of-the-response-time-badge)
|
- [How to change the color thresholds of the response time badge](#how-to-change-the-color-thresholds-of-the-response-time-badge)
|
||||||
- [API](#api)
|
- [API](#api)
|
||||||
- [Raw Data](#raw-data)
|
- [Raw Data](#raw-data)
|
||||||
|
- [Uptime](#uptime-1)
|
||||||
- [Installing as binary](#installing-as-binary)
|
- [Installing as binary](#installing-as-binary)
|
||||||
- [High level design overview](#high-level-design-overview)
|
- [High level design overview](#high-level-design-overview)
|
||||||
|
|
||||||
@ -1745,11 +1746,12 @@ endpoint on the same port your application is configured to run on (`web.port`).
|
|||||||
|
|
||||||
| Metric name | Type | Description | Labels | Relevant endpoint types |
|
| Metric name | Type | Description | Labels | Relevant endpoint types |
|
||||||
|:---------------------------------------------|:--------|:---------------------------------------------------------------------------|:--------------------------------|:------------------------|
|
|:---------------------------------------------|:--------|:---------------------------------------------------------------------------|:--------------------------------|:------------------------|
|
||||||
| gatus_results_total | counter | Number of results per endpoint | key, group, name, type, success | All |
|
| gatus_results_total | counter | Number of results per endpoint per success state | key, group, name, type, success | All |
|
||||||
| gatus_results_code_total | counter | Total number of results by code | key, group, name, type, code | DNS, HTTP |
|
| gatus_results_code_total | counter | Total number of results by code | key, group, name, type, code | DNS, HTTP |
|
||||||
| gatus_results_connected_total | counter | Total number of results in which a connection was successfully established | key, group, name, type | All |
|
| gatus_results_connected_total | counter | Total number of results in which a connection was successfully established | key, group, name, type | All |
|
||||||
| gatus_results_duration_seconds | gauge | Duration of the request in seconds | key, group, name, type | All |
|
| gatus_results_duration_seconds | gauge | Duration of the request in seconds | key, group, name, type | All |
|
||||||
| gatus_results_certificate_expiration_seconds | gauge | Number of seconds until the certificate expires | key, group, name, type | HTTP, STARTTLS |
|
| gatus_results_certificate_expiration_seconds | gauge | Number of seconds until the certificate expires | key, group, name, type | HTTP, STARTTLS |
|
||||||
|
| gatus_results_endpoint_success | gauge | Displays whether or not the endpoint was a success (0 failure, 1 success) | key, group, name, type | All |
|
||||||
|
|
||||||
See [examples/docker-compose-grafana-prometheus](.examples/docker-compose-grafana-prometheus) for further documentation as well as an example.
|
See [examples/docker-compose-grafana-prometheus](.examples/docker-compose-grafana-prometheus) for further documentation as well as an example.
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ var (
|
|||||||
resultConnectedTotal *prometheus.CounterVec
|
resultConnectedTotal *prometheus.CounterVec
|
||||||
resultCodeTotal *prometheus.CounterVec
|
resultCodeTotal *prometheus.CounterVec
|
||||||
resultCertificateExpirationSeconds *prometheus.GaugeVec
|
resultCertificateExpirationSeconds *prometheus.GaugeVec
|
||||||
|
resultEndpointSuccess *prometheus.GaugeVec
|
||||||
)
|
)
|
||||||
|
|
||||||
func initializePrometheusMetrics() {
|
func initializePrometheusMetrics() {
|
||||||
@ -46,6 +47,11 @@ func initializePrometheusMetrics() {
|
|||||||
Name: "results_certificate_expiration_seconds",
|
Name: "results_certificate_expiration_seconds",
|
||||||
Help: "Number of seconds until the certificate expires",
|
Help: "Number of seconds until the certificate expires",
|
||||||
}, []string{"key", "group", "name", "type"})
|
}, []string{"key", "group", "name", "type"})
|
||||||
|
resultEndpointSuccess = promauto.NewGaugeVec(prometheus.GaugeOpts{
|
||||||
|
Namespace: namespace,
|
||||||
|
Name: "results_endpoint_success",
|
||||||
|
Help: "Displays whether or not the endpoint was a success",
|
||||||
|
}, []string{"key", "group", "name", "type"})
|
||||||
}
|
}
|
||||||
|
|
||||||
// PublishMetricsForEndpoint publishes metrics for the given endpoint and its result.
|
// PublishMetricsForEndpoint publishes metrics for the given endpoint and its result.
|
||||||
@ -70,4 +76,9 @@ func PublishMetricsForEndpoint(ep *endpoint.Endpoint, result *endpoint.Result) {
|
|||||||
if result.CertificateExpiration != 0 {
|
if result.CertificateExpiration != 0 {
|
||||||
resultCertificateExpirationSeconds.WithLabelValues(ep.Key(), ep.Group, ep.Name, string(endpointType)).Set(result.CertificateExpiration.Seconds())
|
resultCertificateExpirationSeconds.WithLabelValues(ep.Key(), ep.Group, ep.Name, string(endpointType)).Set(result.CertificateExpiration.Seconds())
|
||||||
}
|
}
|
||||||
|
if result.Success {
|
||||||
|
resultEndpointSuccess.WithLabelValues(ep.Key(), ep.Group, ep.Name, string(endpointType)).Set(1)
|
||||||
|
} else {
|
||||||
|
resultEndpointSuccess.WithLabelValues(ep.Key(), ep.Group, ep.Name, string(endpointType)).Set(0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,9 +25,6 @@ func TestPublishMetricsForEndpoint(t *testing.T) {
|
|||||||
CertificateExpiration: 49 * time.Hour,
|
CertificateExpiration: 49 * time.Hour,
|
||||||
})
|
})
|
||||||
err := testutil.GatherAndCompare(prometheus.Gatherers{prometheus.DefaultGatherer}, bytes.NewBufferString(`
|
err := testutil.GatherAndCompare(prometheus.Gatherers{prometheus.DefaultGatherer}, bytes.NewBufferString(`
|
||||||
# HELP gatus_results_certificate_expiration_seconds Number of seconds until the certificate expires
|
|
||||||
# TYPE gatus_results_certificate_expiration_seconds gauge
|
|
||||||
gatus_results_certificate_expiration_seconds{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 176400
|
|
||||||
# HELP gatus_results_code_total Total number of results by code
|
# HELP gatus_results_code_total Total number of results by code
|
||||||
# TYPE gatus_results_code_total counter
|
# TYPE gatus_results_code_total counter
|
||||||
gatus_results_code_total{code="200",group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 1
|
gatus_results_code_total{code="200",group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 1
|
||||||
@ -40,7 +37,13 @@ gatus_results_duration_seconds{group="http-ep-group",key="http-ep-group_http-ep-
|
|||||||
# HELP gatus_results_total Number of results per endpoint
|
# HELP gatus_results_total Number of results per endpoint
|
||||||
# TYPE gatus_results_total counter
|
# TYPE gatus_results_total counter
|
||||||
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="true",type="HTTP"} 1
|
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="true",type="HTTP"} 1
|
||||||
`), "gatus_results_code_total", "gatus_results_connected_total", "gatus_results_duration_seconds", "gatus_results_total", "gatus_results_certificate_expiration_seconds")
|
# HELP gatus_results_certificate_expiration_seconds Number of seconds until the certificate expires
|
||||||
|
# TYPE gatus_results_certificate_expiration_seconds gauge
|
||||||
|
gatus_results_certificate_expiration_seconds{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 176400
|
||||||
|
# HELP gatus_results_endpoint_success Displays whether or not the endpoint was a success
|
||||||
|
# TYPE gatus_results_endpoint_success gauge
|
||||||
|
gatus_results_endpoint_success{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 1
|
||||||
|
`), "gatus_results_code_total", "gatus_results_connected_total", "gatus_results_duration_seconds", "gatus_results_total", "gatus_results_certificate_expiration_seconds", "gatus_results_endpoint_success")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Expected no errors but got: %v", err)
|
t.Errorf("Expected no errors but got: %v", err)
|
||||||
}
|
}
|
||||||
@ -56,9 +59,6 @@ gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name=
|
|||||||
CertificateExpiration: 47 * time.Hour,
|
CertificateExpiration: 47 * time.Hour,
|
||||||
})
|
})
|
||||||
err = testutil.GatherAndCompare(prometheus.Gatherers{prometheus.DefaultGatherer}, bytes.NewBufferString(`
|
err = testutil.GatherAndCompare(prometheus.Gatherers{prometheus.DefaultGatherer}, bytes.NewBufferString(`
|
||||||
# HELP gatus_results_certificate_expiration_seconds Number of seconds until the certificate expires
|
|
||||||
# TYPE gatus_results_certificate_expiration_seconds gauge
|
|
||||||
gatus_results_certificate_expiration_seconds{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 169200
|
|
||||||
# HELP gatus_results_code_total Total number of results by code
|
# HELP gatus_results_code_total Total number of results by code
|
||||||
# TYPE gatus_results_code_total counter
|
# TYPE gatus_results_code_total counter
|
||||||
gatus_results_code_total{code="200",group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 2
|
gatus_results_code_total{code="200",group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 2
|
||||||
@ -72,7 +72,13 @@ gatus_results_duration_seconds{group="http-ep-group",key="http-ep-group_http-ep-
|
|||||||
# TYPE gatus_results_total counter
|
# TYPE gatus_results_total counter
|
||||||
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="false",type="HTTP"} 1
|
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="false",type="HTTP"} 1
|
||||||
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="true",type="HTTP"} 1
|
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="true",type="HTTP"} 1
|
||||||
`), "gatus_results_code_total", "gatus_results_connected_total", "gatus_results_duration_seconds", "gatus_results_total", "gatus_results_certificate_expiration_seconds")
|
# HELP gatus_results_certificate_expiration_seconds Number of seconds until the certificate expires
|
||||||
|
# TYPE gatus_results_certificate_expiration_seconds gauge
|
||||||
|
gatus_results_certificate_expiration_seconds{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 169200
|
||||||
|
# HELP gatus_results_endpoint_success Displays whether or not the endpoint was a success
|
||||||
|
# TYPE gatus_results_endpoint_success gauge
|
||||||
|
gatus_results_endpoint_success{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 0
|
||||||
|
`), "gatus_results_code_total", "gatus_results_connected_total", "gatus_results_duration_seconds", "gatus_results_total", "gatus_results_certificate_expiration_seconds", "gatus_results_endpoint_success")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Expected no errors but got: %v", err)
|
t.Errorf("Expected no errors but got: %v", err)
|
||||||
}
|
}
|
||||||
@ -90,9 +96,6 @@ gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name=
|
|||||||
Success: true,
|
Success: true,
|
||||||
})
|
})
|
||||||
err = testutil.GatherAndCompare(prometheus.Gatherers{prometheus.DefaultGatherer}, bytes.NewBufferString(`
|
err = testutil.GatherAndCompare(prometheus.Gatherers{prometheus.DefaultGatherer}, bytes.NewBufferString(`
|
||||||
# HELP gatus_results_certificate_expiration_seconds Number of seconds until the certificate expires
|
|
||||||
# TYPE gatus_results_certificate_expiration_seconds gauge
|
|
||||||
gatus_results_certificate_expiration_seconds{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 169200
|
|
||||||
# HELP gatus_results_code_total Total number of results by code
|
# HELP gatus_results_code_total Total number of results by code
|
||||||
# TYPE gatus_results_code_total counter
|
# TYPE gatus_results_code_total counter
|
||||||
gatus_results_code_total{code="200",group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 2
|
gatus_results_code_total{code="200",group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 2
|
||||||
@ -110,7 +113,14 @@ gatus_results_duration_seconds{group="http-ep-group",key="http-ep-group_http-ep-
|
|||||||
gatus_results_total{group="dns-ep-group",key="dns-ep-group_dns-ep-name",name="dns-ep-name",success="true",type="DNS"} 1
|
gatus_results_total{group="dns-ep-group",key="dns-ep-group_dns-ep-name",name="dns-ep-name",success="true",type="DNS"} 1
|
||||||
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="false",type="HTTP"} 1
|
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="false",type="HTTP"} 1
|
||||||
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="true",type="HTTP"} 1
|
gatus_results_total{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",success="true",type="HTTP"} 1
|
||||||
`), "gatus_results_code_total", "gatus_results_connected_total", "gatus_results_duration_seconds", "gatus_results_total", "gatus_results_certificate_expiration_seconds")
|
# HELP gatus_results_certificate_expiration_seconds Number of seconds until the certificate expires
|
||||||
|
# TYPE gatus_results_certificate_expiration_seconds gauge
|
||||||
|
gatus_results_certificate_expiration_seconds{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 169200
|
||||||
|
# HELP gatus_results_endpoint_success Displays whether or not the endpoint was a success
|
||||||
|
# TYPE gatus_results_endpoint_success gauge
|
||||||
|
gatus_results_endpoint_success{group="dns-ep-group",key="dns-ep-group_dns-ep-name",name="dns-ep-name",type="DNS"} 1
|
||||||
|
gatus_results_endpoint_success{group="http-ep-group",key="http-ep-group_http-ep-name",name="http-ep-name",type="HTTP"} 0
|
||||||
|
`), "gatus_results_code_total", "gatus_results_connected_total", "gatus_results_duration_seconds", "gatus_results_total", "gatus_results_certificate_expiration_seconds", "gatus_results_endpoint_success")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Expected no errors but got: %v", err)
|
t.Errorf("Expected no errors but got: %v", err)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user