diff --git a/test/metric_value_benchmark/agent_configs/all_infra_config.json b/test/metric_value_benchmark/agent_configs/all_infra_config.json new file mode 100644 index 000000000..03cad84a1 --- /dev/null +++ b/test/metric_value_benchmark/agent_configs/all_infra_config.json @@ -0,0 +1,118 @@ +{ + "agent": { + "metrics_collection_interval": 10, + "run_as_user": "root", + "debug": true, + "logfile": "" + }, + "metrics": { + "namespace": "MetricValueBenchmarkTest", + "append_dimensions": { + "InstanceId": "${aws:InstanceId}" + }, + "aggregation_dimensions": [ + ["InstanceId"] + ], + "metrics_collected": { + "cpu": { + "measurement": [ + {"name": "time_active", "rename": "cpu_time_active_renamed"}, + "time_guest", "time_guest_nice", "time_idle", "time_iowait", "time_irq", + "time_nice", "time_softirq", "time_steal", "time_system", "time_user", + "usage_active", "usage_guest", "usage_guest_nice", "usage_idle", "usage_iowait", "usage_irq", + "usage_nice", "usage_softirq", "usage_steal", "usage_system", "usage_user" + ], + "metrics_collection_interval": 10 + }, + "mem": { + "measurement": [ + "active", "available", "available_percent", "buffered", "cached", "free", "inactive", "shared", "total", + "used", "used_percent" + ], + "metrics_collection_interval": 10 + }, + "disk": { + "resources": [ + "*" + ], + "measurement": [ + "free", + "inodes_free", + "inodes_total", + "inodes_used", + "total", + "used", + "used_percent" + ], + "drop_device": true + }, + "diskio": { + "resources": [ + "*" + ], + "measurement": [ + "iops_in_progress", "io_time", "reads", "read_bytes", "read_time", "writes", "write_bytes", "write_time" + ], + "metrics_collection_interval": 10 + }, + "net": { + "measurement": [ + "bytes_sent", "bytes_recv", "drop_in", "drop_out", "err_in", "err_out", "packets_sent", "packets_recv" + ], + "resources": [ + "*" + ], + "metrics_collection_interval": 10 + }, + "netstat": { + "measurement": [ + "tcp_close", + "tcp_close_wait", + "tcp_closing", + "tcp_established", + "tcp_fin_wait1", + "tcp_fin_wait2", + "tcp_last_ack", + "tcp_listen", + "tcp_none", + "tcp_syn_sent", + "tcp_syn_recv", + "tcp_time_wait", + "udp_socket" + ], + "metrics_collection_interval": 10 + }, + "swap": { + "measurement": [ + "free", + "used", + "used_percent" + ] + }, + "processes": { + "measurement": [ + "blocked", "running", "sleeping", "stopped", "total", "dead", "idle", "paging", "total_threads", "zombies" + ], + "metrics_collection_interval": 10 + }, + "procstat": [ + { + "exe": "cloudwatch-agent", + "measurement": [ + "cpu_time_system", + "cpu_time_user", + "cpu_usage", + "memory_data", + "memory_locked", + "memory_rss", + "memory_stack", + "memory_swap", + "memory_vms" + ], + "metrics_collection_interval": 10 + } + ] + }, + "force_flush_interval": 5 + } +} diff --git a/test/metric_value_benchmark/agent_configs/cpu_config.json b/test/metric_value_benchmark/agent_configs/cpu_config.json deleted file mode 100644 index d8d40e728..000000000 --- a/test/metric_value_benchmark/agent_configs/cpu_config.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "agent": { - "metrics_collection_interval": 10, - "run_as_user": "root", - "debug": true, - "logfile": "" - }, - "metrics": { - "namespace": "MetricValueBenchmarkTest", - "append_dimensions": { - "InstanceId": "${aws:InstanceId}" - }, - "metrics_collected": { - "cpu": { - "measurement": [ - {"name": "time_active", "rename":"cpu_time_active_renamed"}, - "time_guest", "time_guest_nice", "time_idle", "time_iowait", "time_irq", - "time_nice", "time_softirq", "time_steal", "time_system", "time_user", - "usage_active", "usage_guest", "usage_guest_nice", "usage_idle", "usage_iowait", "usage_irq", - "usage_nice", "usage_softirq", "usage_steal", "usage_system", "usage_user" - ], - "metrics_collection_interval": 10 - } - }, - "force_flush_interval": 5 - } -} \ No newline at end of file diff --git a/test/metric_value_benchmark/agent_configs/disk_config.json b/test/metric_value_benchmark/agent_configs/disk_config.json deleted file mode 100644 index eded1e2e3..000000000 --- a/test/metric_value_benchmark/agent_configs/disk_config.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "agent": { - "metrics_collection_interval": 10, - "run_as_user": "root", - "debug": true, - "logfile": "" - }, - "metrics": { - "namespace": "MetricValueBenchmarkTest", - "append_dimensions": { - "InstanceId": "${aws:InstanceId}" - }, - "aggregation_dimensions": [ - [ - "InstanceId" - ] - ], - "metrics_collected": { - "disk": { - "resources": [ - "*" - ], - "measurement": [ - "free", - "inodes_free", - "inodes_total", - "inodes_used", - "total", - "used", - "used_percent" - ], - "drop_device": true - } - }, - "force_flush_interval": 5 - } -} \ No newline at end of file diff --git a/test/metric_value_benchmark/agent_configs/diskio_config.json b/test/metric_value_benchmark/agent_configs/diskio_config.json deleted file mode 100644 index cd9efd2d7..000000000 --- a/test/metric_value_benchmark/agent_configs/diskio_config.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "agent": { - "metrics_collection_interval": 10, - "run_as_user": "root", - "debug": true, - "logfile": "" - }, - "metrics": { - "namespace": "MetricValueBenchmarkTest", - "append_dimensions": { - "InstanceId": "${aws:InstanceId}" - }, - "metrics_collected": { - "diskio": { - "resources": [ - "*" - ], - "measurement": [ - "iops_in_progress", "io_time", "reads", "read_bytes", "read_time", "writes", "write_bytes", "write_time" - ], - "metrics_collection_interval": 10 - } - }, - "force_flush_interval": 5 - } -} \ No newline at end of file diff --git a/test/metric_value_benchmark/agent_configs/mem_config.json b/test/metric_value_benchmark/agent_configs/mem_config.json deleted file mode 100644 index 2cbf38d39..000000000 --- a/test/metric_value_benchmark/agent_configs/mem_config.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "agent": { - "metrics_collection_interval": 10, - "run_as_user": "root", - "debug": true, - "logfile": "" - }, - "metrics": { - "namespace": "MetricValueBenchmarkTest", - "append_dimensions": { - "InstanceId": "${aws:InstanceId}" - }, - "metrics_collected": { - "mem": { - "measurement": [ - "active", "available", "available_percent", "buffered", "cached", "free", "inactive", "shared", "total", - "used", "used_percent" - ], - "metrics_collection_interval": 10 - } - }, - "force_flush_interval": 5 - } -} \ No newline at end of file diff --git a/test/metric_value_benchmark/agent_configs/net_config.json b/test/metric_value_benchmark/agent_configs/net_config.json deleted file mode 100644 index 7dfbaa02c..000000000 --- a/test/metric_value_benchmark/agent_configs/net_config.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "agent": { - "metrics_collection_interval": 10, - "run_as_user": "root", - "debug": true, - "logfile": "" - }, - "metrics": { - "namespace": "MetricValueBenchmarkTest", - "append_dimensions": { - "InstanceId": "${aws:InstanceId}" - }, - "metrics_collected": { - "net": { - "measurement": [ - "bytes_sent", "bytes_recv", "drop_in", "drop_out", "err_in", "err_out", "packets_sent", "packets_recv" - ], - "resources": [ - "*" - ], - "metrics_collection_interval": 10 - } - }, - "force_flush_interval": 5 - } - } \ No newline at end of file diff --git a/test/metric_value_benchmark/agent_configs/netstat_config.json b/test/metric_value_benchmark/agent_configs/netstat_config.json deleted file mode 100644 index 56d304289..000000000 --- a/test/metric_value_benchmark/agent_configs/netstat_config.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "agent": { - "metrics_collection_interval": 10, - "run_as_user": "root", - "debug": true, - "logfile": "" - }, - "metrics": { - "namespace": "MetricValueBenchmarkTest", - "append_dimensions": { - "InstanceId": "${aws:InstanceId}" - }, - "metrics_collected": { - "netstat": { - "measurement": [ - "tcp_close", - "tcp_close_wait", - "tcp_closing", - "tcp_established", - "tcp_fin_wait1", - "tcp_fin_wait2", - "tcp_last_ack", - "tcp_listen", - "tcp_none", - "tcp_syn_sent", - "tcp_syn_recv", - "tcp_time_wait", - "udp_socket" - ], - "metrics_collection_interval": 10 - } - }, - "force_flush_interval": 5 - } -} \ No newline at end of file diff --git a/test/metric_value_benchmark/agent_configs/processes_config.json b/test/metric_value_benchmark/agent_configs/processes_config.json deleted file mode 100644 index 39c41724a..000000000 --- a/test/metric_value_benchmark/agent_configs/processes_config.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "agent": { - "metrics_collection_interval": 10, - "run_as_user": "root", - "debug": true, - "logfile": "" - }, - "metrics": { - "namespace": "MetricValueBenchmarkTest", - "append_dimensions": { - "InstanceId": "${aws:InstanceId}" - }, - "metrics_collected": { - "processes": { - "measurement": [ - "blocked","running","sleeping","stopped","total","dead","idle","paging","total_threads","zombies" - ], - "metrics_collection_interval": 10 - } - }, - "force_flush_interval": 5 - } - } \ No newline at end of file diff --git a/test/metric_value_benchmark/agent_configs/procstat_config.json b/test/metric_value_benchmark/agent_configs/procstat_config.json deleted file mode 100644 index 86ee996ed..000000000 --- a/test/metric_value_benchmark/agent_configs/procstat_config.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "agent": { - "metrics_collection_interval": 10, - "run_as_user": "root", - "debug": true, - "logfile": "" - }, - "metrics": { - "namespace": "MetricValueBenchmarkTest", - "append_dimensions": { - "InstanceId": "${aws:InstanceId}" - }, - "metrics_collected": { - "procstat": [ - { - "exe": "cloudwatch-agent", - "measurement": [ - "cpu_time_system", - "cpu_time_user", - "cpu_usage", - "memory_data", - "memory_locked", - "memory_rss", - "memory_stack", - "memory_swap", - "memory_vms" - ], - "metrics_collection_interval": 10 - } - ] - }, - "force_flush_interval": 5 - } -} \ No newline at end of file diff --git a/test/metric_value_benchmark/agent_configs/swap_config.json b/test/metric_value_benchmark/agent_configs/swap_config.json deleted file mode 100644 index 9ae9f1b7e..000000000 --- a/test/metric_value_benchmark/agent_configs/swap_config.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "agent": { - "metrics_collection_interval": 10, - "run_as_user": "root", - "debug": true, - "logfile": "" - }, - "metrics": { - "namespace": "MetricValueBenchmarkTest", - "append_dimensions": { - "InstanceId": "${aws:InstanceId}" - }, - "metrics_collected": { - "swap": { - "measurement": [ - "free", - "used", - "used_percent" - ] - } - }, - "force_flush_interval": 5 - } -} \ No newline at end of file diff --git a/test/metric_value_benchmark/all_infra_test.go b/test/metric_value_benchmark/all_infra_test.go new file mode 100644 index 000000000..8c129aff9 --- /dev/null +++ b/test/metric_value_benchmark/all_infra_test.go @@ -0,0 +1,76 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: MIT + +//go:build !windows + +package metric_value_benchmark + +import ( + "time" + + "github.com/aws/amazon-cloudwatch-agent-test/test/status" + "github.com/aws/amazon-cloudwatch-agent-test/test/test_runner" + "github.com/aws/amazon-cloudwatch-agent-test/util/common" +) + +type AllInfraTestRunner struct { + test_runner.BaseTestRunner +} + +var _ test_runner.ITestRunner = (*AllInfraTestRunner)(nil) + +func (r *AllInfraTestRunner) GetTestName() string { + return "AllInfra" +} + +func (r *AllInfraTestRunner) GetAgentConfigFileName() string { + return "all_infra_config.json" +} + +func (r *AllInfraTestRunner) GetAgentRunDuration() time.Duration { + return 60 * time.Second +} + +func (r *AllInfraTestRunner) GetMeasuredMetrics() []string { + runners := r.infraRunners() + var metrics []string + for _, runner := range runners { + metrics = append(metrics, runner.GetMeasuredMetrics()...) + } + return metrics +} + +func (r *AllInfraTestRunner) SetupBeforeAgentRun() error { + if getNetworkInterface() == "docker0" { + // Best-effort: restart docker to ensure docker0 interface is up. + // Ignored in environments without docker (e.g. localtest container). + _ = common.RunCommands([]string{"sudo systemctl restart docker"}) + } + return r.SetUpConfig() +} + +func (r *AllInfraTestRunner) Validate() status.TestGroupResult { + var results []status.TestResult + for _, runner := range r.infraRunners() { + group := runner.Validate() + results = append(results, group.TestResults...) + } + return status.TestGroupResult{ + Name: r.GetTestName(), + TestResults: results, + } +} + +func (r *AllInfraTestRunner) infraRunners() []test_runner.ITestRunner { + return []test_runner.ITestRunner{ + &CPUTestRunner{test_runner.BaseTestRunner{DimensionFactory: r.DimensionFactory}}, + &MemTestRunner{test_runner.BaseTestRunner{DimensionFactory: r.DimensionFactory}}, + &DiskTestRunner{test_runner.BaseTestRunner{DimensionFactory: r.DimensionFactory}}, + &DiskIOTestRunner{test_runner.BaseTestRunner{DimensionFactory: r.DimensionFactory}}, + &NetTestRunner{test_runner.BaseTestRunner{DimensionFactory: r.DimensionFactory}}, + &NetStatTestRunner{test_runner.BaseTestRunner{DimensionFactory: r.DimensionFactory}}, + &SwapTestRunner{test_runner.BaseTestRunner{DimensionFactory: r.DimensionFactory}}, + &ProcessesTestRunner{test_runner.BaseTestRunner{DimensionFactory: r.DimensionFactory}}, + &ProcStatTestRunner{test_runner.BaseTestRunner{DimensionFactory: r.DimensionFactory}}, + } +} diff --git a/test/metric_value_benchmark/diskio_test.go b/test/metric_value_benchmark/diskio_test.go index a137ed642..a129e7382 100644 --- a/test/metric_value_benchmark/diskio_test.go +++ b/test/metric_value_benchmark/diskio_test.go @@ -56,7 +56,7 @@ func (m *DiskIOTestRunner) validateDiskMetric(metricName string) status.TestResu dims, failed := m.DimensionFactory.GetDimensions([]dimension.Instruction{ { Key: "name", - Value: dimension.ExpectedDimensionValue{aws.String("nvme0n1")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("nvme0n1")}, }, { Key: "InstanceId", diff --git a/test/metric_value_benchmark/ethtool_test.go b/test/metric_value_benchmark/ethtool_test.go index 02d5b2a24..1cd6e8689 100644 --- a/test/metric_value_benchmark/ethtool_test.go +++ b/test/metric_value_benchmark/ethtool_test.go @@ -75,11 +75,11 @@ func (m *EthtoolTestRunner) validateEthtoolMetric(metricName string) status.Test }, { Key: "driver", - Value: dimension.ExpectedDimensionValue{aws.String("ena")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("ena")}, }, { Key: "interface", - Value: dimension.ExpectedDimensionValue{aws.String(iface.Name)}, + Value: dimension.ExpectedDimensionValue{Value: aws.String(iface.Name)}, }, }) diff --git a/test/metric_value_benchmark/metrics_value_benchmark_test.go b/test/metric_value_benchmark/metrics_value_benchmark_test.go index 06dc90709..e167fd102 100644 --- a/test/metric_value_benchmark/metrics_value_benchmark_test.go +++ b/test/metric_value_benchmark/metrics_value_benchmark_test.go @@ -109,19 +109,11 @@ func getEc2TestRunners(env *environment.MetaData) []*test_runner.TestRunner { if ec2TestRunners == nil { factory := dimension.GetDimensionFactory(*env) ec2TestRunners = []*test_runner.TestRunner{ + {TestRunner: &AllInfraTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, {TestRunner: &StatsdTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}, make(chan bool)}}, - {TestRunner: &DiskTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, - {TestRunner: &NetStatTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, {TestRunner: &PrometheusTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, - {TestRunner: &CPUTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, - {TestRunner: &MemTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, - {TestRunner: &ProcStatTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, - {TestRunner: &DiskIOTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, - {TestRunner: &NetTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, {TestRunner: &EthtoolTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, {TestRunner: &EMFTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, - {TestRunner: &SwapTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, - {TestRunner: &ProcessesTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, {TestRunner: &CollectDTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, {TestRunner: &RenameSSMTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, {TestRunner: &JMXTomcatJVMTestRunner{test_runner.BaseTestRunner{DimensionFactory: factory}}}, diff --git a/test/metric_value_benchmark/net_test.go b/test/metric_value_benchmark/net_test.go index 24040ef27..1a9931691 100644 --- a/test/metric_value_benchmark/net_test.go +++ b/test/metric_value_benchmark/net_test.go @@ -75,7 +75,10 @@ func getNetworkInterface() string { } } } - return "docker0" + if _, err := os.Stat("/sys/class/net/docker0"); err == nil { + return "docker0" + } + return "eth0" } func (m *NetTestRunner) validateNetMetric(metricName string) status.TestResult { testResult := status.TestResult{ @@ -86,7 +89,7 @@ func (m *NetTestRunner) validateNetMetric(metricName string) status.TestResult { dims, failed := m.DimensionFactory.GetDimensions([]dimension.Instruction{ { Key: "interface", - Value: dimension.ExpectedDimensionValue{aws.String(getNetworkInterface())}, + Value: dimension.ExpectedDimensionValue{Value: aws.String(getNetworkInterface())}, }, { Key: "InstanceId", diff --git a/test/metric_value_benchmark/procstat_test.go b/test/metric_value_benchmark/procstat_test.go index c7ab52de4..2721243a8 100644 --- a/test/metric_value_benchmark/procstat_test.go +++ b/test/metric_value_benchmark/procstat_test.go @@ -60,11 +60,11 @@ func (m *ProcStatTestRunner) validateProcStatMetric(metricName string) status.Te dims, failed := m.DimensionFactory.GetDimensions([]dimension.Instruction{ { Key: "exe", - Value: dimension.ExpectedDimensionValue{aws.String("cloudwatch-agent")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("cloudwatch-agent")}, }, { Key: "process_name", - Value: dimension.ExpectedDimensionValue{aws.String("amazon-cloudwatch-agent")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("amazon-cloudwatch-agent")}, }, { Key: "InstanceId", diff --git a/test/metric_value_benchmark/prometheus_test.go b/test/metric_value_benchmark/prometheus_test.go index 014313f05..3cc7ed778 100644 --- a/test/metric_value_benchmark/prometheus_test.go +++ b/test/metric_value_benchmark/prometheus_test.go @@ -114,39 +114,39 @@ func (t *PrometheusTestRunner) validatePrometheusMetric(metricName string) statu dims, failed = t.DimensionFactory.GetDimensions([]dimension.Instruction{ { Key: "prom_type", - Value: dimension.ExpectedDimensionValue{aws.String("counter")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("counter")}, }, }) case "prometheus_test_gauge": dims, failed = t.DimensionFactory.GetDimensions([]dimension.Instruction{ { Key: "prom_type", - Value: dimension.ExpectedDimensionValue{aws.String("gauge")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("gauge")}, }, }) case "prometheus_test_summary_count": dims, failed = t.DimensionFactory.GetDimensions([]dimension.Instruction{ { Key: "prom_type", - Value: dimension.ExpectedDimensionValue{aws.String("summary")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("summary")}, }, }) case "prometheus_test_summary_sum": dims, failed = t.DimensionFactory.GetDimensions([]dimension.Instruction{ { Key: "prom_type", - Value: dimension.ExpectedDimensionValue{aws.String("summary")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("summary")}, }, }) case "prometheus_test_summary": dims, failed = t.DimensionFactory.GetDimensions([]dimension.Instruction{ { Key: "prom_type", - Value: dimension.ExpectedDimensionValue{aws.String("summary")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("summary")}, }, { Key: "quantile", - Value: dimension.ExpectedDimensionValue{aws.String("0.5")}, + Value: dimension.ExpectedDimensionValue{Value: aws.String("0.5")}, }, }) default: