diff options
Diffstat (limited to 'src/go/plugin/go.d/modules/traefik')
l--------- | src/go/plugin/go.d/modules/traefik/README.md | 1 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/charts.go | 73 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/collect.go | 214 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/config_schema.json | 183 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/init.go | 37 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/integrations/traefik.md | 246 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/metadata.yaml | 196 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/testdata/config.json | 20 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/testdata/config.yaml | 17 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/testdata/v2.2.1/metrics.txt | 1170 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/traefik.go | 130 | ||||
-rw-r--r-- | src/go/plugin/go.d/modules/traefik/traefik_test.go | 370 |
12 files changed, 2657 insertions, 0 deletions
diff --git a/src/go/plugin/go.d/modules/traefik/README.md b/src/go/plugin/go.d/modules/traefik/README.md new file mode 120000 index 000000000..da5abad23 --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/README.md @@ -0,0 +1 @@ +integrations/traefik.md
\ No newline at end of file diff --git a/src/go/plugin/go.d/modules/traefik/charts.go b/src/go/plugin/go.d/modules/traefik/charts.go new file mode 100644 index 000000000..7d67ef684 --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/charts.go @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package traefik + +import ( + "fmt" + + "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module" +) + +var chartTmplEntrypointRequests = module.Chart{ + ID: "entrypoint_requests_%s_%s", + Title: "Processed HTTP requests on <code>%s</code> entrypoint (protocol <code>%s</code>)", + Units: "requests/s", + Fam: "entrypoint %s %s", + Ctx: "traefik.entrypoint_requests", + Type: module.Stacked, + Dims: module.Dims{ + {ID: prefixEntrypointRequests + "%s_%s_1xx", Name: "1xx", Algo: module.Incremental}, + {ID: prefixEntrypointRequests + "%s_%s_2xx", Name: "2xx", Algo: module.Incremental}, + {ID: prefixEntrypointRequests + "%s_%s_3xx", Name: "3xx", Algo: module.Incremental}, + {ID: prefixEntrypointRequests + "%s_%s_4xx", Name: "4xx", Algo: module.Incremental}, + {ID: prefixEntrypointRequests + "%s_%s_5xx", Name: "5xx", Algo: module.Incremental}, + }, +} + +var chartTmplEntrypointRequestDuration = module.Chart{ + ID: "entrypoint_request_duration_%s_%s", + Title: "Average HTTP request processing time on <code>%s</code> entrypoint (protocol <code>%s</code>)", + Units: "milliseconds", + Fam: "entrypoint %s %s", + Ctx: "traefik.entrypoint_request_duration_average", + Type: module.Stacked, + Dims: module.Dims{ + {ID: prefixEntrypointReqDurAvg + "%s_%s_1xx", Name: "1xx"}, + {ID: prefixEntrypointReqDurAvg + "%s_%s_2xx", Name: "2xx"}, + {ID: prefixEntrypointReqDurAvg + "%s_%s_3xx", Name: "3xx"}, + {ID: prefixEntrypointReqDurAvg + "%s_%s_4xx", Name: "4xx"}, + {ID: prefixEntrypointReqDurAvg + "%s_%s_5xx", Name: "5xx"}, + }, +} + +var chartTmplEntrypointOpenConnections = module.Chart{ + ID: "entrypoint_open_connections_%s_%s", + Title: "Open connections on <code>%s</code> entrypoint (protocol <code>%s</code>)", + Units: "connections", + Fam: "entrypoint %s %s", + Ctx: "traefik.entrypoint_open_connections", + Type: module.Stacked, +} + +func newChartEntrypointRequests(entrypoint, proto string) *module.Chart { + return newEntrypointChart(chartTmplEntrypointRequests, entrypoint, proto) +} + +func newChartEntrypointRequestDuration(entrypoint, proto string) *module.Chart { + return newEntrypointChart(chartTmplEntrypointRequestDuration, entrypoint, proto) +} + +func newChartEntrypointOpenConnections(entrypoint, proto string) *module.Chart { + return newEntrypointChart(chartTmplEntrypointOpenConnections, entrypoint, proto) +} + +func newEntrypointChart(tmpl module.Chart, entrypoint, proto string) *module.Chart { + chart := tmpl.Copy() + chart.ID = fmt.Sprintf(chart.ID, entrypoint, proto) + chart.Title = fmt.Sprintf(chart.Title, entrypoint, proto) + chart.Fam = fmt.Sprintf(chart.Fam, entrypoint, proto) + for _, d := range chart.Dims { + d.ID = fmt.Sprintf(d.ID, entrypoint, proto) + } + return chart +} diff --git a/src/go/plugin/go.d/modules/traefik/collect.go b/src/go/plugin/go.d/modules/traefik/collect.go new file mode 100644 index 000000000..3f2556060 --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/collect.go @@ -0,0 +1,214 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package traefik + +import ( + "errors" + "strings" + + "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus" +) + +const ( + metricEntrypointRequestsTotal = "traefik_entrypoint_requests_total" + metricEntrypointRequestDurationSecondsSum = "traefik_entrypoint_request_duration_seconds_sum" + metricEntrypointRequestDurationSecondsCount = "traefik_entrypoint_request_duration_seconds_count" + metricEntrypointOpenConnections = "traefik_entrypoint_open_connections" +) + +const ( + prefixEntrypointRequests = "entrypoint_requests_" + prefixEntrypointReqDurAvg = "entrypoint_request_duration_average_" + prefixEntrypointOpenConn = "entrypoint_open_connections_" +) + +func isTraefikMetrics(pms prometheus.Series) bool { + for _, pm := range pms { + if strings.HasPrefix(pm.Name(), "traefik_") { + return true + } + } + return false +} + +func (t *Traefik) collect() (map[string]int64, error) { + pms, err := t.prom.ScrapeSeries() + if err != nil { + return nil, err + } + + if t.checkMetrics && !isTraefikMetrics(pms) { + return nil, errors.New("unexpected metrics (not Traefik)") + } + t.checkMetrics = false + + mx := make(map[string]int64) + + t.collectEntrypointRequestsTotal(mx, pms) + t.collectEntrypointRequestDuration(mx, pms) + t.collectEntrypointOpenConnections(mx, pms) + t.updateCodeClassMetrics(mx) + + return mx, nil +} + +func (t *Traefik) collectEntrypointRequestsTotal(mx map[string]int64, pms prometheus.Series) { + if pms = pms.FindByName(metricEntrypointRequestsTotal); pms.Len() == 0 { + return + } + + for _, pm := range pms { + code := pm.Labels.Get("code") + ep := pm.Labels.Get("entrypoint") + proto := pm.Labels.Get("protocol") + codeClass := getCodeClass(code) + if code == "" || ep == "" || proto == "" || codeClass == "" { + continue + } + + key := prefixEntrypointRequests + ep + "_" + proto + "_" + codeClass + mx[key] += int64(pm.Value) + + id := ep + "_" + proto + ce := t.cacheGetOrPutEntrypoint(id) + if ce.requests == nil { + chart := newChartEntrypointRequests(ep, proto) + ce.requests = chart + if err := t.Charts().Add(chart); err != nil { + t.Warning(err) + } + } + } +} + +func (t *Traefik) collectEntrypointRequestDuration(mx map[string]int64, pms prometheus.Series) { + if pms = pms.FindByNames( + metricEntrypointRequestDurationSecondsCount, + metricEntrypointRequestDurationSecondsSum, + ); pms.Len() == 0 { + return + } + + for _, pm := range pms { + code := pm.Labels.Get("code") + ep := pm.Labels.Get("entrypoint") + proto := pm.Labels.Get("protocol") + codeClass := getCodeClass(code) + if code == "" || ep == "" || proto == "" || codeClass == "" { + continue + } + + id := ep + "_" + proto + ce := t.cacheGetOrPutEntrypoint(id) + v := ce.reqDurData[codeClass] + if pm.Name() == metricEntrypointRequestDurationSecondsSum { + v.cur.secs += pm.Value + } else { + v.cur.reqs += pm.Value + } + ce.reqDurData[codeClass] = v + } + + for id, ce := range t.cache.entrypoints { + if ce.reqDur == nil { + chart := newChartEntrypointRequestDuration(ce.name, ce.proto) + ce.reqDur = chart + if err := t.Charts().Add(chart); err != nil { + t.Warning(err) + } + } + for codeClass, v := range ce.reqDurData { + secs, reqs, seen := v.cur.secs-v.prev.secs, v.cur.reqs-v.prev.reqs, v.seen + v.prev.secs, v.prev.reqs, v.seen = v.cur.secs, v.cur.reqs, true + v.cur.secs, v.cur.reqs = 0, 0 + ce.reqDurData[codeClass] = v + + key := prefixEntrypointReqDurAvg + id + "_" + codeClass + if secs <= 0 || reqs <= 0 || !seen { + mx[key] = 0 + } else { + mx[key] = int64(secs * 1000 / reqs) + } + } + } +} + +func (t *Traefik) collectEntrypointOpenConnections(mx map[string]int64, pms prometheus.Series) { + if pms = pms.FindByName(metricEntrypointOpenConnections); pms.Len() == 0 { + return + } + + for _, pm := range pms { + method := pm.Labels.Get("method") + ep := pm.Labels.Get("entrypoint") + proto := pm.Labels.Get("protocol") + if method == "" || ep == "" || proto == "" { + continue + } + + key := prefixEntrypointOpenConn + ep + "_" + proto + "_" + method + mx[key] += int64(pm.Value) + + id := ep + "_" + proto + ce := t.cacheGetOrPutEntrypoint(id) + if ce.openConn == nil { + chart := newChartEntrypointOpenConnections(ep, proto) + ce.openConn = chart + if err := t.Charts().Add(chart); err != nil { + t.Warning(err) + } + } + + if !ce.openConnMethods[method] { + ce.openConnMethods[method] = true + dim := &module.Dim{ID: key, Name: method} + if err := ce.openConn.AddDim(dim); err != nil { + t.Warning(err) + } + ce.openConn.MarkNotCreated() + } + } +} + +var httpRespCodeClasses = []string{"1xx", "2xx", "3xx", "4xx", "5xx"} + +func (t *Traefik) updateCodeClassMetrics(mx map[string]int64) { + for id, ce := range t.cache.entrypoints { + if ce.requests != nil { + for _, c := range httpRespCodeClasses { + key := prefixEntrypointRequests + id + "_" + c + mx[key] += 0 + } + } + if ce.reqDur != nil { + for _, c := range httpRespCodeClasses { + key := prefixEntrypointReqDurAvg + id + "_" + c + mx[key] += 0 + } + } + } +} + +func getCodeClass(code string) string { + if len(code) != 3 { + return "" + } + return string(code[0]) + "xx" +} + +func (t *Traefik) cacheGetOrPutEntrypoint(id string) *cacheEntrypoint { + if _, ok := t.cache.entrypoints[id]; !ok { + name, proto := id, id + if idx := strings.LastIndexByte(id, '_'); idx != -1 { + name, proto = id[:idx], id[idx+1:] + } + t.cache.entrypoints[id] = &cacheEntrypoint{ + name: name, + proto: proto, + reqDurData: make(map[string]cacheEntrypointReqDur), + openConnMethods: make(map[string]bool), + } + } + return t.cache.entrypoints[id] +} diff --git a/src/go/plugin/go.d/modules/traefik/config_schema.json b/src/go/plugin/go.d/modules/traefik/config_schema.json new file mode 100644 index 000000000..f027f20a0 --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/config_schema.json @@ -0,0 +1,183 @@ +{ + "jsonSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Traefik collector configuration.", + "type": "object", + "properties": { + "update_every": { + "title": "Update every", + "description": "Data collection interval, measured in seconds.", + "type": "integer", + "minimum": 1, + "default": 1 + }, + "url": { + "title": "URL", + "description": "The URL of the Traefik metrics endpoint.", + "type": "string", + "default": "http://127.0.0.1:8082/metrics", + "format": "uri" + }, + "timeout": { + "title": "Timeout", + "description": "The timeout in seconds for the HTTP request.", + "type": "number", + "minimum": 0.5, + "default": 1 + }, + "not_follow_redirects": { + "title": "Not follow redirects", + "description": "If set, the client will not follow HTTP redirects automatically.", + "type": "boolean" + }, + "username": { + "title": "Username", + "description": "The username for basic authentication.", + "type": "string", + "sensitive": true + }, + "password": { + "title": "Password", + "description": "The password for basic authentication.", + "type": "string", + "sensitive": true + }, + "proxy_url": { + "title": "Proxy URL", + "description": "The URL of the proxy server.", + "type": "string" + }, + "proxy_username": { + "title": "Proxy username", + "description": "The username for proxy authentication.", + "type": "string", + "sensitive": true + }, + "proxy_password": { + "title": "Proxy password", + "description": "The password for proxy authentication.", + "type": "string", + "sensitive": true + }, + "headers": { + "title": "Headers", + "description": "Additional HTTP headers to include in the request.", + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "string" + } + }, + "tls_skip_verify": { + "title": "Skip TLS verification", + "description": "If set, TLS certificate verification will be skipped.", + "type": "boolean" + }, + "tls_ca": { + "title": "TLS CA", + "description": "The path to the CA certificate file for TLS verification.", + "type": "string", + "pattern": "^$|^/" + }, + "tls_cert": { + "title": "TLS certificate", + "description": "The path to the client certificate file for TLS authentication.", + "type": "string", + "pattern": "^$|^/" + }, + "tls_key": { + "title": "TLS key", + "description": "The path to the client key file for TLS authentication.", + "type": "string", + "pattern": "^$|^/" + }, + "body": { + "title": "Body", + "type": "string" + }, + "method": { + "title": "Method", + "type": "string" + } + }, + "required": [ + "url" + ], + "additionalProperties": false, + "patternProperties": { + "^name$": {} + } + }, + "uiSchema": { + "ui:flavour": "tabs", + "ui:options": { + "tabs": [ + { + "title": "Base", + "fields": [ + "update_every", + "url", + "timeout", + "not_follow_redirects" + ] + }, + { + "title": "Auth", + "fields": [ + "username", + "password" + ] + }, + { + "title": "TLS", + "fields": [ + "tls_skip_verify", + "tls_ca", + "tls_cert", + "tls_key" + ] + }, + { + "title": "Proxy", + "fields": [ + "proxy_url", + "proxy_username", + "proxy_password" + ] + }, + { + "title": "Headers", + "fields": [ + "headers" + ] + } + ] + }, + "uiOptions": { + "fullPage": true + }, + "body": { + "ui:widget": "hidden" + }, + "method": { + "ui:widget": "hidden" + }, + "timeout": { + "ui:help": "Accepts decimals for precise control (e.g., type 1.5 for 1.5 seconds)." + }, + "username": { + "ui:widget": "password" + }, + "proxy_username": { + "ui:widget": "password" + }, + "password": { + "ui:widget": "password" + }, + "proxy_password": { + "ui:widget": "password" + } + } +} diff --git a/src/go/plugin/go.d/modules/traefik/init.go b/src/go/plugin/go.d/modules/traefik/init.go new file mode 100644 index 000000000..02c1dde0d --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/init.go @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package traefik + +import ( + "errors" + + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus/selector" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/web" +) + +func (t *Traefik) validateConfig() error { + if t.URL == "" { + return errors.New("'url' is not set") + } + return nil +} + +func (t *Traefik) initPrometheusClient() (prometheus.Prometheus, error) { + httpClient, err := web.NewHTTPClient(t.Client) + if err != nil { + return nil, err + } + + prom := prometheus.NewWithSelector(httpClient, t.Request, sr) + return prom, nil +} + +var sr, _ = selector.Expr{ + Allow: []string{ + metricEntrypointRequestDurationSecondsSum, + metricEntrypointRequestDurationSecondsCount, + metricEntrypointRequestsTotal, + metricEntrypointOpenConnections, + }, +}.Parse() diff --git a/src/go/plugin/go.d/modules/traefik/integrations/traefik.md b/src/go/plugin/go.d/modules/traefik/integrations/traefik.md new file mode 100644 index 000000000..f5dc10eb9 --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/integrations/traefik.md @@ -0,0 +1,246 @@ +<!--startmeta +custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/plugin/go.d/modules/traefik/README.md" +meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/plugin/go.d/modules/traefik/metadata.yaml" +sidebar_label: "Traefik" +learn_status: "Published" +learn_rel_path: "Collecting Metrics/Web Servers and Web Proxies" +most_popular: False +message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE" +endmeta--> + +# Traefik + + +<img src="https://netdata.cloud/img/traefik.svg" width="150"/> + + +Plugin: go.d.plugin +Module: traefik + +<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" /> + +## Overview + +This collector monitors Traefik servers. + + + + +This collector is supported on all platforms. + +This collector supports collecting metrics from multiple instances of this integration, including remote instances. + + +### Default Behavior + +#### Auto-Detection + +This integration doesn't support auto-detection. + +#### Limits + +The default configuration for this integration does not impose any limits on data collection. + +#### Performance Impact + +The default configuration for this integration is not expected to impose a significant performance impact on the system. + + +## Metrics + +Metrics grouped by *scope*. + +The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels. + + + +### Per entrypoint, protocol + +These metrics refer to the endpoint. + +This scope has no labels. + +Metrics: + +| Metric | Dimensions | Unit | +|:------|:----------|:----| +| traefik.entrypoint_requests | 1xx, 2xx, 3xx, 4xx, 5xx | requests/s | +| traefik.entrypoint_request_duration_average | 1xx, 2xx, 3xx, 4xx, 5xx | milliseconds | +| traefik.entrypoint_open_connections | a dimension per HTTP method | connections | + + + +## Alerts + +There are no alerts configured by default for this integration. + + +## Setup + +### Prerequisites + +#### Enable built-in Prometheus exporter + +To enable see [Prometheus exporter](https://doc.traefik.io/traefik/observability/metrics/prometheus/) documentation. + + + +### Configuration + +#### File + +The configuration file name for this integration is `go.d/traefik.conf`. + + +You can edit the configuration file using the `edit-config` script from the +Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory). + +```bash +cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata +sudo ./edit-config go.d/traefik.conf +``` +#### Options + +The following options can be defined globally: update_every, autodetection_retry. + + +<details open><summary>All options</summary> + +| Name | Description | Default | Required | +|:----|:-----------|:-------|:--------:| +| update_every | Data collection frequency. | 1 | no | +| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no | +| url | Server URL. | http://127.0.0.1:8082/metrics | yes | +| timeout | HTTP request timeout. | 1 | no | +| username | Username for basic HTTP authentication. | | no | +| password | Password for basic HTTP authentication. | | no | +| proxy_url | Proxy URL. | | no | +| proxy_username | Username for proxy basic HTTP authentication. | | no | +| proxy_password | Password for proxy basic HTTP authentication. | | no | +| method | HTTP request method. | GET | no | +| body | HTTP request body. | | no | +| headers | HTTP request headers. | | no | +| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no | +| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no | +| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no | +| tls_cert | Client TLS certificate. | | no | +| tls_key | Client TLS key. | | no | + +</details> + +#### Examples + +##### Basic + +An example configuration. + +<details open><summary>Config</summary> + +```yaml +jobs: + - name: local + url: http://127.0.0.1:8082/metrics + +``` +</details> + +##### Basic HTTP auth + +Local server with basic HTTP authentication. + +<details open><summary>Config</summary> + +```yaml +jobs: + - name: local + url: http://127.0.0.1:8082/metrics + username: foo + password: bar + +``` +</details> + +##### Multi-instance + +> **Note**: When you define multiple jobs, their names must be unique. + +Local and remote instances. + + +<details open><summary>Config</summary> + +```yaml +jobs: + - name: local + http://127.0.0.1:8082/metrics + + - name: remote + http://192.0.2.0:8082/metrics + +``` +</details> + + + +## Troubleshooting + +### Debug Mode + +**Important**: Debug mode is not supported for data collection jobs created via the UI using the Dyncfg feature. + +To troubleshoot issues with the `traefik` collector, run the `go.d.plugin` with the debug option enabled. The output +should give you clues as to why the collector isn't working. + +- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on + your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`. + + ```bash + cd /usr/libexec/netdata/plugins.d/ + ``` + +- Switch to the `netdata` user. + + ```bash + sudo -u netdata -s + ``` + +- Run the `go.d.plugin` to debug the collector: + + ```bash + ./go.d.plugin -d -m traefik + ``` + +### Getting Logs + +If you're encountering problems with the `traefik` collector, follow these steps to retrieve logs and identify potential issues: + +- **Run the command** specific to your system (systemd, non-systemd, or Docker container). +- **Examine the output** for any warnings or error messages that might indicate issues. These messages should provide clues about the root cause of the problem. + +#### System with systemd + +Use the following command to view logs generated since the last Netdata service restart: + +```bash +journalctl _SYSTEMD_INVOCATION_ID="$(systemctl show --value --property=InvocationID netdata)" --namespace=netdata --grep traefik +``` + +#### System without systemd + +Locate the collector log file, typically at `/var/log/netdata/collector.log`, and use `grep` to filter for collector's name: + +```bash +grep traefik /var/log/netdata/collector.log +``` + +**Note**: This method shows logs from all restarts. Focus on the **latest entries** for troubleshooting current issues. + +#### Docker Container + +If your Netdata runs in a Docker container named "netdata" (replace if different), use this command: + +```bash +docker logs netdata 2>&1 | grep traefik +``` + + diff --git a/src/go/plugin/go.d/modules/traefik/metadata.yaml b/src/go/plugin/go.d/modules/traefik/metadata.yaml new file mode 100644 index 000000000..7fe182ea3 --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/metadata.yaml @@ -0,0 +1,196 @@ +plugin_name: go.d.plugin +modules: + - meta: + id: collector-go.d.plugin-traefik + plugin_name: go.d.plugin + module_name: traefik + monitored_instance: + name: Traefik + link: Traefik + icon_filename: traefik.svg + categories: + - data-collection.web-servers-and-web-proxies + keywords: + - traefik + - proxy + - webproxy + related_resources: + integrations: + list: [] + info_provided_to_referring_integrations: + description: "" + most_popular: false + overview: + data_collection: + metrics_description: | + This collector monitors Traefik servers. + method_description: "" + supported_platforms: + include: [] + exclude: [] + multi_instance: true + additional_permissions: + description: "" + default_behavior: + auto_detection: + description: "" + limits: + description: "" + performance_impact: + description: "" + setup: + prerequisites: + list: + - title: Enable built-in Prometheus exporter + description: | + To enable see [Prometheus exporter](https://doc.traefik.io/traefik/observability/metrics/prometheus/) documentation. + configuration: + file: + name: go.d/traefik.conf + options: + description: | + The following options can be defined globally: update_every, autodetection_retry. + folding: + title: All options + enabled: true + list: + - name: update_every + description: Data collection frequency. + default_value: 1 + required: false + - name: autodetection_retry + description: Recheck interval in seconds. Zero means no recheck will be scheduled. + default_value: 0 + required: false + - name: url + description: Server URL. + default_value: http://127.0.0.1:8082/metrics + required: true + - name: timeout + description: HTTP request timeout. + default_value: 1 + required: false + - name: username + description: Username for basic HTTP authentication. + default_value: "" + required: false + - name: password + description: Password for basic HTTP authentication. + default_value: "" + required: false + - name: proxy_url + description: Proxy URL. + default_value: "" + required: false + - name: proxy_username + description: Username for proxy basic HTTP authentication. + default_value: "" + required: false + - name: proxy_password + description: Password for proxy basic HTTP authentication. + default_value: "" + required: false + - name: method + description: HTTP request method. + default_value: GET + required: false + - name: body + description: HTTP request body. + default_value: "" + required: false + - name: headers + description: HTTP request headers. + default_value: "" + required: false + - name: not_follow_redirects + description: Redirect handling policy. Controls whether the client follows redirects. + default_value: false + required: false + - name: tls_skip_verify + description: Server certificate chain and hostname validation policy. Controls whether the client performs this check. + default_value: false + required: false + - name: tls_ca + description: Certification authority that the client uses when verifying the server's certificates. + default_value: "" + required: false + - name: tls_cert + description: Client TLS certificate. + default_value: "" + required: false + - name: tls_key + description: Client TLS key. + default_value: "" + required: false + examples: + folding: + title: Config + enabled: true + list: + - name: Basic + description: An example configuration. + config: | + jobs: + - name: local + url: http://127.0.0.1:8082/metrics + - name: Basic HTTP auth + description: Local server with basic HTTP authentication. + config: | + jobs: + - name: local + url: http://127.0.0.1:8082/metrics + username: foo + password: bar + - name: Multi-instance + description: | + > **Note**: When you define multiple jobs, their names must be unique. + + Local and remote instances. + config: | + jobs: + - name: local + http://127.0.0.1:8082/metrics + + - name: remote + http://192.0.2.0:8082/metrics + troubleshooting: + problems: + list: [] + alerts: [] + metrics: + folding: + title: Metrics + enabled: false + description: "" + availability: [] + scopes: + - name: entrypoint, protocol + description: These metrics refer to the endpoint. + labels: [] + metrics: + - name: traefik.entrypoint_requests + description: Processed HTTP requests + unit: requests/s + chart_type: stacked + dimensions: + - name: 1xx + - name: 2xx + - name: 3xx + - name: 4xx + - name: 5xx + - name: traefik.entrypoint_request_duration_average + description: Average HTTP request processing time + unit: milliseconds + chart_type: stacked + dimensions: + - name: 1xx + - name: 2xx + - name: 3xx + - name: 4xx + - name: 5xx + - name: traefik.entrypoint_open_connections + description: Open connections + unit: connections + chart_type: stacked + dimensions: + - name: a dimension per HTTP method diff --git a/src/go/plugin/go.d/modules/traefik/testdata/config.json b/src/go/plugin/go.d/modules/traefik/testdata/config.json new file mode 100644 index 000000000..984c3ed6e --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/testdata/config.json @@ -0,0 +1,20 @@ +{ + "update_every": 123, + "url": "ok", + "body": "ok", + "method": "ok", + "headers": { + "ok": "ok" + }, + "username": "ok", + "password": "ok", + "proxy_url": "ok", + "proxy_username": "ok", + "proxy_password": "ok", + "timeout": 123.123, + "not_follow_redirects": true, + "tls_ca": "ok", + "tls_cert": "ok", + "tls_key": "ok", + "tls_skip_verify": true +} diff --git a/src/go/plugin/go.d/modules/traefik/testdata/config.yaml b/src/go/plugin/go.d/modules/traefik/testdata/config.yaml new file mode 100644 index 000000000..8558b61cc --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/testdata/config.yaml @@ -0,0 +1,17 @@ +update_every: 123 +url: "ok" +body: "ok" +method: "ok" +headers: + ok: "ok" +username: "ok" +password: "ok" +proxy_url: "ok" +proxy_username: "ok" +proxy_password: "ok" +timeout: 123.123 +not_follow_redirects: yes +tls_ca: "ok" +tls_cert: "ok" +tls_key: "ok" +tls_skip_verify: yes diff --git a/src/go/plugin/go.d/modules/traefik/testdata/v2.2.1/metrics.txt b/src/go/plugin/go.d/modules/traefik/testdata/v2.2.1/metrics.txt new file mode 100644 index 000000000..947a365c0 --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/testdata/v2.2.1/metrics.txt @@ -0,0 +1,1170 @@ +# HELP traefik_entrypoint_open_connections How many open connections exist on an entrypoint, partitioned by method and protocol. +# TYPE traefik_entrypoint_open_connections gauge +traefik_entrypoint_open_connections{entrypoint="traefik",method="GET",protocol="http"} 1 +traefik_entrypoint_open_connections{entrypoint="web",method="DELETE",protocol="http"} 0 +traefik_entrypoint_open_connections{entrypoint="web",method="GET",protocol="http"} 0 +traefik_entrypoint_open_connections{entrypoint="web",method="GET",protocol="websocket"} 0 +traefik_entrypoint_open_connections{entrypoint="web",method="HEAD",protocol="http"} 0 +traefik_entrypoint_open_connections{entrypoint="web",method="OPTIONS",protocol="http"} 0 +traefik_entrypoint_open_connections{entrypoint="web",method="PATCH",protocol="http"} 0 +traefik_entrypoint_open_connections{entrypoint="web",method="POST",protocol="http"} 4 +traefik_entrypoint_open_connections{entrypoint="web",method="PUT",protocol="http"} 0 +# HELP traefik_entrypoint_request_duration_seconds How long it took to process the request on an entrypoint, partitioned by status code, protocol, and method. +# TYPE traefik_entrypoint_request_duration_seconds histogram +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="0.1"} 2.839193e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="0.2"} 2.840809e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="0.3"} 2.840813e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="0.4"} 2.840813e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="0.5"} 2.840814e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="0.8"} 2.840814e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="0.9"} 2.840814e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="1"} 2.840814e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="1.1"} 2.840814e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="1.2"} 2.840814e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="5"} 2.840814e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="traefik",method="GET",protocol="http",le="+Inf"} 2.840814e+06 +traefik_entrypoint_request_duration_seconds_sum{code="200",entrypoint="traefik",method="GET",protocol="http"} 5284.212647182563 +traefik_entrypoint_request_duration_seconds_count{code="200",entrypoint="traefik",method="GET",protocol="http"} 2.840814e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="0.1"} 6.77133599e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="0.2"} 7.53631104e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="0.3"} 7.72627022e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="0.4"} 7.79474876e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="0.5"} 7.81903287e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="0.8"} 7.8476649e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="0.9"} 7.85122472e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="1"} 7.85466352e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="1.1"} 7.85699767e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="1.2"} 7.85892303e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="5"} 7.86979178e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="GET",protocol="http",le="+Inf"} 7.87262719e+08 +traefik_entrypoint_request_duration_seconds_sum{code="200",entrypoint="web",method="GET",protocol="http"} 3.573930237570157e+07 +traefik_entrypoint_request_duration_seconds_count{code="200",entrypoint="web",method="GET",protocol="http"} 7.87262719e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="0.1"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="0.2"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="0.3"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="0.4"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="0.5"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="0.8"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="0.9"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="1"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="1.1"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="1.2"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="5"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="HEAD",protocol="http",le="+Inf"} 6311 +traefik_entrypoint_request_duration_seconds_sum{code="200",entrypoint="web",method="HEAD",protocol="http"} 7.36609426899999 +traefik_entrypoint_request_duration_seconds_count{code="200",entrypoint="web",method="HEAD",protocol="http"} 6311 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 5617 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 5828 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 5925 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 5968 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 5996 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 6027 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 6034 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="1"} 6035 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 6039 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 6039 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="5"} 6045 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 6047 +traefik_entrypoint_request_duration_seconds_sum{code="200",entrypoint="web",method="PATCH",protocol="http"} 376.1973577400002 +traefik_entrypoint_request_duration_seconds_count{code="200",entrypoint="web",method="PATCH",protocol="http"} 6047 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="0.1"} 1.0407824e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="0.2"} 3.0289279e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="0.3"} 4.9925366e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="0.4"} 5.7915399e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="0.5"} 6.292114e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="0.8"} 6.826269e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="0.9"} 6.8979431e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="1"} 6.9399071e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="1.1"} 6.9717772e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="1.2"} 6.9953534e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="5"} 7.0917859e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="200",entrypoint="web",method="POST",protocol="http",le="+Inf"} 7.1907943e+07 +traefik_entrypoint_request_duration_seconds_sum{code="200",entrypoint="web",method="POST",protocol="http"} 2.4994444082210593e+07 +traefik_entrypoint_request_duration_seconds_count{code="200",entrypoint="web",method="POST",protocol="http"} 7.1907943e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="0.1"} 1.75296233e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="0.2"} 1.75817375e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="0.3"} 1.76334316e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="0.4"} 1.76415232e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="0.5"} 1.76453514e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="0.8"} 1.76535963e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="0.9"} 1.76564373e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="1"} 1.76584473e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="1.1"} 1.76599247e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="1.2"} 1.76612342e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="5"} 1.76778007e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="201",entrypoint="web",method="POST",protocol="http",le="+Inf"} 1.76862498e+08 +traefik_entrypoint_request_duration_seconds_sum{code="201",entrypoint="web",method="POST",protocol="http"} 3.734233299392699e+06 +traefik_entrypoint_request_duration_seconds_count{code="201",entrypoint="web",method="POST",protocol="http"} 1.76862498e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="0.1"} 7980 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="0.2"} 8309 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="0.3"} 8412 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="0.4"} 8443 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="0.5"} 8451 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="0.8"} 8528 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="0.9"} 8568 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="1"} 8621 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="1.1"} 8730 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="1.2"} 8886 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="5"} 10410 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="DELETE",protocol="http",le="+Inf"} 10446 +traefik_entrypoint_request_duration_seconds_sum{code="204",entrypoint="web",method="DELETE",protocol="http"} 4241.144239078025 +traefik_entrypoint_request_duration_seconds_count{code="204",entrypoint="web",method="DELETE",protocol="http"} 10446 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 29818 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 30290 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 30456 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 30508 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 30534 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 30563 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 30571 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="1"} 30578 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 30581 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 30581 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="5"} 30602 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 30606 +traefik_entrypoint_request_duration_seconds_sum{code="204",entrypoint="web",method="PATCH",protocol="http"} 797.362519008993 +traefik_entrypoint_request_duration_seconds_count{code="204",entrypoint="web",method="PATCH",protocol="http"} 30606 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="0.1"} 54869 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="0.2"} 61844 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="0.3"} 63734 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="0.4"} 65053 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="0.5"} 66111 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="0.8"} 66489 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="0.9"} 66507 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="1"} 66512 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="1.1"} 66519 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="1.2"} 66526 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="5"} 66554 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="POST",protocol="http",le="+Inf"} 66555 +traefik_entrypoint_request_duration_seconds_sum{code="204",entrypoint="web",method="POST",protocol="http"} 3518.3602801470365 +traefik_entrypoint_request_duration_seconds_count{code="204",entrypoint="web",method="POST",protocol="http"} 66555 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="0.1"} 24769 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="0.2"} 46802 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="0.3"} 48080 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="0.4"} 48611 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="0.5"} 48903 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="0.8"} 49321 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="0.9"} 49412 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="1"} 49462 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="1.1"} 49518 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="1.2"} 49558 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="5"} 49829 +traefik_entrypoint_request_duration_seconds_bucket{code="204",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 49872 +traefik_entrypoint_request_duration_seconds_sum{code="204",entrypoint="web",method="PUT",protocol="http"} 5950.493801841983 +traefik_entrypoint_request_duration_seconds_count{code="204",entrypoint="web",method="PUT",protocol="http"} 49872 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="0.1"} 3037 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="0.2"} 3039 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="0.3"} 3040 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="0.4"} 3040 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="0.5"} 3041 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="0.8"} 3041 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="0.9"} 3041 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="1"} 3041 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="1.1"} 3041 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="1.2"} 3041 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="5"} 3043 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="GET",protocol="http",le="+Inf"} 3046 +traefik_entrypoint_request_duration_seconds_sum{code="206",entrypoint="web",method="GET",protocol="http"} 200.91194297900017 +traefik_entrypoint_request_duration_seconds_count{code="206",entrypoint="web",method="GET",protocol="http"} 3046 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="0.1"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="0.2"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="0.3"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="0.4"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="0.5"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="0.8"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="0.9"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="1"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="1.1"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="1.2"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="5"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="206",entrypoint="web",method="HEAD",protocol="http",le="+Inf"} 35 +traefik_entrypoint_request_duration_seconds_sum{code="206",entrypoint="web",method="HEAD",protocol="http"} 0.03518408899999999 +traefik_entrypoint_request_duration_seconds_count{code="206",entrypoint="web",method="HEAD",protocol="http"} 35 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="0.1"} 2767 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="0.2"} 2770 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="0.3"} 2772 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="0.4"} 2772 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="0.5"} 2772 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="0.8"} 2773 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="0.9"} 2773 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="1"} 2774 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="1.1"} 2774 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="1.2"} 2774 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="5"} 2775 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="DELETE",protocol="http",le="+Inf"} 2775 +traefik_entrypoint_request_duration_seconds_sum{code="207",entrypoint="web",method="DELETE",protocol="http"} 33.959802933999995 +traefik_entrypoint_request_duration_seconds_count{code="207",entrypoint="web",method="DELETE",protocol="http"} 2775 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="0.1"} 93 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="0.2"} 101 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="0.3"} 105 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="0.4"} 112 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="0.5"} 120 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="0.8"} 127 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="0.9"} 127 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="1"} 127 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="1.1"} 127 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="1.2"} 127 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="5"} 128 +traefik_entrypoint_request_duration_seconds_bucket{code="207",entrypoint="web",method="POST",protocol="http",le="+Inf"} 129 +traefik_entrypoint_request_duration_seconds_sum{code="207",entrypoint="web",method="POST",protocol="http"} 27.57962429700001 +traefik_entrypoint_request_duration_seconds_count{code="207",entrypoint="web",method="POST",protocol="http"} 129 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="0.1"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="0.2"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="0.3"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="0.4"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="0.5"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="0.8"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="0.9"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="1"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="1.1"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="1.2"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="5"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="301",entrypoint="web",method="GET",protocol="http",le="+Inf"} 248 +traefik_entrypoint_request_duration_seconds_sum{code="301",entrypoint="web",method="GET",protocol="http"} 0.25649611699999997 +traefik_entrypoint_request_duration_seconds_count{code="301",entrypoint="web",method="GET",protocol="http"} 248 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="0.1"} 30448 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="0.2"} 38318 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="0.3"} 41030 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="0.4"} 43988 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="0.5"} 46851 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="0.8"} 48508 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="0.9"} 48554 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="1"} 48571 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="1.1"} 48580 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="1.2"} 48587 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="5"} 48619 +traefik_entrypoint_request_duration_seconds_bucket{code="302",entrypoint="web",method="GET",protocol="http",le="+Inf"} 48623 +traefik_entrypoint_request_duration_seconds_sum{code="302",entrypoint="web",method="GET",protocol="http"} 5561.800275933011 +traefik_entrypoint_request_duration_seconds_count{code="302",entrypoint="web",method="GET",protocol="http"} 48623 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="0.1"} 367383 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="0.2"} 367384 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="0.3"} 367385 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="0.4"} 367385 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="0.5"} 367386 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="0.8"} 367387 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="0.9"} 367387 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="1"} 367387 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="1.1"} 367387 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="1.2"} 367387 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="5"} 367387 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="GET",protocol="http",le="+Inf"} 367387 +traefik_entrypoint_request_duration_seconds_sum{code="304",entrypoint="web",method="GET",protocol="http"} 418.3746390310068 +traefik_entrypoint_request_duration_seconds_count{code="304",entrypoint="web",method="GET",protocol="http"} 367387 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="0.1"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="0.2"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="0.3"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="0.4"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="0.5"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="0.8"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="0.9"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="1"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="1.1"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="1.2"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="5"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="304",entrypoint="web",method="HEAD",protocol="http",le="+Inf"} 4 +traefik_entrypoint_request_duration_seconds_sum{code="304",entrypoint="web",method="HEAD",protocol="http"} 0.0044282570000000005 +traefik_entrypoint_request_duration_seconds_count{code="304",entrypoint="web",method="HEAD",protocol="http"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="0.1"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="0.2"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="0.3"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="0.4"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="0.5"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="0.8"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="0.9"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="1"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="1.1"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="1.2"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="5"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="traefik",method="GET",protocol="http",le="+Inf"} 5 +traefik_entrypoint_request_duration_seconds_sum{code="400",entrypoint="traefik",method="GET",protocol="http"} 0.0006326610000000001 +traefik_entrypoint_request_duration_seconds_count{code="400",entrypoint="traefik",method="GET",protocol="http"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="0.1"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="0.2"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="0.3"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="0.4"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="0.5"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="0.8"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="0.9"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="1"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="1.1"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="1.2"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="5"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="GET",protocol="http",le="+Inf"} 8 +traefik_entrypoint_request_duration_seconds_sum{code="400",entrypoint="web",method="GET",protocol="http"} 0.010426270999999999 +traefik_entrypoint_request_duration_seconds_count{code="400",entrypoint="web",method="GET",protocol="http"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="0.1"} 42862 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="0.2"} 43468 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="0.3"} 43839 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="0.4"} 43940 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="0.5"} 43978 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="0.8"} 44029 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="0.9"} 44038 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="1"} 44049 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="1.1"} 44061 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="1.2"} 44066 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="5"} 44106 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="POST",protocol="http",le="+Inf"} 59417 +traefik_entrypoint_request_duration_seconds_sum{code="400",entrypoint="web",method="POST",protocol="http"} 77544.51951296844 +traefik_entrypoint_request_duration_seconds_count{code="400",entrypoint="web",method="POST",protocol="http"} 59417 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="0.1"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="0.2"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="0.3"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="0.4"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="0.5"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="0.8"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="0.9"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="1"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="1.1"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="1.2"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="5"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="400",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 4757 +traefik_entrypoint_request_duration_seconds_sum{code="400",entrypoint="web",method="PUT",protocol="http"} 7.191891319000009 +traefik_entrypoint_request_duration_seconds_count{code="400",entrypoint="web",method="PUT",protocol="http"} 4757 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="0.1"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="0.2"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="0.3"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="0.4"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="0.5"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="0.8"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="0.9"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="1"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="1.1"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="1.2"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="5"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="DELETE",protocol="http",le="+Inf"} 2 +traefik_entrypoint_request_duration_seconds_sum{code="401",entrypoint="web",method="DELETE",protocol="http"} 0.0018184479999999999 +traefik_entrypoint_request_duration_seconds_count{code="401",entrypoint="web",method="DELETE",protocol="http"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="0.1"} 2.289379e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="0.2"} 2.2896175e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="0.3"} 2.2896199e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="0.4"} 2.2896204e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="0.5"} 2.2896211e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="0.8"} 2.2896212e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="0.9"} 2.2896213e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="1"} 2.2896213e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="1.1"} 2.2896213e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="1.2"} 2.2896213e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="5"} 2.2896213e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="GET",protocol="http",le="+Inf"} 2.2896213e+07 +traefik_entrypoint_request_duration_seconds_sum{code="401",entrypoint="web",method="GET",protocol="http"} 25752.359368771624 +traefik_entrypoint_request_duration_seconds_count{code="401",entrypoint="web",method="GET",protocol="http"} 2.2896213e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="1"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="5"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 10 +traefik_entrypoint_request_duration_seconds_sum{code="401",entrypoint="web",method="PATCH",protocol="http"} 0.010515436999999999 +traefik_entrypoint_request_duration_seconds_count{code="401",entrypoint="web",method="PATCH",protocol="http"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="0.1"} 927908 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="0.2"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="0.3"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="0.4"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="0.5"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="0.8"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="0.9"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="1"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="1.1"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="1.2"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="5"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="POST",protocol="http",le="+Inf"} 927912 +traefik_entrypoint_request_duration_seconds_sum{code="401",entrypoint="web",method="POST",protocol="http"} 995.9855624980047 +traefik_entrypoint_request_duration_seconds_count{code="401",entrypoint="web",method="POST",protocol="http"} 927912 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="0.1"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="0.2"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="0.3"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="0.4"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="0.5"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="0.8"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="0.9"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="1"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="1.1"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="1.2"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="5"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="401",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 75 +traefik_entrypoint_request_duration_seconds_sum{code="401",entrypoint="web",method="PUT",protocol="http"} 0.16541799500000004 +traefik_entrypoint_request_duration_seconds_count{code="401",entrypoint="web",method="PUT",protocol="http"} 75 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="0.1"} 830 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="0.2"} 830 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="0.3"} 830 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="0.4"} 830 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="0.5"} 830 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="0.8"} 831 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="0.9"} 831 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="1"} 831 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="1.1"} 831 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="1.2"} 831 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="5"} 831 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="DELETE",protocol="http",le="+Inf"} 831 +traefik_entrypoint_request_duration_seconds_sum{code="403",entrypoint="web",method="DELETE",protocol="http"} 9.061551029999986 +traefik_entrypoint_request_duration_seconds_count{code="403",entrypoint="web",method="DELETE",protocol="http"} 831 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="0.1"} 216932 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="0.2"} 217462 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="0.3"} 217600 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="0.4"} 217648 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="0.5"} 217684 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="0.8"} 217723 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="0.9"} 217728 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="1"} 217739 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="1.1"} 217744 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="1.2"} 217747 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="5"} 217766 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="GET",protocol="http",le="+Inf"} 217771 +traefik_entrypoint_request_duration_seconds_sum{code="403",entrypoint="web",method="GET",protocol="http"} 1243.8479915990079 +traefik_entrypoint_request_duration_seconds_count{code="403",entrypoint="web",method="GET",protocol="http"} 217771 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 90 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 90 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 90 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 90 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="1"} 90 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 90 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 90 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="5"} 90 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 90 +traefik_entrypoint_request_duration_seconds_sum{code="403",entrypoint="web",method="PATCH",protocol="http"} 1.039575084 +traefik_entrypoint_request_duration_seconds_count{code="403",entrypoint="web",method="PATCH",protocol="http"} 90 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="0.1"} 658814 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="0.2"} 667999 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="0.3"} 668305 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="0.4"} 668348 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="0.5"} 668368 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="0.8"} 668417 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="0.9"} 668427 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="1"} 668436 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="1.1"} 668441 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="1.2"} 668443 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="5"} 668485 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="POST",protocol="http",le="+Inf"} 668504 +traefik_entrypoint_request_duration_seconds_sum{code="403",entrypoint="web",method="POST",protocol="http"} 5763.404909136024 +traefik_entrypoint_request_duration_seconds_count{code="403",entrypoint="web",method="POST",protocol="http"} 668504 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="0.1"} 387 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="0.2"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="0.3"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="0.4"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="0.5"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="0.8"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="0.9"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="1"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="1.1"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="1.2"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="5"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="403",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 388 +traefik_entrypoint_request_duration_seconds_sum{code="403",entrypoint="web",method="PUT",protocol="http"} 1.0210683440000006 +traefik_entrypoint_request_duration_seconds_count{code="403",entrypoint="web",method="PUT",protocol="http"} 388 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="0.1"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="0.2"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="0.3"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="0.4"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="0.5"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="0.8"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="0.9"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="1"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="1.1"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="1.2"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="5"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="traefik",method="GET",protocol="http",le="+Inf"} 3 +traefik_entrypoint_request_duration_seconds_sum{code="404",entrypoint="traefik",method="GET",protocol="http"} 0.000172581 +traefik_entrypoint_request_duration_seconds_count{code="404",entrypoint="traefik",method="GET",protocol="http"} 3 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="0.1"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="0.2"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="0.3"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="0.4"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="0.5"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="0.8"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="0.9"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="1"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="1.1"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="1.2"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="5"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="DELETE",protocol="http",le="+Inf"} 5 +traefik_entrypoint_request_duration_seconds_sum{code="404",entrypoint="web",method="DELETE",protocol="http"} 0.049077042999999994 +traefik_entrypoint_request_duration_seconds_count{code="404",entrypoint="web",method="DELETE",protocol="http"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="0.1"} 1.6708334e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="0.2"} 2.4431309e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="0.3"} 2.4897006e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="0.4"} 2.5060706e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="0.5"} 2.5158815e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="0.8"} 2.5319277e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="0.9"} 2.5348008e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="1"} 2.5366706e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="1.1"} 2.5380618e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="1.2"} 2.5390269e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="5"} 2.5431782e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="http",le="+Inf"} 2.5435602e+07 +traefik_entrypoint_request_duration_seconds_sum{code="404",entrypoint="web",method="GET",protocol="http"} 1.5730236608823321e+06 +traefik_entrypoint_request_duration_seconds_count{code="404",entrypoint="web",method="GET",protocol="http"} 2.5435602e+07 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="0.1"} 76149 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="0.2"} 77389 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="0.3"} 78136 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="0.4"} 78736 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="0.5"} 78893 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="0.8"} 79100 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="0.9"} 79112 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="1"} 79125 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="1.1"} 79134 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="1.2"} 79137 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="5"} 79137 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="GET",protocol="websocket",le="+Inf"} 79137 +traefik_entrypoint_request_duration_seconds_sum{code="404",entrypoint="web",method="GET",protocol="websocket"} 952.6657687000076 +traefik_entrypoint_request_duration_seconds_count{code="404",entrypoint="web",method="GET",protocol="websocket"} 79137 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="0.1"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="0.2"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="0.3"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="0.4"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="0.5"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="0.8"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="0.9"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="1"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="1.1"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="1.2"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="5"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="HEAD",protocol="http",le="+Inf"} 440 +traefik_entrypoint_request_duration_seconds_sum{code="404",entrypoint="web",method="HEAD",protocol="http"} 0.8076752390000003 +traefik_entrypoint_request_duration_seconds_count{code="404",entrypoint="web",method="HEAD",protocol="http"} 440 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="1"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="5"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 10 +traefik_entrypoint_request_duration_seconds_sum{code="404",entrypoint="web",method="PATCH",protocol="http"} 0.106270053 +traefik_entrypoint_request_duration_seconds_count{code="404",entrypoint="web",method="PATCH",protocol="http"} 10 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="0.1"} 11831 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="0.2"} 11996 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="0.3"} 12058 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="0.4"} 12066 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="0.5"} 12068 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="0.8"} 12080 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="0.9"} 12084 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="1"} 12086 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="1.1"} 12087 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="1.2"} 12091 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="5"} 12112 +traefik_entrypoint_request_duration_seconds_bucket{code="404",entrypoint="web",method="POST",protocol="http",le="+Inf"} 12125 +traefik_entrypoint_request_duration_seconds_sum{code="404",entrypoint="web",method="POST",protocol="http"} 354.48999692400014 +traefik_entrypoint_request_duration_seconds_count{code="404",entrypoint="web",method="POST",protocol="http"} 12125 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="0.1"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="0.2"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="0.3"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="0.4"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="0.5"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="0.8"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="0.9"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="1"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="1.1"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="1.2"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="5"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="OPTIONS",protocol="http",le="+Inf"} 89 +traefik_entrypoint_request_duration_seconds_sum{code="405",entrypoint="web",method="OPTIONS",protocol="http"} 0.111158589 +traefik_entrypoint_request_duration_seconds_count{code="405",entrypoint="web",method="OPTIONS",protocol="http"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="1"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="5"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 1 +traefik_entrypoint_request_duration_seconds_sum{code="405",entrypoint="web",method="PATCH",protocol="http"} 0.000997012 +traefik_entrypoint_request_duration_seconds_count{code="405",entrypoint="web",method="PATCH",protocol="http"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="0.1"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="0.2"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="0.3"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="0.4"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="0.5"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="0.8"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="0.9"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="1"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="1.1"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="1.2"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="5"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="POST",protocol="http",le="+Inf"} 13 +traefik_entrypoint_request_duration_seconds_sum{code="405",entrypoint="web",method="POST",protocol="http"} 0.015701319999999998 +traefik_entrypoint_request_duration_seconds_count{code="405",entrypoint="web",method="POST",protocol="http"} 13 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="0.1"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="0.2"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="0.3"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="0.4"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="0.5"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="0.8"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="0.9"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="1"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="1.1"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="1.2"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="5"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="405",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 518 +traefik_entrypoint_request_duration_seconds_sum{code="405",entrypoint="web",method="PUT",protocol="http"} 0.7715693390000001 +traefik_entrypoint_request_duration_seconds_count{code="405",entrypoint="web",method="PUT",protocol="http"} 518 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="0.1"} 2.12735267e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="0.2"} 2.12837945e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="0.3"} 2.12867308e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="0.4"} 2.12881286e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="0.5"} 2.12890892e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="0.8"} 2.12908516e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="0.9"} 2.12912307e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="1"} 2.12915414e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="1.1"} 2.12918123e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="1.2"} 2.12920839e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="5"} 2.12981945e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="GET",protocol="http",le="+Inf"} 2.13012914e+08 +traefik_entrypoint_request_duration_seconds_sum{code="409",entrypoint="web",method="GET",protocol="http"} 1.440885906018625e+06 +traefik_entrypoint_request_duration_seconds_count{code="409",entrypoint="web",method="GET",protocol="http"} 2.13012914e+08 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 289 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 289 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 289 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 290 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 290 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 290 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 290 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="1"} 290 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 290 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 291 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="5"} 293 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 293 +traefik_entrypoint_request_duration_seconds_sum{code="409",entrypoint="web",method="PATCH",protocol="http"} 8.790643885000003 +traefik_entrypoint_request_duration_seconds_count{code="409",entrypoint="web",method="PATCH",protocol="http"} 293 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="0.1"} 180 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="0.2"} 185 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="0.3"} 189 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="0.4"} 191 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="0.5"} 191 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="0.8"} 192 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="0.9"} 192 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="1"} 192 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="1.1"} 192 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="1.2"} 192 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="5"} 194 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="POST",protocol="http",le="+Inf"} 195 +traefik_entrypoint_request_duration_seconds_sum{code="409",entrypoint="web",method="POST",protocol="http"} 17.934394692999998 +traefik_entrypoint_request_duration_seconds_count{code="409",entrypoint="web",method="POST",protocol="http"} 195 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="0.1"} 38126 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="0.2"} 40054 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="0.3"} 40533 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="0.4"} 40866 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="0.5"} 41024 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="0.8"} 41282 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="0.9"} 41337 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="1"} 41373 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="1.1"} 41399 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="1.2"} 41422 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="5"} 41610 +traefik_entrypoint_request_duration_seconds_bucket{code="409",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 41665 +traefik_entrypoint_request_duration_seconds_sum{code="409",entrypoint="web",method="PUT",protocol="http"} 3606.133672342983 +traefik_entrypoint_request_duration_seconds_count{code="409",entrypoint="web",method="PUT",protocol="http"} 41665 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="0.1"} 1.706487e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="0.2"} 1.7067e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="0.3"} 1.706726e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="0.4"} 1.706742e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="0.5"} 1.706757e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="0.8"} 1.706779e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="0.9"} 1.706783e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="1"} 1.706789e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="1.1"} 1.706791e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="1.2"} 1.706797e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="5"} 1.706888e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="GET",protocol="http",le="+Inf"} 1.706931e+06 +traefik_entrypoint_request_duration_seconds_sum{code="410",entrypoint="web",method="GET",protocol="http"} 5115.734139137677 +traefik_entrypoint_request_duration_seconds_count{code="410",entrypoint="web",method="GET",protocol="http"} 1.706931e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="1"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="5"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="410",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 1 +traefik_entrypoint_request_duration_seconds_sum{code="410",entrypoint="web",method="PATCH",protocol="http"} 0.005254578 +traefik_entrypoint_request_duration_seconds_count{code="410",entrypoint="web",method="PATCH",protocol="http"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="0.1"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="0.2"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="0.3"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="0.4"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="0.5"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="0.8"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="0.9"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="1"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="1.1"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="1.2"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="5"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="DELETE",protocol="http",le="+Inf"} 1 +traefik_entrypoint_request_duration_seconds_sum{code="422",entrypoint="web",method="DELETE",protocol="http"} 0.023973863 +traefik_entrypoint_request_duration_seconds_count{code="422",entrypoint="web",method="DELETE",protocol="http"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="0.1"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="0.2"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="0.3"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="0.4"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="0.5"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="0.8"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="0.9"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="1"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="1.1"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="1.2"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="5"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="GET",protocol="http",le="+Inf"} 20 +traefik_entrypoint_request_duration_seconds_sum{code="422",entrypoint="web",method="GET",protocol="http"} 0.039623226 +traefik_entrypoint_request_duration_seconds_count{code="422",entrypoint="web",method="GET",protocol="http"} 20 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="1"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="5"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 26 +traefik_entrypoint_request_duration_seconds_sum{code="422",entrypoint="web",method="PATCH",protocol="http"} 0.083693077 +traefik_entrypoint_request_duration_seconds_count{code="422",entrypoint="web",method="PATCH",protocol="http"} 26 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="0.1"} 939 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="0.2"} 948 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="0.3"} 953 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="0.4"} 953 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="0.5"} 954 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="0.8"} 954 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="0.9"} 954 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="1"} 954 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="1.1"} 954 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="1.2"} 954 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="5"} 955 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="POST",protocol="http",le="+Inf"} 955 +traefik_entrypoint_request_duration_seconds_sum{code="422",entrypoint="web",method="POST",protocol="http"} 11.256437256000007 +traefik_entrypoint_request_duration_seconds_count{code="422",entrypoint="web",method="POST",protocol="http"} 955 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="0.1"} 12620 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="0.2"} 12624 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="0.3"} 12627 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="0.4"} 12627 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="0.5"} 12627 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="0.8"} 12628 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="0.9"} 12628 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="1"} 12628 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="1.1"} 12628 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="1.2"} 12628 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="5"} 12628 +traefik_entrypoint_request_duration_seconds_bucket{code="422",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 12628 +traefik_entrypoint_request_duration_seconds_sum{code="422",entrypoint="web",method="PUT",protocol="http"} 30.15632766300003 +traefik_entrypoint_request_duration_seconds_count{code="422",entrypoint="web",method="PUT",protocol="http"} 12628 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="0.1"} 2.103905e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="0.2"} 2.103908e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="0.3"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="0.4"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="0.5"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="0.8"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="0.9"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="1"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="1.1"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="1.2"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="5"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="GET",protocol="http",le="+Inf"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_sum{code="429",entrypoint="web",method="GET",protocol="http"} 336.7924126419656 +traefik_entrypoint_request_duration_seconds_count{code="429",entrypoint="web",method="GET",protocol="http"} 2.103909e+06 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="0.1"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="0.2"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="0.3"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="0.4"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="0.5"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="0.8"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="0.9"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="1"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="1.1"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="1.2"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="5"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="429",entrypoint="web",method="POST",protocol="http",le="+Inf"} 205 +traefik_entrypoint_request_duration_seconds_sum{code="429",entrypoint="web",method="POST",protocol="http"} 0.027288120999999995 +traefik_entrypoint_request_duration_seconds_count{code="429",entrypoint="web",method="POST",protocol="http"} 205 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="0.1"} 83 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="0.2"} 144 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="0.3"} 168 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="0.4"} 184 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="0.5"} 194 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="0.8"} 231 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="0.9"} 232 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="1"} 234 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="1.1"} 235 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="1.2"} 235 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="5"} 343 +traefik_entrypoint_request_duration_seconds_bucket{code="444",entrypoint="web",method="GET",protocol="http",le="+Inf"} 1255 +traefik_entrypoint_request_duration_seconds_sum{code="444",entrypoint="web",method="GET",protocol="http"} 29923.69344054194 +traefik_entrypoint_request_duration_seconds_count{code="444",entrypoint="web",method="GET",protocol="http"} 1255 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="0.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="0.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="0.3"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="0.4"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="0.5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="0.8"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="0.9"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="1.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="1.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="445",entrypoint="web",method="GET",protocol="http",le="+Inf"} 269941 +traefik_entrypoint_request_duration_seconds_sum{code="445",entrypoint="web",method="GET",protocol="http"} 1.6198159394737784e+07 +traefik_entrypoint_request_duration_seconds_count{code="445",entrypoint="web",method="GET",protocol="http"} 269941 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="0.1"} 499 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="0.2"} 744 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="0.3"} 842 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="0.4"} 918 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="0.5"} 970 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="0.8"} 1061 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="0.9"} 1074 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="1"} 1094 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="1.1"} 1105 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="1.2"} 1132 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="5"} 1884 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="GET",protocol="http",le="+Inf"} 5075 +traefik_entrypoint_request_duration_seconds_sum{code="499",entrypoint="web",method="GET",protocol="http"} 138388.62840130684 +traefik_entrypoint_request_duration_seconds_count{code="499",entrypoint="web",method="GET",protocol="http"} 5075 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="5"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 2 +traefik_entrypoint_request_duration_seconds_sum{code="499",entrypoint="web",method="PATCH",protocol="http"} 45.061508693 +traefik_entrypoint_request_duration_seconds_count{code="499",entrypoint="web",method="PATCH",protocol="http"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="0.1"} 85786 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="0.2"} 125143 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="0.3"} 144101 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="0.4"} 151775 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="0.5"} 156313 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="0.8"} 163673 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="0.9"} 165387 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="1"} 166772 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="1.1"} 168246 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="1.2"} 169461 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="5"} 193067 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="POST",protocol="http",le="+Inf"} 194455 +traefik_entrypoint_request_duration_seconds_sum{code="499",entrypoint="web",method="POST",protocol="http"} 171588.70865418628 +traefik_entrypoint_request_duration_seconds_count{code="499",entrypoint="web",method="POST",protocol="http"} 194455 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="0.1"} 70 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="0.2"} 79 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="0.3"} 88 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="0.4"} 89 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="0.5"} 92 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="0.8"} 93 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="0.9"} 94 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="1"} 94 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="1.1"} 94 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="1.2"} 94 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="5"} 94 +traefik_entrypoint_request_duration_seconds_bucket{code="499",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 16127 +traefik_entrypoint_request_duration_seconds_sum{code="499",entrypoint="web",method="PUT",protocol="http"} 4.809399570415463e+06 +traefik_entrypoint_request_duration_seconds_count{code="499",entrypoint="web",method="PUT",protocol="http"} 16127 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="0.1"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="0.2"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="0.3"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="0.4"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="0.5"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="0.8"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="0.9"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="1"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="1.1"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="1.2"} 5 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="5"} 7 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="DELETE",protocol="http",le="+Inf"} 7 +traefik_entrypoint_request_duration_seconds_sum{code="500",entrypoint="web",method="DELETE",protocol="http"} 2.9226568759999996 +traefik_entrypoint_request_duration_seconds_count{code="500",entrypoint="web",method="DELETE",protocol="http"} 7 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="0.1"} 4304 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="0.2"} 4314 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="0.3"} 4315 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="0.4"} 4317 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="0.5"} 4322 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="0.8"} 4333 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="0.9"} 4333 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="1"} 4333 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="1.1"} 4333 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="1.2"} 4334 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="5"} 4334 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="GET",protocol="http",le="+Inf"} 12951 +traefik_entrypoint_request_duration_seconds_sum{code="500",entrypoint="web",method="GET",protocol="http"} 495411.215290646 +traefik_entrypoint_request_duration_seconds_count{code="500",entrypoint="web",method="GET",protocol="http"} 12951 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="1"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 11 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="5"} 12 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 12 +traefik_entrypoint_request_duration_seconds_sum{code="500",entrypoint="web",method="PATCH",protocol="http"} 3.4746266410000004 +traefik_entrypoint_request_duration_seconds_count{code="500",entrypoint="web",method="PATCH",protocol="http"} 12 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="0.1"} 321 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="0.2"} 322 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="0.3"} 323 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="0.4"} 323 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="0.5"} 323 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="0.8"} 324 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="0.9"} 325 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="1"} 325 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="1.1"} 325 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="1.2"} 325 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="5"} 339 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="POST",protocol="http",le="+Inf"} 2196 +traefik_entrypoint_request_duration_seconds_sum{code="500",entrypoint="web",method="POST",protocol="http"} 112599.76971862414 +traefik_entrypoint_request_duration_seconds_count{code="500",entrypoint="web",method="POST",protocol="http"} 2196 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="0.1"} 17 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="0.2"} 18 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="0.3"} 18 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="0.4"} 18 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="0.5"} 18 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="0.8"} 18 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="0.9"} 18 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="1"} 18 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="1.1"} 18 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="1.2"} 19 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="5"} 22 +traefik_entrypoint_request_duration_seconds_bucket{code="500",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 1551 +traefik_entrypoint_request_duration_seconds_sum{code="500",entrypoint="web",method="PUT",protocol="http"} 254492.6350865842 +traefik_entrypoint_request_duration_seconds_count{code="500",entrypoint="web",method="PUT",protocol="http"} 1551 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="0.1"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="0.2"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="0.3"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="0.4"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="0.5"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="0.8"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="0.9"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="1"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="1.1"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="1.2"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="5"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="DELETE",protocol="http",le="+Inf"} 4 +traefik_entrypoint_request_duration_seconds_sum{code="502",entrypoint="web",method="DELETE",protocol="http"} 0.006532118999999999 +traefik_entrypoint_request_duration_seconds_count{code="502",entrypoint="web",method="DELETE",protocol="http"} 4 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="0.1"} 107436 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="0.2"} 107462 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="0.3"} 107466 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="0.4"} 107471 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="0.5"} 107478 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="0.8"} 107500 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="0.9"} 107508 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="1"} 107522 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="1.1"} 107568 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="1.2"} 107586 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="5"} 107931 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="GET",protocol="http",le="+Inf"} 115170 +traefik_entrypoint_request_duration_seconds_sum{code="502",entrypoint="web",method="GET",protocol="http"} 241715.94925767966 +traefik_entrypoint_request_duration_seconds_count{code="502",entrypoint="web",method="GET",protocol="http"} 115170 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="0.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="0.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="0.3"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="0.4"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="0.5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="0.8"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="0.9"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="1.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="1.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="5"} 1 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PATCH",protocol="http",le="+Inf"} 2 +traefik_entrypoint_request_duration_seconds_sum{code="502",entrypoint="web",method="PATCH",protocol="http"} 27.351390443 +traefik_entrypoint_request_duration_seconds_count{code="502",entrypoint="web",method="PATCH",protocol="http"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="0.1"} 902 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="0.2"} 987 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="0.3"} 1046 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="0.4"} 1088 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="0.5"} 1104 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="0.8"} 1149 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="0.9"} 1158 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="1"} 1169 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="1.1"} 1182 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="1.2"} 1197 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="5"} 1400 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="POST",protocol="http",le="+Inf"} 2900 +traefik_entrypoint_request_duration_seconds_sum{code="502",entrypoint="web",method="POST",protocol="http"} 1.0039723839193305e+06 +traefik_entrypoint_request_duration_seconds_count{code="502",entrypoint="web",method="POST",protocol="http"} 2900 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="0.1"} 36 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="0.2"} 37 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="0.3"} 37 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="0.4"} 37 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="0.5"} 37 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="0.8"} 37 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="0.9"} 38 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="1"} 38 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="1.1"} 38 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="1.2"} 38 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="5"} 38 +traefik_entrypoint_request_duration_seconds_bucket{code="502",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 40 +traefik_entrypoint_request_duration_seconds_sum{code="502",entrypoint="web",method="PUT",protocol="http"} 32.391189919 +traefik_entrypoint_request_duration_seconds_count{code="502",entrypoint="web",method="PUT",protocol="http"} 40 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="0.1"} 72447 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="0.2"} 72448 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="0.3"} 72448 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="0.4"} 72448 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="0.5"} 72448 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="0.8"} 72448 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="0.9"} 72448 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="1"} 72448 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="1.1"} 72448 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="1.2"} 72448 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="5"} 72454 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="GET",protocol="http",le="+Inf"} 72538 +traefik_entrypoint_request_duration_seconds_sum{code="503",entrypoint="web",method="GET",protocol="http"} 2883.984412680031 +traefik_entrypoint_request_duration_seconds_count{code="503",entrypoint="web",method="GET",protocol="http"} 72538 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="0.1"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="0.2"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="0.3"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="0.4"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="0.5"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="0.8"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="0.9"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="1"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="1.1"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="1.2"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="5"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="503",entrypoint="web",method="POST",protocol="http",le="+Inf"} 15648 +traefik_entrypoint_request_duration_seconds_sum{code="503",entrypoint="web",method="POST",protocol="http"} 18.386133866 +traefik_entrypoint_request_duration_seconds_count{code="503",entrypoint="web",method="POST",protocol="http"} 15648 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="0.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="0.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="0.3"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="0.4"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="0.5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="0.8"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="0.9"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="1.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="1.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="GET",protocol="http",le="+Inf"} 8 +traefik_entrypoint_request_duration_seconds_sum{code="504",entrypoint="web",method="GET",protocol="http"} 240.012145339 +traefik_entrypoint_request_duration_seconds_count{code="504",entrypoint="web",method="GET",protocol="http"} 8 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="0.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="0.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="0.3"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="0.4"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="0.5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="0.8"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="0.9"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="1.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="1.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="POST",protocol="http",le="+Inf"} 2 +traefik_entrypoint_request_duration_seconds_sum{code="504",entrypoint="web",method="POST",protocol="http"} 60.003337996 +traefik_entrypoint_request_duration_seconds_count{code="504",entrypoint="web",method="POST",protocol="http"} 2 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="0.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="0.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="0.3"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="0.4"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="0.5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="0.8"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="0.9"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="1.1"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="1.2"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="5"} 0 +traefik_entrypoint_request_duration_seconds_bucket{code="504",entrypoint="web",method="PUT",protocol="http",le="+Inf"} 107 +traefik_entrypoint_request_duration_seconds_sum{code="504",entrypoint="web",method="PUT",protocol="http"} 3683.539644907 +traefik_entrypoint_request_duration_seconds_count{code="504",entrypoint="web",method="PUT",protocol="http"} 107 +# HELP traefik_entrypoint_requests_total How many HTTP requests processed on an entrypoint, partitioned by status code, protocol, and method. +# TYPE traefik_entrypoint_requests_total counter +traefik_entrypoint_requests_total{code="200",entrypoint="traefik",method="GET",protocol="http"} 2.840814e+06 +traefik_entrypoint_requests_total{code="200",entrypoint="web",method="GET",protocol="http"} 7.87262719e+08 +traefik_entrypoint_requests_total{code="200",entrypoint="web",method="HEAD",protocol="http"} 6311 +traefik_entrypoint_requests_total{code="200",entrypoint="web",method="PATCH",protocol="http"} 6047 +traefik_entrypoint_requests_total{code="200",entrypoint="web",method="POST",protocol="http"} 7.1907943e+07 +traefik_entrypoint_requests_total{code="201",entrypoint="web",method="POST",protocol="http"} 1.76862498e+08 +traefik_entrypoint_requests_total{code="204",entrypoint="web",method="DELETE",protocol="http"} 10446 +traefik_entrypoint_requests_total{code="204",entrypoint="web",method="PATCH",protocol="http"} 30606 +traefik_entrypoint_requests_total{code="204",entrypoint="web",method="POST",protocol="http"} 66555 +traefik_entrypoint_requests_total{code="204",entrypoint="web",method="PUT",protocol="http"} 49872 +traefik_entrypoint_requests_total{code="206",entrypoint="web",method="GET",protocol="http"} 3046 +traefik_entrypoint_requests_total{code="206",entrypoint="web",method="HEAD",protocol="http"} 35 +traefik_entrypoint_requests_total{code="207",entrypoint="web",method="DELETE",protocol="http"} 2775 +traefik_entrypoint_requests_total{code="207",entrypoint="web",method="POST",protocol="http"} 129 +traefik_entrypoint_requests_total{code="301",entrypoint="web",method="GET",protocol="http"} 248 +traefik_entrypoint_requests_total{code="302",entrypoint="web",method="GET",protocol="http"} 48623 +traefik_entrypoint_requests_total{code="304",entrypoint="web",method="GET",protocol="http"} 367387 +traefik_entrypoint_requests_total{code="304",entrypoint="web",method="HEAD",protocol="http"} 4 +traefik_entrypoint_requests_total{code="400",entrypoint="traefik",method="GET",protocol="http"} 5 +traefik_entrypoint_requests_total{code="400",entrypoint="web",method="GET",protocol="http"} 8 +traefik_entrypoint_requests_total{code="400",entrypoint="web",method="POST",protocol="http"} 59417 +traefik_entrypoint_requests_total{code="400",entrypoint="web",method="PUT",protocol="http"} 4757 +traefik_entrypoint_requests_total{code="401",entrypoint="web",method="DELETE",protocol="http"} 2 +traefik_entrypoint_requests_total{code="401",entrypoint="web",method="GET",protocol="http"} 2.2896213e+07 +traefik_entrypoint_requests_total{code="401",entrypoint="web",method="PATCH",protocol="http"} 10 +traefik_entrypoint_requests_total{code="401",entrypoint="web",method="POST",protocol="http"} 927912 +traefik_entrypoint_requests_total{code="401",entrypoint="web",method="PUT",protocol="http"} 75 +traefik_entrypoint_requests_total{code="403",entrypoint="web",method="DELETE",protocol="http"} 831 +traefik_entrypoint_requests_total{code="403",entrypoint="web",method="GET",protocol="http"} 217771 +traefik_entrypoint_requests_total{code="403",entrypoint="web",method="PATCH",protocol="http"} 90 +traefik_entrypoint_requests_total{code="403",entrypoint="web",method="POST",protocol="http"} 668504 +traefik_entrypoint_requests_total{code="403",entrypoint="web",method="PUT",protocol="http"} 388 +traefik_entrypoint_requests_total{code="404",entrypoint="traefik",method="GET",protocol="http"} 3 +traefik_entrypoint_requests_total{code="404",entrypoint="web",method="DELETE",protocol="http"} 5 +traefik_entrypoint_requests_total{code="404",entrypoint="web",method="GET",protocol="http"} 2.5435602e+07 +traefik_entrypoint_requests_total{code="404",entrypoint="web",method="GET",protocol="websocket"} 79137 +traefik_entrypoint_requests_total{code="404",entrypoint="web",method="HEAD",protocol="http"} 440 +traefik_entrypoint_requests_total{code="404",entrypoint="web",method="PATCH",protocol="http"} 10 +traefik_entrypoint_requests_total{code="404",entrypoint="web",method="POST",protocol="http"} 12125 +traefik_entrypoint_requests_total{code="405",entrypoint="web",method="OPTIONS",protocol="http"} 89 +traefik_entrypoint_requests_total{code="405",entrypoint="web",method="PATCH",protocol="http"} 1 +traefik_entrypoint_requests_total{code="405",entrypoint="web",method="POST",protocol="http"} 13 +traefik_entrypoint_requests_total{code="405",entrypoint="web",method="PUT",protocol="http"} 518 +traefik_entrypoint_requests_total{code="409",entrypoint="web",method="GET",protocol="http"} 2.13012914e+08 +traefik_entrypoint_requests_total{code="409",entrypoint="web",method="PATCH",protocol="http"} 293 +traefik_entrypoint_requests_total{code="409",entrypoint="web",method="POST",protocol="http"} 195 +traefik_entrypoint_requests_total{code="409",entrypoint="web",method="PUT",protocol="http"} 41665 +traefik_entrypoint_requests_total{code="410",entrypoint="web",method="GET",protocol="http"} 1.706931e+06 +traefik_entrypoint_requests_total{code="410",entrypoint="web",method="PATCH",protocol="http"} 1 +traefik_entrypoint_requests_total{code="422",entrypoint="web",method="DELETE",protocol="http"} 1 +traefik_entrypoint_requests_total{code="422",entrypoint="web",method="GET",protocol="http"} 20 +traefik_entrypoint_requests_total{code="422",entrypoint="web",method="PATCH",protocol="http"} 26 +traefik_entrypoint_requests_total{code="422",entrypoint="web",method="POST",protocol="http"} 955 +traefik_entrypoint_requests_total{code="422",entrypoint="web",method="PUT",protocol="http"} 12628 +traefik_entrypoint_requests_total{code="429",entrypoint="web",method="GET",protocol="http"} 2.103909e+06 +traefik_entrypoint_requests_total{code="429",entrypoint="web",method="POST",protocol="http"} 205 +traefik_entrypoint_requests_total{code="444",entrypoint="web",method="GET",protocol="http"} 1255 +traefik_entrypoint_requests_total{code="445",entrypoint="web",method="GET",protocol="http"} 269941 +traefik_entrypoint_requests_total{code="499",entrypoint="web",method="GET",protocol="http"} 5075 +traefik_entrypoint_requests_total{code="499",entrypoint="web",method="PATCH",protocol="http"} 2 +traefik_entrypoint_requests_total{code="499",entrypoint="web",method="POST",protocol="http"} 194455 +traefik_entrypoint_requests_total{code="499",entrypoint="web",method="PUT",protocol="http"} 16127 +traefik_entrypoint_requests_total{code="500",entrypoint="web",method="DELETE",protocol="http"} 7 +traefik_entrypoint_requests_total{code="500",entrypoint="web",method="GET",protocol="http"} 12951 +traefik_entrypoint_requests_total{code="500",entrypoint="web",method="PATCH",protocol="http"} 12 +traefik_entrypoint_requests_total{code="500",entrypoint="web",method="POST",protocol="http"} 2196 +traefik_entrypoint_requests_total{code="500",entrypoint="web",method="PUT",protocol="http"} 1551 +traefik_entrypoint_requests_total{code="502",entrypoint="web",method="DELETE",protocol="http"} 4 +traefik_entrypoint_requests_total{code="502",entrypoint="web",method="GET",protocol="http"} 115170 +traefik_entrypoint_requests_total{code="502",entrypoint="web",method="PATCH",protocol="http"} 2 +traefik_entrypoint_requests_total{code="502",entrypoint="web",method="POST",protocol="http"} 2900 +traefik_entrypoint_requests_total{code="502",entrypoint="web",method="PUT",protocol="http"} 40 +traefik_entrypoint_requests_total{code="503",entrypoint="web",method="GET",protocol="http"} 72538 +traefik_entrypoint_requests_total{code="503",entrypoint="web",method="POST",protocol="http"} 15648 +traefik_entrypoint_requests_total{code="504",entrypoint="web",method="GET",protocol="http"} 8 +traefik_entrypoint_requests_total{code="504",entrypoint="web",method="POST",protocol="http"} 2 +traefik_entrypoint_requests_total{code="504",entrypoint="web",method="PUT",protocol="http"} 107
\ No newline at end of file diff --git a/src/go/plugin/go.d/modules/traefik/traefik.go b/src/go/plugin/go.d/modules/traefik/traefik.go new file mode 100644 index 000000000..e38ff9699 --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/traefik.go @@ -0,0 +1,130 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package traefik + +import ( + _ "embed" + "errors" + "time" + + "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/web" +) + +//go:embed "config_schema.json" +var configSchema string + +func init() { + module.Register("traefik", module.Creator{ + JobConfigSchema: configSchema, + Create: func() module.Module { return New() }, + Config: func() any { return &Config{} }, + }) +} + +func New() *Traefik { + return &Traefik{ + Config: Config{ + HTTP: web.HTTP{ + Request: web.Request{ + URL: "http://127.0.0.1:8082/metrics", + }, + Client: web.Client{ + Timeout: web.Duration(time.Second), + }, + }, + }, + + charts: &module.Charts{}, + checkMetrics: true, + cache: &cache{ + entrypoints: make(map[string]*cacheEntrypoint), + }, + } +} + +type Config struct { + UpdateEvery int `yaml:"update_every,omitempty" json:"update_every"` + web.HTTP `yaml:",inline" json:""` +} + +type ( + Traefik struct { + module.Base + Config `yaml:",inline" json:""` + + charts *module.Charts + + prom prometheus.Prometheus + + checkMetrics bool + cache *cache + } + cache struct { + entrypoints map[string]*cacheEntrypoint + } + cacheEntrypoint struct { + name, proto string + requests *module.Chart + reqDur *module.Chart + reqDurData map[string]cacheEntrypointReqDur + openConn *module.Chart + openConnMethods map[string]bool + } + cacheEntrypointReqDur struct { + prev, cur struct{ reqs, secs float64 } + seen bool + } +) + +func (t *Traefik) Configuration() any { + return t.Config +} + +func (t *Traefik) Init() error { + if err := t.validateConfig(); err != nil { + t.Errorf("config validation: %v", err) + return err + } + + prom, err := t.initPrometheusClient() + if err != nil { + t.Errorf("prometheus client initialization: %v", err) + return err + } + t.prom = prom + + return nil +} + +func (t *Traefik) Check() error { + mx, err := t.collect() + if err != nil { + t.Error(err) + return err + } + if len(mx) == 0 { + return errors.New("no metrics collected") + } + return nil +} + +func (t *Traefik) Charts() *module.Charts { + return t.charts +} + +func (t *Traefik) Collect() map[string]int64 { + mx, err := t.collect() + if err != nil { + t.Error(err) + return nil + } + + if len(mx) == 0 { + return nil + } + return mx +} + +func (t *Traefik) Cleanup() {} diff --git a/src/go/plugin/go.d/modules/traefik/traefik_test.go b/src/go/plugin/go.d/modules/traefik/traefik_test.go new file mode 100644 index 000000000..f3ef024b8 --- /dev/null +++ b/src/go/plugin/go.d/modules/traefik/traefik_test.go @@ -0,0 +1,370 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package traefik + +import ( + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/tlscfg" + "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/web" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +var ( + dataConfigJSON, _ = os.ReadFile("testdata/config.json") + dataConfigYAML, _ = os.ReadFile("testdata/config.yaml") + + dataVer221Metrics, _ = os.ReadFile("testdata/v2.2.1/metrics.txt") +) + +func Test_testDataIsValid(t *testing.T) { + for name, data := range map[string][]byte{ + "dataConfigJSON": dataConfigJSON, + "dataConfigYAML": dataConfigYAML, + "dataVer221Metrics": dataVer221Metrics, + } { + require.NotNil(t, data, name) + } +} + +func TestTraefik_ConfigurationSerialize(t *testing.T) { + module.TestConfigurationSerialize(t, &Traefik{}, dataConfigJSON, dataConfigYAML) +} + +func TestTraefik_Init(t *testing.T) { + tests := map[string]struct { + config Config + wantFail bool + }{ + "success on default config": { + config: New().Config, + }, + "fails on unset 'url'": { + wantFail: true, + config: Config{HTTP: web.HTTP{ + Request: web.Request{}, + }}, + }, + "fails on invalid TLSCA": { + wantFail: true, + config: Config{ + HTTP: web.HTTP{ + Client: web.Client{ + TLSConfig: tlscfg.TLSConfig{TLSCA: "testdata/tls"}, + }, + }}, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + rdb := New() + rdb.Config = test.config + + if test.wantFail { + assert.Error(t, rdb.Init()) + } else { + assert.NoError(t, rdb.Init()) + } + }) + } +} + +func TestTraefik_Charts(t *testing.T) { + assert.NotNil(t, New().Charts()) +} + +func TestTraefik_Cleanup(t *testing.T) { + assert.NotPanics(t, New().Cleanup) +} + +func TestTraefik_Check(t *testing.T) { + tests := map[string]struct { + wantFail bool + prepare func(t *testing.T) (tk *Traefik, cleanup func()) + }{ + "success on valid response v2.3.1": { + wantFail: false, + prepare: prepareCaseTraefikV221Metrics, + }, + "fails on response with unexpected metrics (not HAProxy)": { + wantFail: true, + prepare: prepareCaseNotTraefikMetrics, + }, + "fails on 404 response": { + wantFail: true, + prepare: prepareCase404Response, + }, + "fails on connection refused": { + wantFail: true, + prepare: prepareCaseConnectionRefused, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + tk, cleanup := test.prepare(t) + defer cleanup() + + if test.wantFail { + assert.Error(t, tk.Check()) + } else { + assert.NoError(t, tk.Check()) + } + }) + } +} + +func TestTraefik_Collect(t *testing.T) { + tests := map[string]struct { + prepare func(t *testing.T) (tk *Traefik, cleanup func()) + wantCollected []map[string]int64 + }{ + "success on valid response v2.2.1": { + prepare: prepareCaseTraefikV221Metrics, + wantCollected: []map[string]int64{ + { + "entrypoint_open_connections_traefik_http_GET": 1, + "entrypoint_open_connections_web_http_DELETE": 0, + "entrypoint_open_connections_web_http_GET": 0, + "entrypoint_open_connections_web_http_HEAD": 0, + "entrypoint_open_connections_web_http_OPTIONS": 0, + "entrypoint_open_connections_web_http_PATCH": 0, + "entrypoint_open_connections_web_http_POST": 4, + "entrypoint_open_connections_web_http_PUT": 0, + "entrypoint_open_connections_web_websocket_GET": 0, + "entrypoint_request_duration_average_traefik_http_1xx": 0, + "entrypoint_request_duration_average_traefik_http_2xx": 0, + "entrypoint_request_duration_average_traefik_http_3xx": 0, + "entrypoint_request_duration_average_traefik_http_4xx": 0, + "entrypoint_request_duration_average_traefik_http_5xx": 0, + "entrypoint_request_duration_average_web_http_1xx": 0, + "entrypoint_request_duration_average_web_http_2xx": 0, + "entrypoint_request_duration_average_web_http_3xx": 0, + "entrypoint_request_duration_average_web_http_4xx": 0, + "entrypoint_request_duration_average_web_http_5xx": 0, + "entrypoint_request_duration_average_web_websocket_1xx": 0, + "entrypoint_request_duration_average_web_websocket_2xx": 0, + "entrypoint_request_duration_average_web_websocket_3xx": 0, + "entrypoint_request_duration_average_web_websocket_4xx": 0, + "entrypoint_request_duration_average_web_websocket_5xx": 0, + "entrypoint_requests_traefik_http_1xx": 0, + "entrypoint_requests_traefik_http_2xx": 2840814, + "entrypoint_requests_traefik_http_3xx": 0, + "entrypoint_requests_traefik_http_4xx": 8, + "entrypoint_requests_traefik_http_5xx": 0, + "entrypoint_requests_web_http_1xx": 0, + "entrypoint_requests_web_http_2xx": 1036208982, + "entrypoint_requests_web_http_3xx": 416262, + "entrypoint_requests_web_http_4xx": 267591379, + "entrypoint_requests_web_http_5xx": 223136, + "entrypoint_requests_web_websocket_1xx": 0, + "entrypoint_requests_web_websocket_2xx": 0, + "entrypoint_requests_web_websocket_3xx": 0, + "entrypoint_requests_web_websocket_4xx": 79137, + "entrypoint_requests_web_websocket_5xx": 0, + }, + }, + }, + "properly calculating entrypoint request duration delta": { + prepare: prepareCaseTraefikEntrypointRequestDuration, + wantCollected: []map[string]int64{ + { + "entrypoint_request_duration_average_traefik_http_1xx": 0, + "entrypoint_request_duration_average_traefik_http_2xx": 0, + "entrypoint_request_duration_average_traefik_http_3xx": 0, + "entrypoint_request_duration_average_traefik_http_4xx": 0, + "entrypoint_request_duration_average_traefik_http_5xx": 0, + "entrypoint_request_duration_average_web_websocket_1xx": 0, + "entrypoint_request_duration_average_web_websocket_2xx": 0, + "entrypoint_request_duration_average_web_websocket_3xx": 0, + "entrypoint_request_duration_average_web_websocket_4xx": 0, + "entrypoint_request_duration_average_web_websocket_5xx": 0, + }, + { + "entrypoint_request_duration_average_traefik_http_1xx": 0, + "entrypoint_request_duration_average_traefik_http_2xx": 500, + "entrypoint_request_duration_average_traefik_http_3xx": 0, + "entrypoint_request_duration_average_traefik_http_4xx": 0, + "entrypoint_request_duration_average_traefik_http_5xx": 0, + "entrypoint_request_duration_average_web_websocket_1xx": 0, + "entrypoint_request_duration_average_web_websocket_2xx": 0, + "entrypoint_request_duration_average_web_websocket_3xx": 250, + "entrypoint_request_duration_average_web_websocket_4xx": 0, + "entrypoint_request_duration_average_web_websocket_5xx": 0, + }, + { + "entrypoint_request_duration_average_traefik_http_1xx": 0, + "entrypoint_request_duration_average_traefik_http_2xx": 1000, + "entrypoint_request_duration_average_traefik_http_3xx": 0, + "entrypoint_request_duration_average_traefik_http_4xx": 0, + "entrypoint_request_duration_average_traefik_http_5xx": 0, + "entrypoint_request_duration_average_web_websocket_1xx": 0, + "entrypoint_request_duration_average_web_websocket_2xx": 0, + "entrypoint_request_duration_average_web_websocket_3xx": 500, + "entrypoint_request_duration_average_web_websocket_4xx": 0, + "entrypoint_request_duration_average_web_websocket_5xx": 0, + }, + { + "entrypoint_request_duration_average_traefik_http_1xx": 0, + "entrypoint_request_duration_average_traefik_http_2xx": 0, + "entrypoint_request_duration_average_traefik_http_3xx": 0, + "entrypoint_request_duration_average_traefik_http_4xx": 0, + "entrypoint_request_duration_average_traefik_http_5xx": 0, + "entrypoint_request_duration_average_web_websocket_1xx": 0, + "entrypoint_request_duration_average_web_websocket_2xx": 0, + "entrypoint_request_duration_average_web_websocket_3xx": 0, + "entrypoint_request_duration_average_web_websocket_4xx": 0, + "entrypoint_request_duration_average_web_websocket_5xx": 0, + }, + }, + }, + "fails on response with unexpected metrics (not Traefik)": { + prepare: prepareCaseNotTraefikMetrics, + }, + "fails on 404 response": { + prepare: prepareCase404Response, + }, + "fails on connection refused": { + prepare: prepareCaseConnectionRefused, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + tk, cleanup := test.prepare(t) + defer cleanup() + + var ms map[string]int64 + for _, want := range test.wantCollected { + ms = tk.Collect() + assert.Equal(t, want, ms) + } + if len(test.wantCollected) > 0 { + ensureCollectedHasAllChartsDimsVarsIDs(t, tk, ms) + } + }) + } +} + +func prepareCaseTraefikV221Metrics(t *testing.T) (*Traefik, func()) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write(dataVer221Metrics) + })) + h := New() + h.URL = srv.URL + require.NoError(t, h.Init()) + + return h, srv.Close +} + +func prepareCaseTraefikEntrypointRequestDuration(t *testing.T) (*Traefik, func()) { + t.Helper() + var num int + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + num++ + switch num { + case 1: + _, _ = w.Write([]byte(` +traefik_entrypoint_request_duration_seconds_sum{code="200",entrypoint="traefik",method="GET",protocol="http"} 10.1 +traefik_entrypoint_request_duration_seconds_sum{code="300",entrypoint="web",method="GET",protocol="websocket"} 20.1 +traefik_entrypoint_request_duration_seconds_count{code="200",entrypoint="traefik",method="PUT",protocol="http"} 30 +traefik_entrypoint_request_duration_seconds_count{code="300",entrypoint="web",method="PUT",protocol="websocket"} 40 +`)) + case 2: + _, _ = w.Write([]byte(` +traefik_entrypoint_request_duration_seconds_sum{code="200",entrypoint="traefik",method="GET",protocol="http"} 15.1 +traefik_entrypoint_request_duration_seconds_sum{code="300",entrypoint="web",method="GET",protocol="websocket"} 25.1 +traefik_entrypoint_request_duration_seconds_count{code="200",entrypoint="traefik",method="PUT",protocol="http"} 40 +traefik_entrypoint_request_duration_seconds_count{code="300",entrypoint="web",method="PUT",protocol="websocket"} 60 +`)) + default: + _, _ = w.Write([]byte(` +traefik_entrypoint_request_duration_seconds_sum{code="200",entrypoint="traefik",method="GET",protocol="http"} 25.1 +traefik_entrypoint_request_duration_seconds_sum{code="300",entrypoint="web",method="GET",protocol="websocket"} 35.1 +traefik_entrypoint_request_duration_seconds_count{code="200",entrypoint="traefik",method="PUT",protocol="http"} 50 +traefik_entrypoint_request_duration_seconds_count{code="300",entrypoint="web",method="PUT",protocol="websocket"} 80 +`)) + } + })) + h := New() + h.URL = srv.URL + require.NoError(t, h.Init()) + + return h, srv.Close +} + +func prepareCaseNotTraefikMetrics(t *testing.T) (*Traefik, func()) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write([]byte(` +# HELP application_backend_http_responses_total Total number of HTTP responses. +# TYPE application_backend_http_responses_total counter +application_backend_http_responses_total{proxy="infra-traefik-web",code="1xx"} 0 +application_backend_http_responses_total{proxy="infra-vernemq-ws",code="1xx"} 4130401 +application_backend_http_responses_total{proxy="infra-traefik-web",code="2xx"} 21338013 +application_backend_http_responses_total{proxy="infra-vernemq-ws",code="2xx"} 0 +application_backend_http_responses_total{proxy="infra-traefik-web",code="3xx"} 10004 +application_backend_http_responses_total{proxy="infra-vernemq-ws",code="3xx"} 0 +application_backend_http_responses_total{proxy="infra-traefik-web",code="4xx"} 10170758 +application_backend_http_responses_total{proxy="infra-vernemq-ws",code="4xx"} 0 +application_backend_http_responses_total{proxy="infra-traefik-web",code="5xx"} 3075 +application_backend_http_responses_total{proxy="infra-vernemq-ws",code="5xx"} 0 +application_backend_http_responses_total{proxy="infra-traefik-web",code="other"} 5657 +application_backend_http_responses_total{proxy="infra-vernemq-ws",code="other"} 0 +`)) + })) + h := New() + h.URL = srv.URL + require.NoError(t, h.Init()) + + return h, srv.Close +} + +func prepareCase404Response(t *testing.T) (*Traefik, func()) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNotFound) + })) + h := New() + h.URL = srv.URL + require.NoError(t, h.Init()) + + return h, srv.Close +} + +func prepareCaseConnectionRefused(t *testing.T) (*Traefik, func()) { + t.Helper() + h := New() + h.URL = "http://127.0.0.1:38001" + require.NoError(t, h.Init()) + + return h, func() {} +} + +func ensureCollectedHasAllChartsDimsVarsIDs(t *testing.T, tk *Traefik, ms map[string]int64) { + for _, chart := range *tk.Charts() { + if chart.Obsolete { + continue + } + for _, dim := range chart.Dims { + _, ok := ms[dim.ID] + assert.Truef(t, ok, "chart '%s' dim '%s': no dim in collected", dim.ID, chart.ID) + } + for _, v := range chart.Vars { + _, ok := ms[v.ID] + assert.Truef(t, ok, "chart '%s' dim '%s': no dim in collected", v.ID, chart.ID) + } + } +} |