diff options
Diffstat (limited to '')
16 files changed, 3044 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/README.md b/src/go/collectors/go.d.plugin/modules/docker_engine/README.md new file mode 120000 index 000000000..f00a4cd97 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/README.md @@ -0,0 +1 @@ +integrations/docker_engine.md
\ No newline at end of file diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/charts.go b/src/go/collectors/go.d.plugin/modules/docker_engine/charts.go new file mode 100644 index 000000000..d23f6e780 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/charts.go @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package docker_engine + +import "github.com/netdata/netdata/go/go.d.plugin/agent/module" + +type ( + Charts = module.Charts + Dims = module.Dims +) + +var charts = Charts{ + { + ID: "engine_daemon_container_actions", + Title: "Container Actions", + Units: "actions/s", + Fam: "containers", + Ctx: "docker_engine.engine_daemon_container_actions", + Type: module.Stacked, + Dims: Dims{ + {ID: "container_actions_changes", Name: "changes", Algo: module.Incremental}, + {ID: "container_actions_commit", Name: "commit", Algo: module.Incremental}, + {ID: "container_actions_create", Name: "create", Algo: module.Incremental}, + {ID: "container_actions_delete", Name: "delete", Algo: module.Incremental}, + {ID: "container_actions_start", Name: "start", Algo: module.Incremental}, + }, + }, + { + ID: "engine_daemon_container_states_containers", + Title: "Containers In Various States", + Units: "containers", + Fam: "containers", + Ctx: "docker_engine.engine_daemon_container_states_containers", + Type: module.Stacked, + Dims: Dims{ + {ID: "container_states_running", Name: "running"}, + {ID: "container_states_paused", Name: "paused"}, + {ID: "container_states_stopped", Name: "stopped"}, + }, + }, + { + ID: "builder_builds_failed_total", + Title: "Builder Builds Fails By Reason", + Units: "fails/s", + Fam: "builder", + Ctx: "docker_engine.builder_builds_failed_total", + Type: module.Stacked, + Dims: Dims{ + {ID: "builder_fails_build_canceled", Name: "build_canceled", Algo: module.Incremental}, + {ID: "builder_fails_build_target_not_reachable_error", Name: "build_target_not_reachable_error", Algo: module.Incremental}, + {ID: "builder_fails_command_not_supported_error", Name: "command_not_supported_error", Algo: module.Incremental}, + {ID: "builder_fails_dockerfile_empty_error", Name: "dockerfile_empty_error", Algo: module.Incremental}, + {ID: "builder_fails_dockerfile_syntax_error", Name: "dockerfile_syntax_error", Algo: module.Incremental}, + {ID: "builder_fails_error_processing_commands_error", Name: "error_processing_commands_error", Algo: module.Incremental}, + {ID: "builder_fails_missing_onbuild_arguments_error", Name: "missing_onbuild_arguments_error", Algo: module.Incremental}, + {ID: "builder_fails_unknown_instruction_error", Name: "unknown_instruction_error", Algo: module.Incremental}, + }, + }, + { + ID: "engine_daemon_health_checks_failed_total", + Title: "Health Checks", + Units: "events/s", + Fam: "health checks", + Ctx: "docker_engine.engine_daemon_health_checks_failed_total", + Dims: Dims{ + {ID: "health_checks_failed", Name: "fails", Algo: module.Incremental}, + }, + }, +} + +var swarmManagerCharts = Charts{ + { + ID: "swarm_manager_leader", + Title: "Swarm Manager Leader", + Units: "bool", + Fam: "swarm", + Ctx: "docker_engine.swarm_manager_leader", + Dims: Dims{ + {ID: "swarm_manager_leader", Name: "is_leader"}, + }, + }, + { + ID: "swarm_manager_object_store", + Title: "Swarm Manager Object Store", + Units: "objects", + Fam: "swarm", + Type: module.Stacked, + Ctx: "docker_engine.swarm_manager_object_store", + Dims: Dims{ + {ID: "swarm_manager_nodes_total", Name: "nodes"}, + {ID: "swarm_manager_services_total", Name: "services"}, + {ID: "swarm_manager_tasks_total", Name: "tasks"}, + {ID: "swarm_manager_networks_total", Name: "networks"}, + {ID: "swarm_manager_secrets_total", Name: "secrets"}, + {ID: "swarm_manager_configs_total", Name: "configs"}, + }, + }, + { + ID: "swarm_manager_nodes_per_state", + Title: "Swarm Manager Nodes Per State", + Units: "nodes", + Fam: "swarm", + Ctx: "docker_engine.swarm_manager_nodes_per_state", + Type: module.Stacked, + Dims: Dims{ + {ID: "swarm_manager_nodes_state_ready", Name: "ready"}, + {ID: "swarm_manager_nodes_state_down", Name: "down"}, + {ID: "swarm_manager_nodes_state_unknown", Name: "unknown"}, + {ID: "swarm_manager_nodes_state_disconnected", Name: "disconnected"}, + }, + }, + { + ID: "swarm_manager_tasks_per_state", + Title: "Swarm Manager Tasks Per State", + Units: "tasks", + Fam: "swarm", + Ctx: "docker_engine.swarm_manager_tasks_per_state", + Type: module.Stacked, + Dims: Dims{ + {ID: "swarm_manager_tasks_state_running", Name: "running"}, + {ID: "swarm_manager_tasks_state_failed", Name: "failed"}, + {ID: "swarm_manager_tasks_state_ready", Name: "ready"}, + {ID: "swarm_manager_tasks_state_rejected", Name: "rejected"}, + {ID: "swarm_manager_tasks_state_starting", Name: "starting"}, + {ID: "swarm_manager_tasks_state_shutdown", Name: "shutdown"}, + {ID: "swarm_manager_tasks_state_new", Name: "new"}, + {ID: "swarm_manager_tasks_state_orphaned", Name: "orphaned"}, + {ID: "swarm_manager_tasks_state_preparing", Name: "preparing"}, + {ID: "swarm_manager_tasks_state_pending", Name: "pending"}, + {ID: "swarm_manager_tasks_state_complete", Name: "complete"}, + {ID: "swarm_manager_tasks_state_remove", Name: "remove"}, + {ID: "swarm_manager_tasks_state_accepted", Name: "accepted"}, + {ID: "swarm_manager_tasks_state_assigned", Name: "assigned"}, + }, + }, +} diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/collect.go b/src/go/collectors/go.d.plugin/modules/docker_engine/collect.go new file mode 100644 index 000000000..171d58b55 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/collect.go @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package docker_engine + +import ( + "fmt" + + "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus" + "github.com/netdata/netdata/go/go.d.plugin/pkg/stm" +) + +func isDockerEngineMetrics(pms prometheus.Series) bool { + return pms.FindByName("engine_daemon_engine_info").Len() > 0 +} + +func (de *DockerEngine) collect() (map[string]int64, error) { + pms, err := de.prom.ScrapeSeries() + if err != nil { + return nil, err + } + + if !isDockerEngineMetrics(pms) { + return nil, fmt.Errorf("'%s' returned non docker engine metrics", de.URL) + } + + mx := de.collectMetrics(pms) + return stm.ToMap(mx), nil +} + +func (de *DockerEngine) collectMetrics(pms prometheus.Series) metrics { + var mx metrics + collectHealthChecks(&mx, pms) + collectContainerActions(&mx, pms) + collectBuilderBuildsFails(&mx, pms) + if hasContainerStates(pms) { + de.hasContainerStates = true + mx.Container.States = &containerStates{} + collectContainerStates(&mx, pms) + } + if isSwarmManager(pms) { + de.isSwarmManager = true + mx.SwarmManager = &swarmManager{} + collectSwarmManager(&mx, pms) + } + return mx +} + +func isSwarmManager(pms prometheus.Series) bool { + return pms.FindByName("swarm_node_manager").Max() == 1 +} + +func hasContainerStates(pms prometheus.Series) bool { + return pms.FindByName("engine_daemon_container_states_containers").Len() > 0 +} + +func collectHealthChecks(mx *metrics, raw prometheus.Series) { + v := raw.FindByName("engine_daemon_health_checks_failed_total").Max() + mx.HealthChecks.Failed = v +} + +func collectContainerActions(mx *metrics, raw prometheus.Series) { + for _, metric := range raw.FindByName("engine_daemon_container_actions_seconds_count") { + action := metric.Labels.Get("action") + if action == "" { + continue + } + + v := metric.Value + switch action { + default: + case "changes": + mx.Container.Actions.Changes = v + case "commit": + mx.Container.Actions.Commit = v + case "create": + mx.Container.Actions.Create = v + case "delete": + mx.Container.Actions.Delete = v + case "start": + mx.Container.Actions.Start = v + } + } +} + +func collectContainerStates(mx *metrics, raw prometheus.Series) { + for _, metric := range raw.FindByName("engine_daemon_container_states_containers") { + state := metric.Labels.Get("state") + if state == "" { + continue + } + + v := metric.Value + switch state { + default: + case "paused": + mx.Container.States.Paused = v + case "running": + mx.Container.States.Running = v + case "stopped": + mx.Container.States.Stopped = v + } + } +} + +func collectBuilderBuildsFails(mx *metrics, raw prometheus.Series) { + for _, metric := range raw.FindByName("builder_builds_failed_total") { + reason := metric.Labels.Get("reason") + if reason == "" { + continue + } + + v := metric.Value + switch reason { + default: + case "build_canceled": + mx.Builder.FailsByReason.BuildCanceled = v + case "build_target_not_reachable_error": + mx.Builder.FailsByReason.BuildTargetNotReachableError = v + case "command_not_supported_error": + mx.Builder.FailsByReason.CommandNotSupportedError = v + case "dockerfile_empty_error": + mx.Builder.FailsByReason.DockerfileEmptyError = v + case "dockerfile_syntax_error": + mx.Builder.FailsByReason.DockerfileSyntaxError = v + case "error_processing_commands_error": + mx.Builder.FailsByReason.ErrorProcessingCommandsError = v + case "missing_onbuild_arguments_error": + mx.Builder.FailsByReason.MissingOnbuildArgumentsError = v + case "unknown_instruction_error": + mx.Builder.FailsByReason.UnknownInstructionError = v + } + } +} + +func collectSwarmManager(mx *metrics, raw prometheus.Series) { + v := raw.FindByName("swarm_manager_configs_total").Max() + mx.SwarmManager.Configs = v + + v = raw.FindByName("swarm_manager_networks_total").Max() + mx.SwarmManager.Networks = v + + v = raw.FindByName("swarm_manager_secrets_total").Max() + mx.SwarmManager.Secrets = v + + v = raw.FindByName("swarm_manager_services_total").Max() + mx.SwarmManager.Services = v + + v = raw.FindByName("swarm_manager_leader").Max() + mx.SwarmManager.IsLeader = v + + for _, metric := range raw.FindByName("swarm_manager_nodes") { + state := metric.Labels.Get("state") + if state == "" { + continue + } + + v := metric.Value + switch state { + default: + case "disconnected": + mx.SwarmManager.Nodes.PerState.Disconnected = v + case "down": + mx.SwarmManager.Nodes.PerState.Down = v + case "ready": + mx.SwarmManager.Nodes.PerState.Ready = v + case "unknown": + mx.SwarmManager.Nodes.PerState.Unknown = v + } + mx.SwarmManager.Nodes.Total += v + } + + for _, metric := range raw.FindByName("swarm_manager_tasks_total") { + state := metric.Labels.Get("state") + if state == "" { + continue + } + + v := metric.Value + switch state { + default: + case "accepted": + mx.SwarmManager.Tasks.PerState.Accepted = v + case "assigned": + mx.SwarmManager.Tasks.PerState.Assigned = v + case "complete": + mx.SwarmManager.Tasks.PerState.Complete = v + case "failed": + mx.SwarmManager.Tasks.PerState.Failed = v + case "new": + mx.SwarmManager.Tasks.PerState.New = v + case "orphaned": + mx.SwarmManager.Tasks.PerState.Orphaned = v + case "pending": + mx.SwarmManager.Tasks.PerState.Pending = v + case "preparing": + mx.SwarmManager.Tasks.PerState.Preparing = v + case "ready": + mx.SwarmManager.Tasks.PerState.Ready = v + case "rejected": + mx.SwarmManager.Tasks.PerState.Rejected = v + case "remove": + mx.SwarmManager.Tasks.PerState.Remove = v + case "running": + mx.SwarmManager.Tasks.PerState.Running = v + case "shutdown": + mx.SwarmManager.Tasks.PerState.Shutdown = v + case "starting": + mx.SwarmManager.Tasks.PerState.Starting = v + } + mx.SwarmManager.Tasks.Total += v + } +} diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/config_schema.json b/src/go/collectors/go.d.plugin/modules/docker_engine/config_schema.json new file mode 100644 index 000000000..a18a8fe86 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/config_schema.json @@ -0,0 +1,177 @@ +{ + "jsonSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Docker Engine 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 Docker Engine [metrics endpoint](https://docs.docker.com/config/daemon/prometheus/#configure-the-daemon).", + "type": "string", + "default": "http://127.0.0.1:9323/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": { + "uiOptions": { + "fullPage": true + }, + "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" + ] + } + ] + }, + "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)." + }, + "password": { + "ui:widget": "password" + }, + "proxy_password": { + "ui:widget": "password" + } + } +} diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/docker_engine.go b/src/go/collectors/go.d.plugin/modules/docker_engine/docker_engine.go new file mode 100644 index 000000000..ea8551236 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/docker_engine.go @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package docker_engine + +import ( + _ "embed" + "errors" + "time" + + "github.com/netdata/netdata/go/go.d.plugin/agent/module" + "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus" + "github.com/netdata/netdata/go/go.d.plugin/pkg/web" +) + +//go:embed "config_schema.json" +var configSchema string + +func init() { + module.Register("docker_engine", module.Creator{ + JobConfigSchema: configSchema, + Create: func() module.Module { return New() }, + Config: func() any { return &Config{} }, + }) +} + +func New() *DockerEngine { + return &DockerEngine{ + Config: Config{ + HTTP: web.HTTP{ + Request: web.Request{ + URL: "http://127.0.0.1:9323/metrics", + }, + Client: web.Client{ + Timeout: web.Duration(time.Second), + }, + }, + }, + } +} + +type Config struct { + UpdateEvery int `yaml:"update_every,omitempty" json:"update_every"` + web.HTTP `yaml:",inline" json:""` +} + +type DockerEngine struct { + module.Base + Config `yaml:",inline" json:""` + + prom prometheus.Prometheus + + isSwarmManager bool + hasContainerStates bool +} + +func (de *DockerEngine) Configuration() any { + return de.Config +} + +func (de *DockerEngine) Init() error { + if err := de.validateConfig(); err != nil { + de.Errorf("config validation: %v", err) + return err + } + + prom, err := de.initPrometheusClient() + if err != nil { + de.Error(err) + return err + } + de.prom = prom + + return nil +} + +func (de *DockerEngine) Check() error { + mx, err := de.collect() + if err != nil { + de.Error(err) + return err + } + if len(mx) == 0 { + return errors.New("no metrics collected") + + } + return nil +} + +func (de *DockerEngine) Charts() *Charts { + cs := charts.Copy() + if !de.hasContainerStates { + if err := cs.Remove("engine_daemon_container_states_containers"); err != nil { + de.Warning(err) + } + } + + if !de.isSwarmManager { + return cs + } + + if err := cs.Add(*swarmManagerCharts.Copy()...); err != nil { + de.Warning(err) + } + + return cs +} + +func (de *DockerEngine) Collect() map[string]int64 { + mx, err := de.collect() + if err != nil { + de.Error(err) + return nil + } + + if len(mx) == 0 { + return nil + } + return mx +} + +func (de *DockerEngine) Cleanup() { + if de.prom != nil && de.prom.HTTPClient() != nil { + de.prom.HTTPClient().CloseIdleConnections() + } +} diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/docker_engine_test.go b/src/go/collectors/go.d.plugin/modules/docker_engine/docker_engine_test.go new file mode 100644 index 000000000..193214274 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/docker_engine_test.go @@ -0,0 +1,372 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package docker_engine + +import ( + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/netdata/netdata/go/go.d.plugin/agent/module" + "github.com/netdata/netdata/go/go.d.plugin/pkg/tlscfg" + "github.com/netdata/netdata/go/go.d.plugin/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") + + dataNonDockerEngineMetrics, _ = os.ReadFile("testdata/non-docker-engine.txt") + dataVer17050Metrics, _ = os.ReadFile("testdata/v17.05.0-ce.txt") + dataVer18093Metrics, _ = os.ReadFile("testdata/v18.09.3-ce.txt") + dataVer18093SwarmMetrics, _ = os.ReadFile("testdata/v18.09.3-ce-swarm.txt") +) + +func Test_testDataIsValid(t *testing.T) { + for name, data := range map[string][]byte{ + "dataConfigJSON": dataConfigJSON, + "dataConfigYAML": dataConfigYAML, + "dataNonDockerEngineMetrics": dataNonDockerEngineMetrics, + "dataVer17050Metrics": dataVer17050Metrics, + "dataVer18093Metrics": dataVer18093Metrics, + "dataVer18093SwarmMetrics": dataVer18093SwarmMetrics, + } { + require.NotNil(t, data, name) + } +} + +func TestDockerEngine_ConfigurationSerialize(t *testing.T) { + module.TestConfigurationSerialize(t, &DockerEngine{}, dataConfigJSON, dataConfigYAML) +} + +func TestDockerEngine_Cleanup(t *testing.T) { + assert.NotPanics(t, New().Cleanup) +} + +func TestDockerEngine_Init(t *testing.T) { + tests := map[string]struct { + config Config + wantFail bool + }{ + "default": { + config: New().Config, + }, + "empty URL": { + config: Config{HTTP: web.HTTP{Request: web.Request{URL: ""}}}, + wantFail: true, + }, + "nonexistent TLS CA": { + config: Config{HTTP: web.HTTP{ + Request: web.Request{URL: "http://127.0.0.1:9323/metrics"}, + Client: web.Client{TLSConfig: tlscfg.TLSConfig{TLSCA: "testdata/tls"}}}}, + wantFail: true, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + dockerEngine := New() + dockerEngine.Config = test.config + + if test.wantFail { + assert.Error(t, dockerEngine.Init()) + } else { + assert.NoError(t, dockerEngine.Init()) + } + }) + } +} + +func TestDockerEngine_Check(t *testing.T) { + tests := map[string]struct { + prepare func(*testing.T) (*DockerEngine, *httptest.Server) + wantFail bool + }{ + "v17.05.0-ce": {prepare: prepareClientServerV17050CE}, + "v18.09.3-ce": {prepare: prepareClientServerV18093CE}, + "v18.09.3-ce-swarm": {prepare: prepareClientServerV18093CESwarm}, + "non docker engine": {prepare: prepareClientServerNonDockerEngine, wantFail: true}, + "invalid data": {prepare: prepareClientServerInvalidData, wantFail: true}, + "404": {prepare: prepareClientServer404, wantFail: true}, + "connection refused": {prepare: prepareClientServerConnectionRefused, wantFail: true}, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + dockerEngine, srv := test.prepare(t) + defer srv.Close() + + if test.wantFail { + assert.Error(t, dockerEngine.Check()) + } else { + assert.NoError(t, dockerEngine.Check()) + } + }) + } +} + +func TestDockerEngine_Charts(t *testing.T) { + tests := map[string]struct { + prepare func(*testing.T) (*DockerEngine, *httptest.Server) + wantNumCharts int + }{ + "v17.05.0-ce": {prepare: prepareClientServerV17050CE, wantNumCharts: len(charts) - 1}, // no container states chart + "v18.09.3-ce": {prepare: prepareClientServerV18093CE, wantNumCharts: len(charts)}, + "v18.09.3-ce-swarm": {prepare: prepareClientServerV18093CESwarm, wantNumCharts: len(charts) + len(swarmManagerCharts)}, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + dockerEngine, srv := test.prepare(t) + defer srv.Close() + + require.NoError(t, dockerEngine.Check()) + assert.Len(t, *dockerEngine.Charts(), test.wantNumCharts) + }) + } +} + +func TestDockerEngine_Collect_ReturnsNilOnErrors(t *testing.T) { + tests := map[string]struct { + prepare func(*testing.T) (*DockerEngine, *httptest.Server) + }{ + "non docker engine": {prepare: prepareClientServerNonDockerEngine}, + "invalid data": {prepare: prepareClientServerInvalidData}, + "404": {prepare: prepareClientServer404}, + "connection refused": {prepare: prepareClientServerConnectionRefused}, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + dockerEngine, srv := test.prepare(t) + defer srv.Close() + + assert.Nil(t, dockerEngine.Collect()) + }) + } +} + +func TestDockerEngine_Collect(t *testing.T) { + tests := map[string]struct { + prepare func(*testing.T) (*DockerEngine, *httptest.Server) + expected map[string]int64 + }{ + "v17.05.0-ce": { + prepare: prepareClientServerV17050CE, + expected: map[string]int64{ + "builder_fails_build_canceled": 1, + "builder_fails_build_target_not_reachable_error": 2, + "builder_fails_command_not_supported_error": 3, + "builder_fails_dockerfile_empty_error": 4, + "builder_fails_dockerfile_syntax_error": 5, + "builder_fails_error_processing_commands_error": 6, + "builder_fails_missing_onbuild_arguments_error": 7, + "builder_fails_unknown_instruction_error": 8, + "container_actions_changes": 1, + "container_actions_commit": 1, + "container_actions_create": 1, + "container_actions_delete": 1, + "container_actions_start": 1, + "health_checks_failed": 33, + }, + }, + "v18.09.3-ce": { + prepare: prepareClientServerV18093CE, + expected: map[string]int64{ + "builder_fails_build_canceled": 1, + "builder_fails_build_target_not_reachable_error": 2, + "builder_fails_command_not_supported_error": 3, + "builder_fails_dockerfile_empty_error": 4, + "builder_fails_dockerfile_syntax_error": 5, + "builder_fails_error_processing_commands_error": 6, + "builder_fails_missing_onbuild_arguments_error": 7, + "builder_fails_unknown_instruction_error": 8, + "container_actions_changes": 1, + "container_actions_commit": 1, + "container_actions_create": 1, + "container_actions_delete": 1, + "container_actions_start": 1, + "container_states_paused": 11, + "container_states_running": 12, + "container_states_stopped": 13, + "health_checks_failed": 33, + }, + }, + "v18.09.3-ce-swarm": { + prepare: prepareClientServerV18093CESwarm, + expected: map[string]int64{ + "builder_fails_build_canceled": 1, + "builder_fails_build_target_not_reachable_error": 2, + "builder_fails_command_not_supported_error": 3, + "builder_fails_dockerfile_empty_error": 4, + "builder_fails_dockerfile_syntax_error": 5, + "builder_fails_error_processing_commands_error": 6, + "builder_fails_missing_onbuild_arguments_error": 7, + "builder_fails_unknown_instruction_error": 8, + "container_actions_changes": 1, + "container_actions_commit": 1, + "container_actions_create": 1, + "container_actions_delete": 1, + "container_actions_start": 1, + "container_states_paused": 11, + "container_states_running": 12, + "container_states_stopped": 13, + "health_checks_failed": 33, + "swarm_manager_configs_total": 1, + "swarm_manager_leader": 1, + "swarm_manager_networks_total": 3, + "swarm_manager_nodes_state_disconnected": 1, + "swarm_manager_nodes_state_down": 2, + "swarm_manager_nodes_state_ready": 3, + "swarm_manager_nodes_state_unknown": 4, + "swarm_manager_nodes_total": 10, + "swarm_manager_secrets_total": 1, + "swarm_manager_services_total": 1, + "swarm_manager_tasks_state_accepted": 1, + "swarm_manager_tasks_state_assigned": 2, + "swarm_manager_tasks_state_complete": 3, + "swarm_manager_tasks_state_failed": 4, + "swarm_manager_tasks_state_new": 5, + "swarm_manager_tasks_state_orphaned": 6, + "swarm_manager_tasks_state_pending": 7, + "swarm_manager_tasks_state_preparing": 8, + "swarm_manager_tasks_state_ready": 9, + "swarm_manager_tasks_state_rejected": 10, + "swarm_manager_tasks_state_remove": 11, + "swarm_manager_tasks_state_running": 12, + "swarm_manager_tasks_state_shutdown": 13, + "swarm_manager_tasks_state_starting": 14, + "swarm_manager_tasks_total": 105, + }, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + pulsar, srv := test.prepare(t) + defer srv.Close() + + for i := 0; i < 10; i++ { + _ = pulsar.Collect() + } + collected := pulsar.Collect() + + require.NotNil(t, collected) + require.Equal(t, test.expected, collected) + ensureCollectedHasAllChartsDimsVarsIDs(t, pulsar, collected) + }) + } +} + +func ensureCollectedHasAllChartsDimsVarsIDs(t *testing.T, dockerEngine *DockerEngine, collected map[string]int64) { + t.Helper() + for _, chart := range *dockerEngine.Charts() { + for _, dim := range chart.Dims { + _, ok := collected[dim.ID] + assert.Truef(t, ok, "collected metrics has no data for dim '%s' chart '%s'", dim.ID, chart.ID) + } + for _, v := range chart.Vars { + _, ok := collected[v.ID] + assert.Truef(t, ok, "collected metrics has no data for var '%s' chart '%s'", v.ID, chart.ID) + } + } +} + +func prepareClientServerV17050CE(t *testing.T) (*DockerEngine, *httptest.Server) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write(dataVer17050Metrics) + })) + + dockerEngine := New() + dockerEngine.URL = srv.URL + require.NoError(t, dockerEngine.Init()) + + return dockerEngine, srv +} + +func prepareClientServerV18093CE(t *testing.T) (*DockerEngine, *httptest.Server) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write(dataVer18093Metrics) + })) + + dockerEngine := New() + dockerEngine.URL = srv.URL + require.NoError(t, dockerEngine.Init()) + + return dockerEngine, srv +} + +func prepareClientServerV18093CESwarm(t *testing.T) (*DockerEngine, *httptest.Server) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write(dataVer18093SwarmMetrics) + })) + + dockerEngine := New() + dockerEngine.URL = srv.URL + require.NoError(t, dockerEngine.Init()) + + return dockerEngine, srv +} + +func prepareClientServerNonDockerEngine(t *testing.T) (*DockerEngine, *httptest.Server) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write(dataNonDockerEngineMetrics) + })) + + dockerEngine := New() + dockerEngine.URL = srv.URL + require.NoError(t, dockerEngine.Init()) + + return dockerEngine, srv +} + +func prepareClientServerInvalidData(t *testing.T) (*DockerEngine, *httptest.Server) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write([]byte("hello and\n goodbye")) + })) + + dockerEngine := New() + dockerEngine.URL = srv.URL + require.NoError(t, dockerEngine.Init()) + + return dockerEngine, srv +} + +func prepareClientServer404(t *testing.T) (*DockerEngine, *httptest.Server) { + t.Helper() + srv := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusNotFound) + })) + + dockerEngine := New() + dockerEngine.URL = srv.URL + require.NoError(t, dockerEngine.Init()) + + return dockerEngine, srv +} + +func prepareClientServerConnectionRefused(t *testing.T) (*DockerEngine, *httptest.Server) { + t.Helper() + srv := httptest.NewServer(nil) + + dockerEngine := New() + dockerEngine.URL = "http://127.0.0.1:38001/metrics" + require.NoError(t, dockerEngine.Init()) + + return dockerEngine, srv +} diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/init.go b/src/go/collectors/go.d.plugin/modules/docker_engine/init.go new file mode 100644 index 000000000..5e06f545e --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/init.go @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package docker_engine + +import ( + "errors" + "github.com/netdata/netdata/go/go.d.plugin/pkg/web" + + "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus" +) + +func (de *DockerEngine) validateConfig() error { + if de.URL == "" { + return errors.New("url not set") + } + return nil +} + +func (de *DockerEngine) initPrometheusClient() (prometheus.Prometheus, error) { + client, err := web.NewHTTPClient(de.Client) + if err != nil { + return nil, err + } + return prometheus.New(client, de.Request), nil +} diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/integrations/docker_engine.md b/src/go/collectors/go.d.plugin/modules/docker_engine/integrations/docker_engine.md new file mode 100644 index 000000000..bf1d91129 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/integrations/docker_engine.md @@ -0,0 +1,229 @@ +<!--startmeta +custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/docker_engine/README.md" +meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/docker_engine/metadata.yaml" +sidebar_label: "Docker Engine" +learn_status: "Published" +learn_rel_path: "Collecting Metrics/Containers and VMs" +most_popular: False +message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE" +endmeta--> + +# Docker Engine + + +<img src="https://netdata.cloud/img/docker.svg" width="150"/> + + +Plugin: go.d.plugin +Module: docker_engine + +<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" /> + +## Overview + +This collector monitors the activity and health of Docker Engine and Docker Swarm. + + +The [built-in](https://docs.docker.com/config/daemon/prometheus/) Prometheus exporter is used to get the metrics. + + +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 + +It discovers instances running on localhost by attempting to connect to a known Docker TCP socket: `http://127.0.0.1:9323/metrics`. + + +#### 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 Docker Engine instance + +These metrics refer to the entire monitored application. + +This scope has no labels. + +Metrics: + +| Metric | Dimensions | Unit | +|:------|:----------|:----| +| docker_engine.engine_daemon_container_actions | changes, commit, create, delete, start | actions/s | +| docker_engine.engine_daemon_container_states_containers | running, paused, stopped | containers | +| docker_engine.builder_builds_failed_total | build_canceled, build_target_not_reachable_error, command_not_supported_error, dockerfile_empty_error, dockerfile_syntax_error, error_processing_commands_error, missing_onbuild_arguments_error, unknown_instruction_error | fails/s | +| docker_engine.engine_daemon_health_checks_failed_total | fails | events/s | +| docker_engine.swarm_manager_leader | is_leader | bool | +| docker_engine.swarm_manager_object_store | nodes, services, tasks, networks, secrets, configs | objects | +| docker_engine.swarm_manager_nodes_per_state | ready, down, unknown, disconnected | nodes | +| docker_engine.swarm_manager_tasks_per_state | running, failed, ready, rejected, starting, shutdown, new, orphaned, preparing, pending, complete, remove, accepted, assigned | tasks | + + + +## Alerts + +There are no alerts configured by default for this integration. + + +## Setup + +### Prerequisites + +#### Enable built-in Prometheus exporter + +To enable built-in Prometheus exporter, follow the [official documentation](https://docs.docker.com/config/daemon/prometheus/#configure-docker). + + + +### Configuration + +#### File + +The configuration file name for this integration is `go.d/docker_engine.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/docker_engine.conf +``` +#### Options + +The following options can be defined globally: update_every, autodetection_retry. + + +<details open><summary>Config 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:9323/metrics | yes | +| 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 | +| timeout | HTTP request timeout. | 1 | 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 + +A basic example configuration. + +```yaml +jobs: + - name: local + url: http://127.0.0.1:9323/metrics + +``` +##### HTTP authentication + +Basic HTTP authentication. + +<details open><summary>Config</summary> + +```yaml +jobs: + - name: local + url: http://127.0.0.1:9323/metrics + username: username + password: password + +``` +</details> + +##### HTTPS with self-signed certificate + +Configuration with enabled HTTPS and self-signed certificate. + +<details open><summary>Config</summary> + +```yaml +jobs: + - name: local + url: http://127.0.0.1:9323/metrics + tls_skip_verify: yes + +``` +</details> + +##### Multi-instance + +> **Note**: When you define multiple jobs, their names must be unique. + +Collecting metrics from local and remote instances. + + +<details open><summary>Config</summary> + +```yaml +jobs: + - name: local + url: http://127.0.0.1:9323/metrics + + - name: remote + url: http://192.0.2.1:9323/metrics + +``` +</details> + + + +## Troubleshooting + +### Debug Mode + +To troubleshoot issues with the `docker_engine` 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 docker_engine + ``` + + diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/metadata.yaml b/src/go/collectors/go.d.plugin/modules/docker_engine/metadata.yaml new file mode 100644 index 000000000..8f81d4e35 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/metadata.yaml @@ -0,0 +1,263 @@ +plugin_name: go.d.plugin +modules: + - meta: + id: collector-go.d.plugin-docker_engine + plugin_name: go.d.plugin + module_name: docker_engine + alternative_monitored_instances: [] + monitored_instance: + name: Docker Engine + link: https://docs.docker.com/engine/ + categories: + - data-collection.containers-and-vms + icon_filename: docker.svg + related_resources: + integrations: + list: [] + info_provided_to_referring_integrations: + description: "" + keywords: + - docker + - container + most_popular: false + overview: + data_collection: + metrics_description: | + This collector monitors the activity and health of Docker Engine and Docker Swarm. + method_description: | + The [built-in](https://docs.docker.com/config/daemon/prometheus/) Prometheus exporter is used to get the metrics. + supported_platforms: + include: [] + exclude: [] + multi_instance: true + additional_permissions: + description: "" + default_behavior: + auto_detection: + description: | + It discovers instances running on localhost by attempting to connect to a known Docker TCP socket: `http://127.0.0.1:9323/metrics`. + limits: + description: "" + performance_impact: + description: "" + setup: + prerequisites: + list: + - title: Enable built-in Prometheus exporter + description: | + To enable built-in Prometheus exporter, follow the [official documentation](https://docs.docker.com/config/daemon/prometheus/#configure-docker). + configuration: + file: + name: go.d/docker_engine.conf + options: + description: | + The following options can be defined globally: update_every, autodetection_retry. + folding: + title: Config 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:9323/metrics + required: true + - 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: timeout + description: HTTP request timeout. + default_value: 1 + 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: "no" + required: false + - name: tls_skip_verify + description: Server certificate chain and hostname validation policy. Controls whether the client performs this check. + default_value: "no" + 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: A basic example configuration. + folding: + enabled: false + config: | + jobs: + - name: local + url: http://127.0.0.1:9323/metrics + - name: HTTP authentication + description: Basic HTTP authentication. + config: | + jobs: + - name: local + url: http://127.0.0.1:9323/metrics + username: username + password: password + - name: HTTPS with self-signed certificate + description: Configuration with enabled HTTPS and self-signed certificate. + config: | + jobs: + - name: local + url: http://127.0.0.1:9323/metrics + tls_skip_verify: yes + - name: Multi-instance + description: | + > **Note**: When you define multiple jobs, their names must be unique. + + Collecting metrics from local and remote instances. + config: | + jobs: + - name: local + url: http://127.0.0.1:9323/metrics + + - name: remote + url: http://192.0.2.1:9323/metrics + troubleshooting: + problems: + list: [] + alerts: [] + metrics: + folding: + title: Metrics + enabled: false + description: "" + availability: [] + scopes: + - name: global + description: These metrics refer to the entire monitored application. + labels: [] + metrics: + - name: docker_engine.engine_daemon_container_actions + description: Container Actions + unit: actions/s + chart_type: stacked + dimensions: + - name: changes + - name: commit + - name: create + - name: delete + - name: start + - name: docker_engine.engine_daemon_container_states_containers + description: Containers In Various States + unit: containers + chart_type: stacked + dimensions: + - name: running + - name: paused + - name: stopped + - name: docker_engine.builder_builds_failed_total + description: Builder Builds Fails By Reason + unit: fails/s + chart_type: stacked + dimensions: + - name: build_canceled + - name: build_target_not_reachable_error + - name: command_not_supported_error + - name: dockerfile_empty_error + - name: dockerfile_syntax_error + - name: error_processing_commands_error + - name: missing_onbuild_arguments_error + - name: unknown_instruction_error + - name: docker_engine.engine_daemon_health_checks_failed_total + description: Health Checks + unit: events/s + chart_type: line + dimensions: + - name: fails + - name: docker_engine.swarm_manager_leader + description: Swarm Manager Leader + unit: bool + chart_type: line + dimensions: + - name: is_leader + - name: docker_engine.swarm_manager_object_store + description: Swarm Manager Object Store + unit: objects + chart_type: stacked + dimensions: + - name: nodes + - name: services + - name: tasks + - name: networks + - name: secrets + - name: configs + - name: docker_engine.swarm_manager_nodes_per_state + description: Swarm Manager Nodes Per State + unit: nodes + chart_type: stacked + dimensions: + - name: ready + - name: down + - name: unknown + - name: disconnected + - name: docker_engine.swarm_manager_tasks_per_state + description: Swarm Manager Tasks Per State + unit: tasks + chart_type: stacked + dimensions: + - name: running + - name: failed + - name: ready + - name: rejected + - name: starting + - name: shutdown + - name: new + - name: orphaned + - name: preparing + - name: pending + - name: complete + - name: remove + - name: accepted + - name: assigned diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/metrics.go b/src/go/collectors/go.d.plugin/modules/docker_engine/metrics.go new file mode 100644 index 000000000..4c84e8398 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/metrics.go @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package docker_engine + +type metrics struct { + Container struct { + Actions struct { + Changes float64 `stm:"changes"` + Commit float64 `stm:"commit"` + Create float64 `stm:"create"` + Delete float64 `stm:"delete"` + Start float64 `stm:"start"` + } `stm:"actions"` + States *containerStates `stm:"states"` + } `stm:"container"` + Builder struct { + FailsByReason struct { + BuildCanceled float64 `stm:"build_canceled"` + BuildTargetNotReachableError float64 `stm:"build_target_not_reachable_error"` + CommandNotSupportedError float64 `stm:"command_not_supported_error"` + DockerfileEmptyError float64 `stm:"dockerfile_empty_error"` + DockerfileSyntaxError float64 `stm:"dockerfile_syntax_error"` + ErrorProcessingCommandsError float64 `stm:"error_processing_commands_error"` + MissingOnbuildArgumentsError float64 `stm:"missing_onbuild_arguments_error"` + UnknownInstructionError float64 `stm:"unknown_instruction_error"` + } `stm:"fails"` + } `stm:"builder"` + HealthChecks struct { + Failed float64 `stm:"failed"` + } `stm:"health_checks"` + SwarmManager *swarmManager `stm:"swarm_manager"` +} + +type containerStates struct { + Paused float64 `stm:"paused"` + Running float64 `stm:"running"` + Stopped float64 `stm:"stopped"` +} + +type swarmManager struct { + IsLeader float64 `stm:"leader"` + Configs float64 `stm:"configs_total"` + Networks float64 `stm:"networks_total"` + Secrets float64 `stm:"secrets_total"` + Services float64 `stm:"services_total"` + Nodes struct { + Total float64 `stm:"total"` + PerState struct { + Disconnected float64 `stm:"disconnected"` + Down float64 `stm:"down"` + Ready float64 `stm:"ready"` + Unknown float64 `stm:"unknown"` + } `stm:"state"` + } `stm:"nodes"` + Tasks struct { + Total float64 `stm:"total"` + PerState struct { + Accepted float64 `stm:"accepted"` + Assigned float64 `stm:"assigned"` + Complete float64 `stm:"complete"` + Failed float64 `stm:"failed"` + New float64 `stm:"new"` + Orphaned float64 `stm:"orphaned"` + Pending float64 `stm:"pending"` + Preparing float64 `stm:"preparing"` + Ready float64 `stm:"ready"` + Rejected float64 `stm:"rejected"` + Remove float64 `stm:"remove"` + Running float64 `stm:"running"` + Shutdown float64 `stm:"shutdown"` + Starting float64 `stm:"starting"` + } `stm:"state"` + } `stm:"tasks"` +} diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/config.json b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/config.json new file mode 100644 index 000000000..984c3ed6e --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/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/collectors/go.d.plugin/modules/docker_engine/testdata/config.yaml b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/config.yaml new file mode 100644 index 000000000..8558b61cc --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/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/fluent-bit/bin/.empty b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/non-docker-engine.txt index e69de29bb..e69de29bb 100644 --- a/fluent-bit/bin/.empty +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/non-docker-engine.txt diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/v17.05.0-ce.txt b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/v17.05.0-ce.txt new file mode 100644 index 000000000..8d175a8e9 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/v17.05.0-ce.txt @@ -0,0 +1,460 @@ +# HELP builder_builds_failed_total Number of failed image builds +# TYPE builder_builds_failed_total counter +builder_builds_failed_total{reason="build_canceled"} 1 +builder_builds_failed_total{reason="build_target_not_reachable_error"} 2 +builder_builds_failed_total{reason="command_not_supported_error"} 3 +builder_builds_failed_total{reason="dockerfile_empty_error"} 4 +builder_builds_failed_total{reason="dockerfile_syntax_error"} 5 +builder_builds_failed_total{reason="error_processing_commands_error"} 6 +builder_builds_failed_total{reason="missing_onbuild_arguments_error"} 7 +builder_builds_failed_total{reason="unknown_instruction_error"} 8 +# HELP builder_builds_triggered_total Number of triggered image builds +# TYPE builder_builds_triggered_total counter +builder_builds_triggered_total 0 +# HELP engine_daemon_container_actions_seconds The number of seconds it takes to process each container action +# TYPE engine_daemon_container_actions_seconds histogram +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="changes"} 0 +engine_daemon_container_actions_seconds_count{action="changes"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="commit"} 0 +engine_daemon_container_actions_seconds_count{action="commit"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="create"} 0 +engine_daemon_container_actions_seconds_count{action="create"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="delete"} 0 +engine_daemon_container_actions_seconds_count{action="delete"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="start"} 0 +engine_daemon_container_actions_seconds_count{action="start"} 1 +# HELP engine_daemon_engine_cpus_cpus The number of cpus that the host system of the engine has +# TYPE engine_daemon_engine_cpus_cpus gauge +engine_daemon_engine_cpus_cpus 4 +# HELP engine_daemon_engine_info The information related to the engine and the OS it is running on +# TYPE engine_daemon_engine_info gauge +engine_daemon_engine_info{architecture="x86_64",commit="774a1f4eee",daemon_id="NFZK:ZHHR:73WY:RV7D:MMU2:SE24:WWRJ:A3WN:WMMA:SPCL:PVO3:VGY7",graphdriver="overlay2",kernel="4.14.105-1-MANJARO",os="Manjaro Linux",os_type="linux",version="18.09.3-ce"} 1 +# HELP engine_daemon_engine_memory_bytes The number of bytes of memory that the host system of the engine has +# TYPE engine_daemon_engine_memory_bytes gauge +engine_daemon_engine_memory_bytes 2.5215361024e+10 +# HELP engine_daemon_events_subscribers_total The number of current subscribers to events +# TYPE engine_daemon_events_subscribers_total gauge +engine_daemon_events_subscribers_total 0 +# HELP engine_daemon_events_total The number of events logged +# TYPE engine_daemon_events_total counter +engine_daemon_events_total 0 +# HELP engine_daemon_health_checks_failed_total The total number of failed health checks +# TYPE engine_daemon_health_checks_failed_total counter +engine_daemon_health_checks_failed_total 33 +# HELP engine_daemon_health_checks_total The total number of health checks +# TYPE engine_daemon_health_checks_total counter +engine_daemon_health_checks_total 0 +# HELP etcd_debugging_snap_save_marshalling_duration_seconds The marshalling cost distributions of save called by snapshot. +# TYPE etcd_debugging_snap_save_marshalling_duration_seconds histogram +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_sum 0 +etcd_debugging_snap_save_marshalling_duration_seconds_count 0 +# HELP etcd_debugging_snap_save_total_duration_seconds The total latency distributions of save called by snapshot. +# TYPE etcd_debugging_snap_save_total_duration_seconds histogram +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"} 0 +etcd_debugging_snap_save_total_duration_seconds_sum 0 +etcd_debugging_snap_save_total_duration_seconds_count 0 +# HELP etcd_disk_wal_fsync_duration_seconds The latency distributions of fsync called by wal. +# TYPE etcd_disk_wal_fsync_duration_seconds histogram +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"} 0 +etcd_disk_wal_fsync_duration_seconds_sum 0 +etcd_disk_wal_fsync_duration_seconds_count 0 +# HELP go_gc_duration_seconds A summary of the GC invocation durations. +# TYPE go_gc_duration_seconds summary +go_gc_duration_seconds{quantile="0"} 1.0085e-05 +go_gc_duration_seconds{quantile="0.25"} 3.1991e-05 +go_gc_duration_seconds{quantile="0.5"} 4.8062e-05 +go_gc_duration_seconds{quantile="0.75"} 9.067e-05 +go_gc_duration_seconds{quantile="1"} 0.000175239 +go_gc_duration_seconds_sum 0.000724173 +go_gc_duration_seconds_count 12 +# HELP go_goroutines Number of goroutines that currently exist. +# TYPE go_goroutines gauge +go_goroutines 50 +# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. +# TYPE go_memstats_alloc_bytes gauge +go_memstats_alloc_bytes 8.13368e+06 +# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed. +# TYPE go_memstats_alloc_bytes_total counter +go_memstats_alloc_bytes_total 2.7343352e+07 +# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table. +# TYPE go_memstats_buck_hash_sys_bytes gauge +go_memstats_buck_hash_sys_bytes 1.454057e+06 +# HELP go_memstats_frees_total Total number of frees. +# TYPE go_memstats_frees_total counter +go_memstats_frees_total 319815 +# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata. +# TYPE go_memstats_gc_sys_bytes gauge +go_memstats_gc_sys_bytes 2.398208e+06 +# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use. +# TYPE go_memstats_heap_alloc_bytes gauge +go_memstats_heap_alloc_bytes 8.13368e+06 +# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used. +# TYPE go_memstats_heap_idle_bytes gauge +go_memstats_heap_idle_bytes 5.5648256e+07 +# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use. +# TYPE go_memstats_heap_inuse_bytes gauge +go_memstats_heap_inuse_bytes 1.0477568e+07 +# HELP go_memstats_heap_objects Number of allocated objects. +# TYPE go_memstats_heap_objects gauge +go_memstats_heap_objects 114878 +# HELP go_memstats_heap_released_bytes_total Total number of heap bytes released to OS. +# TYPE go_memstats_heap_released_bytes_total counter +go_memstats_heap_released_bytes_total 5.4738944e+07 +# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system. +# TYPE go_memstats_heap_sys_bytes gauge +go_memstats_heap_sys_bytes 6.6125824e+07 +# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection. +# TYPE go_memstats_last_gc_time_seconds gauge +go_memstats_last_gc_time_seconds 1.5528438390886765e+09 +# HELP go_memstats_lookups_total Total number of pointer lookups. +# TYPE go_memstats_lookups_total counter +go_memstats_lookups_total 0 +# HELP go_memstats_mallocs_total Total number of mallocs. +# TYPE go_memstats_mallocs_total counter +go_memstats_mallocs_total 434693 +# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures. +# TYPE go_memstats_mcache_inuse_bytes gauge +go_memstats_mcache_inuse_bytes 6944 +# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system. +# TYPE go_memstats_mcache_sys_bytes gauge +go_memstats_mcache_sys_bytes 16384 +# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures. +# TYPE go_memstats_mspan_inuse_bytes gauge +go_memstats_mspan_inuse_bytes 159696 +# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system. +# TYPE go_memstats_mspan_sys_bytes gauge +go_memstats_mspan_sys_bytes 196608 +# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place. +# TYPE go_memstats_next_gc_bytes gauge +go_memstats_next_gc_bytes 1.5134512e+07 +# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations. +# TYPE go_memstats_other_sys_bytes gauge +go_memstats_other_sys_bytes 1.112335e+06 +# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator. +# TYPE go_memstats_stack_inuse_bytes gauge +go_memstats_stack_inuse_bytes 983040 +# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator. +# TYPE go_memstats_stack_sys_bytes gauge +go_memstats_stack_sys_bytes 983040 +# HELP go_memstats_sys_bytes Number of bytes obtained by system. Sum of all system allocations. +# TYPE go_memstats_sys_bytes gauge +go_memstats_sys_bytes 7.2286456e+07 +# HELP http_request_duration_microseconds The HTTP request latencies in microseconds. +# TYPE http_request_duration_microseconds summary +http_request_duration_microseconds{handler="prometheus",quantile="0.5"} NaN +http_request_duration_microseconds{handler="prometheus",quantile="0.9"} NaN +http_request_duration_microseconds{handler="prometheus",quantile="0.99"} NaN +http_request_duration_microseconds_sum{handler="prometheus"} 0 +http_request_duration_microseconds_count{handler="prometheus"} 0 +# HELP http_request_size_bytes The HTTP request sizes in bytes. +# TYPE http_request_size_bytes summary +http_request_size_bytes{handler="prometheus",quantile="0.5"} NaN +http_request_size_bytes{handler="prometheus",quantile="0.9"} NaN +http_request_size_bytes{handler="prometheus",quantile="0.99"} NaN +http_request_size_bytes_sum{handler="prometheus"} 0 +http_request_size_bytes_count{handler="prometheus"} 0 +# HELP http_response_size_bytes The HTTP response sizes in bytes. +# TYPE http_response_size_bytes summary +http_response_size_bytes{handler="prometheus",quantile="0.5"} NaN +http_response_size_bytes{handler="prometheus",quantile="0.9"} NaN +http_response_size_bytes{handler="prometheus",quantile="0.99"} NaN +http_response_size_bytes_sum{handler="prometheus"} 0 +http_response_size_bytes_count{handler="prometheus"} 0 +# HELP logger_log_entries_size_greater_than_buffer_total Number of log entries which are larger than the log buffer +# TYPE logger_log_entries_size_greater_than_buffer_total counter +logger_log_entries_size_greater_than_buffer_total 0 +# HELP logger_log_read_operations_failed_total Number of log reads from container stdio that failed +# TYPE logger_log_read_operations_failed_total counter +logger_log_read_operations_failed_total 0 +# HELP logger_log_write_operations_failed_total Number of log write operations that failed +# TYPE logger_log_write_operations_failed_total counter +logger_log_write_operations_failed_total 0 +# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE process_cpu_seconds_total counter +process_cpu_seconds_total 2.12 +# HELP process_max_fds Maximum number of open file descriptors. +# TYPE process_max_fds gauge +process_max_fds 1.048576e+06 +# HELP process_open_fds Number of open file descriptors. +# TYPE process_open_fds gauge +process_open_fds 24 +# HELP process_resident_memory_bytes Resident memory size in bytes. +# TYPE process_resident_memory_bytes gauge +process_resident_memory_bytes 8.5929984e+07 +# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. +# TYPE process_start_time_seconds gauge +process_start_time_seconds 1.55284287673e+09 +# HELP process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE process_virtual_memory_bytes gauge +process_virtual_memory_bytes 1.257283584e+09 +# HELP swarm_dispatcher_scheduling_delay_seconds Scheduling delay is the time a task takes to go from NEW to RUNNING state. +# TYPE swarm_dispatcher_scheduling_delay_seconds histogram +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.005"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.01"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.025"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.05"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.1"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.25"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.5"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="1"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="2.5"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="5"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="10"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="+Inf"} 0 +swarm_dispatcher_scheduling_delay_seconds_sum 0 +swarm_dispatcher_scheduling_delay_seconds_count 0 +# HELP swarm_manager_configs_total The number of configs in the cluster object store +# TYPE swarm_manager_configs_total gauge +swarm_manager_configs_total 0 +# HELP swarm_manager_leader Indicates if this manager node is a leader +# TYPE swarm_manager_leader gauge +swarm_manager_leader 0 +# HELP swarm_manager_networks_total The number of networks in the cluster object store +# TYPE swarm_manager_networks_total gauge +swarm_manager_networks_total 0 +# HELP swarm_manager_nodes The number of nodes +# TYPE swarm_manager_nodes gauge +swarm_manager_nodes{state="disconnected"} 0 +swarm_manager_nodes{state="down"} 0 +swarm_manager_nodes{state="ready"} 0 +swarm_manager_nodes{state="unknown"} 0 +# HELP swarm_manager_secrets_total The number of secrets in the cluster object store +# TYPE swarm_manager_secrets_total gauge +swarm_manager_secrets_total 0 +# HELP swarm_manager_services_total The number of services in the cluster object store +# TYPE swarm_manager_services_total gauge +swarm_manager_services_total 0 +# HELP swarm_manager_tasks_total The number of tasks in the cluster object store +# TYPE swarm_manager_tasks_total gauge +swarm_manager_tasks_total{state="accepted"} 0 +swarm_manager_tasks_total{state="assigned"} 0 +swarm_manager_tasks_total{state="complete"} 0 +swarm_manager_tasks_total{state="failed"} 0 +swarm_manager_tasks_total{state="new"} 0 +swarm_manager_tasks_total{state="orphaned"} 0 +swarm_manager_tasks_total{state="pending"} 0 +swarm_manager_tasks_total{state="preparing"} 0 +swarm_manager_tasks_total{state="ready"} 0 +swarm_manager_tasks_total{state="rejected"} 0 +swarm_manager_tasks_total{state="remove"} 0 +swarm_manager_tasks_total{state="running"} 0 +swarm_manager_tasks_total{state="shutdown"} 0 +swarm_manager_tasks_total{state="starting"} 0 +# HELP swarm_node_manager Whether this node is a manager or not +# TYPE swarm_node_manager gauge +swarm_node_manager 0 +# HELP swarm_raft_snapshot_latency_seconds Raft snapshot create latency. +# TYPE swarm_raft_snapshot_latency_seconds histogram +swarm_raft_snapshot_latency_seconds_bucket{le="0.005"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.01"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.025"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.05"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.1"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.25"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.5"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="1"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="2.5"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="5"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="10"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="+Inf"} 0 +swarm_raft_snapshot_latency_seconds_sum 0 +swarm_raft_snapshot_latency_seconds_count 0 +# HELP swarm_raft_transaction_latency_seconds Raft transaction latency. +# TYPE swarm_raft_transaction_latency_seconds histogram +swarm_raft_transaction_latency_seconds_bucket{le="0.005"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.01"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.025"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.05"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.1"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.25"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.5"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="1"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="2.5"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="5"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="10"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="+Inf"} 0 +swarm_raft_transaction_latency_seconds_sum 0 +swarm_raft_transaction_latency_seconds_count 0 +# HELP swarm_store_batch_latency_seconds Raft store batch latency. +# TYPE swarm_store_batch_latency_seconds histogram +swarm_store_batch_latency_seconds_bucket{le="0.005"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.01"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.025"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.05"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.1"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.25"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.5"} 0 +swarm_store_batch_latency_seconds_bucket{le="1"} 0 +swarm_store_batch_latency_seconds_bucket{le="2.5"} 0 +swarm_store_batch_latency_seconds_bucket{le="5"} 0 +swarm_store_batch_latency_seconds_bucket{le="10"} 0 +swarm_store_batch_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_batch_latency_seconds_sum 0 +swarm_store_batch_latency_seconds_count 0 +# HELP swarm_store_lookup_latency_seconds Raft store read latency. +# TYPE swarm_store_lookup_latency_seconds histogram +swarm_store_lookup_latency_seconds_bucket{le="0.005"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.01"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.025"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.05"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.1"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.25"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.5"} 0 +swarm_store_lookup_latency_seconds_bucket{le="1"} 0 +swarm_store_lookup_latency_seconds_bucket{le="2.5"} 0 +swarm_store_lookup_latency_seconds_bucket{le="5"} 0 +swarm_store_lookup_latency_seconds_bucket{le="10"} 0 +swarm_store_lookup_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_lookup_latency_seconds_sum 0 +swarm_store_lookup_latency_seconds_count 0 +# HELP swarm_store_memory_store_lock_duration_seconds Duration for which the raft memory store lock was held. +# TYPE swarm_store_memory_store_lock_duration_seconds histogram +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.005"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.01"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.025"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.05"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.1"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.25"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.5"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="1"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="2.5"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="5"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="10"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="+Inf"} 0 +swarm_store_memory_store_lock_duration_seconds_sum 0 +swarm_store_memory_store_lock_duration_seconds_count 0 +# HELP swarm_store_read_tx_latency_seconds Raft store read tx latency. +# TYPE swarm_store_read_tx_latency_seconds histogram +swarm_store_read_tx_latency_seconds_bucket{le="0.005"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.01"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.025"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.05"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.1"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.25"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.5"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="1"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="2.5"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="5"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="10"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_read_tx_latency_seconds_sum 0 +swarm_store_read_tx_latency_seconds_count 0 +# HELP swarm_store_write_tx_latency_seconds Raft store write tx latency. +# TYPE swarm_store_write_tx_latency_seconds histogram +swarm_store_write_tx_latency_seconds_bucket{le="0.005"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.01"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.025"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.05"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.1"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.25"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.5"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="1"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="2.5"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="5"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="10"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_write_tx_latency_seconds_sum 0 +swarm_store_write_tx_latency_seconds_count 0
\ No newline at end of file diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/v18.09.3-ce-swarm.txt b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/v18.09.3-ce-swarm.txt new file mode 100644 index 000000000..edd69abee --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/v18.09.3-ce-swarm.txt @@ -0,0 +1,468 @@ +# HELP builder_builds_failed_total Number of failed image builds +# TYPE builder_builds_failed_total counter +builder_builds_failed_total{reason="build_canceled"} 1 +builder_builds_failed_total{reason="build_target_not_reachable_error"} 2 +builder_builds_failed_total{reason="command_not_supported_error"} 3 +builder_builds_failed_total{reason="dockerfile_empty_error"} 4 +builder_builds_failed_total{reason="dockerfile_syntax_error"} 5 +builder_builds_failed_total{reason="error_processing_commands_error"} 6 +builder_builds_failed_total{reason="missing_onbuild_arguments_error"} 7 +builder_builds_failed_total{reason="unknown_instruction_error"} 8 +# HELP builder_builds_triggered_total Number of triggered image builds +# TYPE builder_builds_triggered_total counter +builder_builds_triggered_total 0 +# HELP engine_daemon_container_actions_seconds The number of seconds it takes to process each container action +# TYPE engine_daemon_container_actions_seconds histogram +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="changes"} 0 +engine_daemon_container_actions_seconds_count{action="changes"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="commit"} 0 +engine_daemon_container_actions_seconds_count{action="commit"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="create"} 0 +engine_daemon_container_actions_seconds_count{action="create"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="delete"} 0 +engine_daemon_container_actions_seconds_count{action="delete"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="start"} 0 +engine_daemon_container_actions_seconds_count{action="start"} 1 +# HELP engine_daemon_container_states_containers The count of containers in various states +# TYPE engine_daemon_container_states_containers gauge +engine_daemon_container_states_containers{state="paused"} 11 +engine_daemon_container_states_containers{state="running"} 12 +engine_daemon_container_states_containers{state="stopped"} 13 +# HELP engine_daemon_engine_cpus_cpus The number of cpus that the host system of the engine has +# TYPE engine_daemon_engine_cpus_cpus gauge +engine_daemon_engine_cpus_cpus 4 +# HELP engine_daemon_engine_info The information related to the engine and the OS it is running on +# TYPE engine_daemon_engine_info gauge +engine_daemon_engine_info{architecture="x86_64",commit="774a1f4eee",daemon_id="NFZK:ZHHR:73WY:RV7D:MMU2:SE24:WWRJ:A3WN:WMMA:SPCL:PVO3:VGY7",graphdriver="overlay2",kernel="4.14.105-1-MANJARO",os="Manjaro Linux",os_type="linux",version="18.09.3-ce"} 1 +# HELP engine_daemon_engine_memory_bytes The number of bytes of memory that the host system of the engine has +# TYPE engine_daemon_engine_memory_bytes gauge +engine_daemon_engine_memory_bytes 2.5215361024e+10 +# HELP engine_daemon_events_subscribers_total The number of current subscribers to events +# TYPE engine_daemon_events_subscribers_total gauge +engine_daemon_events_subscribers_total 0 +# HELP engine_daemon_events_total The number of events logged +# TYPE engine_daemon_events_total counter +engine_daemon_events_total 0 +# HELP engine_daemon_health_checks_failed_total The total number of failed health checks +# TYPE engine_daemon_health_checks_failed_total counter +engine_daemon_health_checks_failed_total 33 +# HELP engine_daemon_health_checks_total The total number of health checks +# TYPE engine_daemon_health_checks_total counter +engine_daemon_health_checks_total 0 +# HELP etcd_debugging_snap_save_marshalling_duration_seconds The marshalling cost distributions of save called by snapshot. +# TYPE etcd_debugging_snap_save_marshalling_duration_seconds histogram +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_sum 0 +etcd_debugging_snap_save_marshalling_duration_seconds_count 0 +# HELP etcd_debugging_snap_save_total_duration_seconds The total latency distributions of save called by snapshot. +# TYPE etcd_debugging_snap_save_total_duration_seconds histogram +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"} 0 +etcd_debugging_snap_save_total_duration_seconds_sum 0 +etcd_debugging_snap_save_total_duration_seconds_count 0 +# HELP etcd_disk_wal_fsync_duration_seconds The latency distributions of fsync called by wal. +# TYPE etcd_disk_wal_fsync_duration_seconds histogram +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"} 0 +etcd_disk_wal_fsync_duration_seconds_sum 0 +etcd_disk_wal_fsync_duration_seconds_count 0 +# HELP go_gc_duration_seconds A summary of the GC invocation durations. +# TYPE go_gc_duration_seconds summary +go_gc_duration_seconds{quantile="0"} 1.0085e-05 +go_gc_duration_seconds{quantile="0.25"} 3.1991e-05 +go_gc_duration_seconds{quantile="0.5"} 4.8062e-05 +go_gc_duration_seconds{quantile="0.75"} 9.067e-05 +go_gc_duration_seconds{quantile="1"} 0.000175239 +go_gc_duration_seconds_sum 0.000724173 +go_gc_duration_seconds_count 12 +# HELP go_goroutines Number of goroutines that currently exist. +# TYPE go_goroutines gauge +go_goroutines 50 +# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. +# TYPE go_memstats_alloc_bytes gauge +go_memstats_alloc_bytes 8.13368e+06 +# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed. +# TYPE go_memstats_alloc_bytes_total counter +go_memstats_alloc_bytes_total 2.7343352e+07 +# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table. +# TYPE go_memstats_buck_hash_sys_bytes gauge +go_memstats_buck_hash_sys_bytes 1.454057e+06 +# HELP go_memstats_frees_total Total number of frees. +# TYPE go_memstats_frees_total counter +go_memstats_frees_total 319815 +# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata. +# TYPE go_memstats_gc_sys_bytes gauge +go_memstats_gc_sys_bytes 2.398208e+06 +# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use. +# TYPE go_memstats_heap_alloc_bytes gauge +go_memstats_heap_alloc_bytes 8.13368e+06 +# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used. +# TYPE go_memstats_heap_idle_bytes gauge +go_memstats_heap_idle_bytes 5.5648256e+07 +# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use. +# TYPE go_memstats_heap_inuse_bytes gauge +go_memstats_heap_inuse_bytes 1.0477568e+07 +# HELP go_memstats_heap_objects Number of allocated objects. +# TYPE go_memstats_heap_objects gauge +go_memstats_heap_objects 114878 +# HELP go_memstats_heap_released_bytes_total Total number of heap bytes released to OS. +# TYPE go_memstats_heap_released_bytes_total counter +go_memstats_heap_released_bytes_total 5.4738944e+07 +# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system. +# TYPE go_memstats_heap_sys_bytes gauge +go_memstats_heap_sys_bytes 6.6125824e+07 +# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection. +# TYPE go_memstats_last_gc_time_seconds gauge +go_memstats_last_gc_time_seconds 1.5528438390886765e+09 +# HELP go_memstats_lookups_total Total number of pointer lookups. +# TYPE go_memstats_lookups_total counter +go_memstats_lookups_total 0 +# HELP go_memstats_mallocs_total Total number of mallocs. +# TYPE go_memstats_mallocs_total counter +go_memstats_mallocs_total 434693 +# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures. +# TYPE go_memstats_mcache_inuse_bytes gauge +go_memstats_mcache_inuse_bytes 6944 +# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system. +# TYPE go_memstats_mcache_sys_bytes gauge +go_memstats_mcache_sys_bytes 16384 +# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures. +# TYPE go_memstats_mspan_inuse_bytes gauge +go_memstats_mspan_inuse_bytes 159696 +# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system. +# TYPE go_memstats_mspan_sys_bytes gauge +go_memstats_mspan_sys_bytes 196608 +# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place. +# TYPE go_memstats_next_gc_bytes gauge +go_memstats_next_gc_bytes 1.5134512e+07 +# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations. +# TYPE go_memstats_other_sys_bytes gauge +go_memstats_other_sys_bytes 1.112335e+06 +# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator. +# TYPE go_memstats_stack_inuse_bytes gauge +go_memstats_stack_inuse_bytes 983040 +# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator. +# TYPE go_memstats_stack_sys_bytes gauge +go_memstats_stack_sys_bytes 983040 +# HELP go_memstats_sys_bytes Number of bytes obtained by system. Sum of all system allocations. +# TYPE go_memstats_sys_bytes gauge +go_memstats_sys_bytes 7.2286456e+07 +# HELP http_request_duration_microseconds The HTTP request latencies in microseconds. +# TYPE http_request_duration_microseconds summary +http_request_duration_microseconds{handler="prometheus",quantile="0.5"} NaN +http_request_duration_microseconds{handler="prometheus",quantile="0.9"} NaN +http_request_duration_microseconds{handler="prometheus",quantile="0.99"} NaN +http_request_duration_microseconds_sum{handler="prometheus"} 0 +http_request_duration_microseconds_count{handler="prometheus"} 0 +# HELP http_request_size_bytes The HTTP request sizes in bytes. +# TYPE http_request_size_bytes summary +http_request_size_bytes{handler="prometheus",quantile="0.5"} NaN +http_request_size_bytes{handler="prometheus",quantile="0.9"} NaN +http_request_size_bytes{handler="prometheus",quantile="0.99"} NaN +http_request_size_bytes_sum{handler="prometheus"} 0 +http_request_size_bytes_count{handler="prometheus"} 0 +# HELP http_response_size_bytes The HTTP response sizes in bytes. +# TYPE http_response_size_bytes summary +http_response_size_bytes{handler="prometheus",quantile="0.5"} NaN +http_response_size_bytes{handler="prometheus",quantile="0.9"} NaN +http_response_size_bytes{handler="prometheus",quantile="0.99"} NaN +http_response_size_bytes_sum{handler="prometheus"} 0 +http_response_size_bytes_count{handler="prometheus"} 0 +# HELP logger_log_entries_size_greater_than_buffer_total Number of log entries which are larger than the log buffer +# TYPE logger_log_entries_size_greater_than_buffer_total counter +logger_log_entries_size_greater_than_buffer_total 0 +# HELP logger_log_read_operations_failed_total Number of log reads from container stdio that failed +# TYPE logger_log_read_operations_failed_total counter +logger_log_read_operations_failed_total 0 +# HELP logger_log_write_operations_failed_total Number of log write operations that failed +# TYPE logger_log_write_operations_failed_total counter +logger_log_write_operations_failed_total 0 +# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE process_cpu_seconds_total counter +process_cpu_seconds_total 2.12 +# HELP process_max_fds Maximum number of open file descriptors. +# TYPE process_max_fds gauge +process_max_fds 1.048576e+06 +# HELP process_open_fds Number of open file descriptors. +# TYPE process_open_fds gauge +process_open_fds 24 +# HELP process_resident_memory_bytes Resident memory size in bytes. +# TYPE process_resident_memory_bytes gauge +process_resident_memory_bytes 8.5929984e+07 +# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. +# TYPE process_start_time_seconds gauge +process_start_time_seconds 1.55284287673e+09 +# HELP process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE process_virtual_memory_bytes gauge +process_virtual_memory_bytes 1.257283584e+09 +# HELP swarm_dispatcher_scheduling_delay_seconds Scheduling delay is the time a task takes to go from NEW to RUNNING state. +# TYPE swarm_dispatcher_scheduling_delay_seconds histogram +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.005"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.01"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.025"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.05"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.1"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.25"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.5"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="1"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="2.5"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="5"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="10"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="+Inf"} 0 +swarm_dispatcher_scheduling_delay_seconds_sum 0 +swarm_dispatcher_scheduling_delay_seconds_count 0 +# HELP swarm_manager_configs_total The number of configs in the cluster object store +# TYPE swarm_manager_configs_total gauge +swarm_manager_configs_total 1 +# HELP swarm_manager_leader Indicates if this manager node is a leader +# TYPE swarm_manager_leader gauge +swarm_manager_leader 1 +# HELP swarm_manager_networks_total The number of networks in the cluster object store +# TYPE swarm_manager_networks_total gauge +swarm_manager_networks_total 3 +# HELP swarm_manager_nodes The number of nodes +# TYPE swarm_manager_nodes gauge +swarm_manager_nodes{state="disconnected"} 1 +swarm_manager_nodes{state="down"} 2 +swarm_manager_nodes{state="ready"} 3 +swarm_manager_nodes{state="unknown"} 4 +# HELP swarm_manager_secrets_total The number of secrets in the cluster object store +# TYPE swarm_manager_secrets_total gauge +swarm_manager_secrets_total 1 +# HELP swarm_manager_services_total The number of services in the cluster object store +# TYPE swarm_manager_services_total gauge +swarm_manager_services_total 1 +# HELP swarm_manager_tasks_total The number of tasks in the cluster object store +# TYPE swarm_manager_tasks_total gauge +swarm_manager_tasks_total{state="accepted"} 1 +swarm_manager_tasks_total{state="assigned"} 2 +swarm_manager_tasks_total{state="complete"} 3 +swarm_manager_tasks_total{state="failed"} 4 +swarm_manager_tasks_total{state="new"} 5 +swarm_manager_tasks_total{state="orphaned"} 6 +swarm_manager_tasks_total{state="pending"} 7 +swarm_manager_tasks_total{state="preparing"} 8 +swarm_manager_tasks_total{state="ready"} 9 +swarm_manager_tasks_total{state="rejected"} 10 +swarm_manager_tasks_total{state="remove"} 11 +swarm_manager_tasks_total{state="running"} 12 +swarm_manager_tasks_total{state="shutdown"} 13 +swarm_manager_tasks_total{state="starting"} 14 +# HELP swarm_node_info Information related to the swarm +# TYPE swarm_node_info gauge +swarm_node_info{node_id="193816ofdqsg9kkm0hkfladvo",swarm_id="k1a6iu49n97a1vej3u5pjgsbr"} 1 +# HELP swarm_node_manager Whether this node is a manager or not +# TYPE swarm_node_manager gauge +swarm_node_manager 1 +# HELP swarm_raft_snapshot_latency_seconds Raft snapshot create latency. +# TYPE swarm_raft_snapshot_latency_seconds histogram +swarm_raft_snapshot_latency_seconds_bucket{le="0.005"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.01"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.025"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.05"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.1"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.25"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.5"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="1"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="2.5"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="5"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="10"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="+Inf"} 0 +swarm_raft_snapshot_latency_seconds_sum 0 +swarm_raft_snapshot_latency_seconds_count 0 +# HELP swarm_raft_transaction_latency_seconds Raft transaction latency. +# TYPE swarm_raft_transaction_latency_seconds histogram +swarm_raft_transaction_latency_seconds_bucket{le="0.005"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.01"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.025"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.05"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.1"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.25"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.5"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="1"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="2.5"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="5"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="10"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="+Inf"} 0 +swarm_raft_transaction_latency_seconds_sum 0 +swarm_raft_transaction_latency_seconds_count 0 +# HELP swarm_store_batch_latency_seconds Raft store batch latency. +# TYPE swarm_store_batch_latency_seconds histogram +swarm_store_batch_latency_seconds_bucket{le="0.005"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.01"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.025"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.05"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.1"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.25"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.5"} 0 +swarm_store_batch_latency_seconds_bucket{le="1"} 0 +swarm_store_batch_latency_seconds_bucket{le="2.5"} 0 +swarm_store_batch_latency_seconds_bucket{le="5"} 0 +swarm_store_batch_latency_seconds_bucket{le="10"} 0 +swarm_store_batch_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_batch_latency_seconds_sum 0 +swarm_store_batch_latency_seconds_count 0 +# HELP swarm_store_lookup_latency_seconds Raft store read latency. +# TYPE swarm_store_lookup_latency_seconds histogram +swarm_store_lookup_latency_seconds_bucket{le="0.005"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.01"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.025"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.05"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.1"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.25"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.5"} 0 +swarm_store_lookup_latency_seconds_bucket{le="1"} 0 +swarm_store_lookup_latency_seconds_bucket{le="2.5"} 0 +swarm_store_lookup_latency_seconds_bucket{le="5"} 0 +swarm_store_lookup_latency_seconds_bucket{le="10"} 0 +swarm_store_lookup_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_lookup_latency_seconds_sum 0 +swarm_store_lookup_latency_seconds_count 0 +# HELP swarm_store_memory_store_lock_duration_seconds Duration for which the raft memory store lock was held. +# TYPE swarm_store_memory_store_lock_duration_seconds histogram +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.005"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.01"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.025"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.05"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.1"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.25"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.5"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="1"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="2.5"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="5"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="10"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="+Inf"} 0 +swarm_store_memory_store_lock_duration_seconds_sum 0 +swarm_store_memory_store_lock_duration_seconds_count 0 +# HELP swarm_store_read_tx_latency_seconds Raft store read tx latency. +# TYPE swarm_store_read_tx_latency_seconds histogram +swarm_store_read_tx_latency_seconds_bucket{le="0.005"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.01"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.025"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.05"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.1"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.25"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.5"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="1"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="2.5"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="5"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="10"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_read_tx_latency_seconds_sum 0 +swarm_store_read_tx_latency_seconds_count 0 +# HELP swarm_store_write_tx_latency_seconds Raft store write tx latency. +# TYPE swarm_store_write_tx_latency_seconds histogram +swarm_store_write_tx_latency_seconds_bucket{le="0.005"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.01"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.025"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.05"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.1"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.25"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.5"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="1"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="2.5"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="5"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="10"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_write_tx_latency_seconds_sum 0 +swarm_store_write_tx_latency_seconds_count 0
\ No newline at end of file diff --git a/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/v18.09.3-ce.txt b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/v18.09.3-ce.txt new file mode 100644 index 000000000..b54589210 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/docker_engine/testdata/v18.09.3-ce.txt @@ -0,0 +1,465 @@ +# HELP builder_builds_failed_total Number of failed image builds +# TYPE builder_builds_failed_total counter +builder_builds_failed_total{reason="build_canceled"} 1 +builder_builds_failed_total{reason="build_target_not_reachable_error"} 2 +builder_builds_failed_total{reason="command_not_supported_error"} 3 +builder_builds_failed_total{reason="dockerfile_empty_error"} 4 +builder_builds_failed_total{reason="dockerfile_syntax_error"} 5 +builder_builds_failed_total{reason="error_processing_commands_error"} 6 +builder_builds_failed_total{reason="missing_onbuild_arguments_error"} 7 +builder_builds_failed_total{reason="unknown_instruction_error"} 8 +# HELP builder_builds_triggered_total Number of triggered image builds +# TYPE builder_builds_triggered_total counter +builder_builds_triggered_total 0 +# HELP engine_daemon_container_actions_seconds The number of seconds it takes to process each container action +# TYPE engine_daemon_container_actions_seconds histogram +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="changes",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="changes"} 0 +engine_daemon_container_actions_seconds_count{action="changes"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="commit",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="commit"} 0 +engine_daemon_container_actions_seconds_count{action="commit"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="create",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="create"} 0 +engine_daemon_container_actions_seconds_count{action="create"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="delete",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="delete"} 0 +engine_daemon_container_actions_seconds_count{action="delete"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.005"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.01"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.025"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.05"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.1"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.25"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="0.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="1"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="2.5"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="5"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="10"} 1 +engine_daemon_container_actions_seconds_bucket{action="start",le="+Inf"} 1 +engine_daemon_container_actions_seconds_sum{action="start"} 0 +engine_daemon_container_actions_seconds_count{action="start"} 1 +# HELP engine_daemon_container_states_containers The count of containers in various states +# TYPE engine_daemon_container_states_containers gauge +engine_daemon_container_states_containers{state="paused"} 11 +engine_daemon_container_states_containers{state="running"} 12 +engine_daemon_container_states_containers{state="stopped"} 13 +# HELP engine_daemon_engine_cpus_cpus The number of cpus that the host system of the engine has +# TYPE engine_daemon_engine_cpus_cpus gauge +engine_daemon_engine_cpus_cpus 4 +# HELP engine_daemon_engine_info The information related to the engine and the OS it is running on +# TYPE engine_daemon_engine_info gauge +engine_daemon_engine_info{architecture="x86_64",commit="774a1f4eee",daemon_id="NFZK:ZHHR:73WY:RV7D:MMU2:SE24:WWRJ:A3WN:WMMA:SPCL:PVO3:VGY7",graphdriver="overlay2",kernel="4.14.105-1-MANJARO",os="Manjaro Linux",os_type="linux",version="18.09.3-ce"} 1 +# HELP engine_daemon_engine_memory_bytes The number of bytes of memory that the host system of the engine has +# TYPE engine_daemon_engine_memory_bytes gauge +engine_daemon_engine_memory_bytes 2.5215361024e+10 +# HELP engine_daemon_events_subscribers_total The number of current subscribers to events +# TYPE engine_daemon_events_subscribers_total gauge +engine_daemon_events_subscribers_total 0 +# HELP engine_daemon_events_total The number of events logged +# TYPE engine_daemon_events_total counter +engine_daemon_events_total 0 +# HELP engine_daemon_health_checks_failed_total The total number of failed health checks +# TYPE engine_daemon_health_checks_failed_total counter +engine_daemon_health_checks_failed_total 33 +# HELP engine_daemon_health_checks_total The total number of health checks +# TYPE engine_daemon_health_checks_total counter +engine_daemon_health_checks_total 0 +# HELP etcd_debugging_snap_save_marshalling_duration_seconds The marshalling cost distributions of save called by snapshot. +# TYPE etcd_debugging_snap_save_marshalling_duration_seconds histogram +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.001"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.002"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.004"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.008"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.016"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.032"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.064"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.128"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.256"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="0.512"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="1.024"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="2.048"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="4.096"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="8.192"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_bucket{le="+Inf"} 0 +etcd_debugging_snap_save_marshalling_duration_seconds_sum 0 +etcd_debugging_snap_save_marshalling_duration_seconds_count 0 +# HELP etcd_debugging_snap_save_total_duration_seconds The total latency distributions of save called by snapshot. +# TYPE etcd_debugging_snap_save_total_duration_seconds histogram +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.001"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.002"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.004"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.008"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.016"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.032"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.064"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.128"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.256"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="0.512"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="1.024"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="2.048"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="4.096"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="8.192"} 0 +etcd_debugging_snap_save_total_duration_seconds_bucket{le="+Inf"} 0 +etcd_debugging_snap_save_total_duration_seconds_sum 0 +etcd_debugging_snap_save_total_duration_seconds_count 0 +# HELP etcd_disk_wal_fsync_duration_seconds The latency distributions of fsync called by wal. +# TYPE etcd_disk_wal_fsync_duration_seconds histogram +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.001"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.002"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.004"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.008"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.016"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.032"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.064"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.128"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.256"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="0.512"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="1.024"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="2.048"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="4.096"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="8.192"} 0 +etcd_disk_wal_fsync_duration_seconds_bucket{le="+Inf"} 0 +etcd_disk_wal_fsync_duration_seconds_sum 0 +etcd_disk_wal_fsync_duration_seconds_count 0 +# HELP go_gc_duration_seconds A summary of the GC invocation durations. +# TYPE go_gc_duration_seconds summary +go_gc_duration_seconds{quantile="0"} 1.0085e-05 +go_gc_duration_seconds{quantile="0.25"} 3.1991e-05 +go_gc_duration_seconds{quantile="0.5"} 4.8062e-05 +go_gc_duration_seconds{quantile="0.75"} 9.067e-05 +go_gc_duration_seconds{quantile="1"} 0.000175239 +go_gc_duration_seconds_sum 0.000724173 +go_gc_duration_seconds_count 12 +# HELP go_goroutines Number of goroutines that currently exist. +# TYPE go_goroutines gauge +go_goroutines 50 +# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use. +# TYPE go_memstats_alloc_bytes gauge +go_memstats_alloc_bytes 8.13368e+06 +# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed. +# TYPE go_memstats_alloc_bytes_total counter +go_memstats_alloc_bytes_total 2.7343352e+07 +# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table. +# TYPE go_memstats_buck_hash_sys_bytes gauge +go_memstats_buck_hash_sys_bytes 1.454057e+06 +# HELP go_memstats_frees_total Total number of frees. +# TYPE go_memstats_frees_total counter +go_memstats_frees_total 319815 +# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata. +# TYPE go_memstats_gc_sys_bytes gauge +go_memstats_gc_sys_bytes 2.398208e+06 +# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use. +# TYPE go_memstats_heap_alloc_bytes gauge +go_memstats_heap_alloc_bytes 8.13368e+06 +# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used. +# TYPE go_memstats_heap_idle_bytes gauge +go_memstats_heap_idle_bytes 5.5648256e+07 +# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use. +# TYPE go_memstats_heap_inuse_bytes gauge +go_memstats_heap_inuse_bytes 1.0477568e+07 +# HELP go_memstats_heap_objects Number of allocated objects. +# TYPE go_memstats_heap_objects gauge +go_memstats_heap_objects 114878 +# HELP go_memstats_heap_released_bytes_total Total number of heap bytes released to OS. +# TYPE go_memstats_heap_released_bytes_total counter +go_memstats_heap_released_bytes_total 5.4738944e+07 +# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system. +# TYPE go_memstats_heap_sys_bytes gauge +go_memstats_heap_sys_bytes 6.6125824e+07 +# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection. +# TYPE go_memstats_last_gc_time_seconds gauge +go_memstats_last_gc_time_seconds 1.5528438390886765e+09 +# HELP go_memstats_lookups_total Total number of pointer lookups. +# TYPE go_memstats_lookups_total counter +go_memstats_lookups_total 0 +# HELP go_memstats_mallocs_total Total number of mallocs. +# TYPE go_memstats_mallocs_total counter +go_memstats_mallocs_total 434693 +# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures. +# TYPE go_memstats_mcache_inuse_bytes gauge +go_memstats_mcache_inuse_bytes 6944 +# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system. +# TYPE go_memstats_mcache_sys_bytes gauge +go_memstats_mcache_sys_bytes 16384 +# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures. +# TYPE go_memstats_mspan_inuse_bytes gauge +go_memstats_mspan_inuse_bytes 159696 +# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system. +# TYPE go_memstats_mspan_sys_bytes gauge +go_memstats_mspan_sys_bytes 196608 +# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place. +# TYPE go_memstats_next_gc_bytes gauge +go_memstats_next_gc_bytes 1.5134512e+07 +# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations. +# TYPE go_memstats_other_sys_bytes gauge +go_memstats_other_sys_bytes 1.112335e+06 +# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator. +# TYPE go_memstats_stack_inuse_bytes gauge +go_memstats_stack_inuse_bytes 983040 +# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator. +# TYPE go_memstats_stack_sys_bytes gauge +go_memstats_stack_sys_bytes 983040 +# HELP go_memstats_sys_bytes Number of bytes obtained by system. Sum of all system allocations. +# TYPE go_memstats_sys_bytes gauge +go_memstats_sys_bytes 7.2286456e+07 +# HELP http_request_duration_microseconds The HTTP request latencies in microseconds. +# TYPE http_request_duration_microseconds summary +http_request_duration_microseconds{handler="prometheus",quantile="0.5"} NaN +http_request_duration_microseconds{handler="prometheus",quantile="0.9"} NaN +http_request_duration_microseconds{handler="prometheus",quantile="0.99"} NaN +http_request_duration_microseconds_sum{handler="prometheus"} 0 +http_request_duration_microseconds_count{handler="prometheus"} 0 +# HELP http_request_size_bytes The HTTP request sizes in bytes. +# TYPE http_request_size_bytes summary +http_request_size_bytes{handler="prometheus",quantile="0.5"} NaN +http_request_size_bytes{handler="prometheus",quantile="0.9"} NaN +http_request_size_bytes{handler="prometheus",quantile="0.99"} NaN +http_request_size_bytes_sum{handler="prometheus"} 0 +http_request_size_bytes_count{handler="prometheus"} 0 +# HELP http_response_size_bytes The HTTP response sizes in bytes. +# TYPE http_response_size_bytes summary +http_response_size_bytes{handler="prometheus",quantile="0.5"} NaN +http_response_size_bytes{handler="prometheus",quantile="0.9"} NaN +http_response_size_bytes{handler="prometheus",quantile="0.99"} NaN +http_response_size_bytes_sum{handler="prometheus"} 0 +http_response_size_bytes_count{handler="prometheus"} 0 +# HELP logger_log_entries_size_greater_than_buffer_total Number of log entries which are larger than the log buffer +# TYPE logger_log_entries_size_greater_than_buffer_total counter +logger_log_entries_size_greater_than_buffer_total 0 +# HELP logger_log_read_operations_failed_total Number of log reads from container stdio that failed +# TYPE logger_log_read_operations_failed_total counter +logger_log_read_operations_failed_total 0 +# HELP logger_log_write_operations_failed_total Number of log write operations that failed +# TYPE logger_log_write_operations_failed_total counter +logger_log_write_operations_failed_total 0 +# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE process_cpu_seconds_total counter +process_cpu_seconds_total 2.12 +# HELP process_max_fds Maximum number of open file descriptors. +# TYPE process_max_fds gauge +process_max_fds 1.048576e+06 +# HELP process_open_fds Number of open file descriptors. +# TYPE process_open_fds gauge +process_open_fds 24 +# HELP process_resident_memory_bytes Resident memory size in bytes. +# TYPE process_resident_memory_bytes gauge +process_resident_memory_bytes 8.5929984e+07 +# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. +# TYPE process_start_time_seconds gauge +process_start_time_seconds 1.55284287673e+09 +# HELP process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE process_virtual_memory_bytes gauge +process_virtual_memory_bytes 1.257283584e+09 +# HELP swarm_dispatcher_scheduling_delay_seconds Scheduling delay is the time a task takes to go from NEW to RUNNING state. +# TYPE swarm_dispatcher_scheduling_delay_seconds histogram +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.005"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.01"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.025"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.05"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.1"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.25"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="0.5"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="1"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="2.5"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="5"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="10"} 0 +swarm_dispatcher_scheduling_delay_seconds_bucket{le="+Inf"} 0 +swarm_dispatcher_scheduling_delay_seconds_sum 0 +swarm_dispatcher_scheduling_delay_seconds_count 0 +# HELP swarm_manager_configs_total The number of configs in the cluster object store +# TYPE swarm_manager_configs_total gauge +swarm_manager_configs_total 0 +# HELP swarm_manager_leader Indicates if this manager node is a leader +# TYPE swarm_manager_leader gauge +swarm_manager_leader 0 +# HELP swarm_manager_networks_total The number of networks in the cluster object store +# TYPE swarm_manager_networks_total gauge +swarm_manager_networks_total 0 +# HELP swarm_manager_nodes The number of nodes +# TYPE swarm_manager_nodes gauge +swarm_manager_nodes{state="disconnected"} 0 +swarm_manager_nodes{state="down"} 0 +swarm_manager_nodes{state="ready"} 0 +swarm_manager_nodes{state="unknown"} 0 +# HELP swarm_manager_secrets_total The number of secrets in the cluster object store +# TYPE swarm_manager_secrets_total gauge +swarm_manager_secrets_total 0 +# HELP swarm_manager_services_total The number of services in the cluster object store +# TYPE swarm_manager_services_total gauge +swarm_manager_services_total 0 +# HELP swarm_manager_tasks_total The number of tasks in the cluster object store +# TYPE swarm_manager_tasks_total gauge +swarm_manager_tasks_total{state="accepted"} 0 +swarm_manager_tasks_total{state="assigned"} 0 +swarm_manager_tasks_total{state="complete"} 0 +swarm_manager_tasks_total{state="failed"} 0 +swarm_manager_tasks_total{state="new"} 0 +swarm_manager_tasks_total{state="orphaned"} 0 +swarm_manager_tasks_total{state="pending"} 0 +swarm_manager_tasks_total{state="preparing"} 0 +swarm_manager_tasks_total{state="ready"} 0 +swarm_manager_tasks_total{state="rejected"} 0 +swarm_manager_tasks_total{state="remove"} 0 +swarm_manager_tasks_total{state="running"} 0 +swarm_manager_tasks_total{state="shutdown"} 0 +swarm_manager_tasks_total{state="starting"} 0 +# HELP swarm_node_manager Whether this node is a manager or not +# TYPE swarm_node_manager gauge +swarm_node_manager 0 +# HELP swarm_raft_snapshot_latency_seconds Raft snapshot create latency. +# TYPE swarm_raft_snapshot_latency_seconds histogram +swarm_raft_snapshot_latency_seconds_bucket{le="0.005"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.01"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.025"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.05"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.1"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.25"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="0.5"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="1"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="2.5"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="5"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="10"} 0 +swarm_raft_snapshot_latency_seconds_bucket{le="+Inf"} 0 +swarm_raft_snapshot_latency_seconds_sum 0 +swarm_raft_snapshot_latency_seconds_count 0 +# HELP swarm_raft_transaction_latency_seconds Raft transaction latency. +# TYPE swarm_raft_transaction_latency_seconds histogram +swarm_raft_transaction_latency_seconds_bucket{le="0.005"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.01"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.025"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.05"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.1"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.25"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="0.5"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="1"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="2.5"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="5"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="10"} 0 +swarm_raft_transaction_latency_seconds_bucket{le="+Inf"} 0 +swarm_raft_transaction_latency_seconds_sum 0 +swarm_raft_transaction_latency_seconds_count 0 +# HELP swarm_store_batch_latency_seconds Raft store batch latency. +# TYPE swarm_store_batch_latency_seconds histogram +swarm_store_batch_latency_seconds_bucket{le="0.005"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.01"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.025"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.05"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.1"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.25"} 0 +swarm_store_batch_latency_seconds_bucket{le="0.5"} 0 +swarm_store_batch_latency_seconds_bucket{le="1"} 0 +swarm_store_batch_latency_seconds_bucket{le="2.5"} 0 +swarm_store_batch_latency_seconds_bucket{le="5"} 0 +swarm_store_batch_latency_seconds_bucket{le="10"} 0 +swarm_store_batch_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_batch_latency_seconds_sum 0 +swarm_store_batch_latency_seconds_count 0 +# HELP swarm_store_lookup_latency_seconds Raft store read latency. +# TYPE swarm_store_lookup_latency_seconds histogram +swarm_store_lookup_latency_seconds_bucket{le="0.005"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.01"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.025"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.05"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.1"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.25"} 0 +swarm_store_lookup_latency_seconds_bucket{le="0.5"} 0 +swarm_store_lookup_latency_seconds_bucket{le="1"} 0 +swarm_store_lookup_latency_seconds_bucket{le="2.5"} 0 +swarm_store_lookup_latency_seconds_bucket{le="5"} 0 +swarm_store_lookup_latency_seconds_bucket{le="10"} 0 +swarm_store_lookup_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_lookup_latency_seconds_sum 0 +swarm_store_lookup_latency_seconds_count 0 +# HELP swarm_store_memory_store_lock_duration_seconds Duration for which the raft memory store lock was held. +# TYPE swarm_store_memory_store_lock_duration_seconds histogram +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.005"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.01"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.025"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.05"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.1"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.25"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="0.5"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="1"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="2.5"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="5"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="10"} 0 +swarm_store_memory_store_lock_duration_seconds_bucket{le="+Inf"} 0 +swarm_store_memory_store_lock_duration_seconds_sum 0 +swarm_store_memory_store_lock_duration_seconds_count 0 +# HELP swarm_store_read_tx_latency_seconds Raft store read tx latency. +# TYPE swarm_store_read_tx_latency_seconds histogram +swarm_store_read_tx_latency_seconds_bucket{le="0.005"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.01"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.025"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.05"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.1"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.25"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="0.5"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="1"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="2.5"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="5"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="10"} 0 +swarm_store_read_tx_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_read_tx_latency_seconds_sum 0 +swarm_store_read_tx_latency_seconds_count 0 +# HELP swarm_store_write_tx_latency_seconds Raft store write tx latency. +# TYPE swarm_store_write_tx_latency_seconds histogram +swarm_store_write_tx_latency_seconds_bucket{le="0.005"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.01"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.025"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.05"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.1"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.25"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="0.5"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="1"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="2.5"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="5"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="10"} 0 +swarm_store_write_tx_latency_seconds_bucket{le="+Inf"} 0 +swarm_store_write_tx_latency_seconds_sum 0 +swarm_store_write_tx_latency_seconds_count 0
\ No newline at end of file |