diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 79cb7b3316b..19da6459946 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -142,6 +142,95 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d *Metricbeat* +- Add AWS SQS metricset. {pull}10684[10684] {issue}10053[10053] +- Add AWS s3_request metricset. {pull}10949[10949] {issue}10055[10055] +- Add s3_daily_storage metricset. {pull}10940[10940] {issue}10055[10055] +- Add `coredns` metricbeat module. {pull}10585[10585] +- Add SSL support for Metricbeat HTTP server. {pull}11482[11482] {issue}11457[11457] +- The `elasticsearch.index` metricset (with `xpack.enabled: true`) now collects `refresh.external_total_time_in_millis` fields from Elasticsearch. {pull}11616[11616] +- Allow module configurations to have variants {pull}9118[9118] +- Add `timeseries.instance` field calculation. {pull}10293[10293] +- Added new disk states and raid level to the system/raid metricset. {pull}11613[11613] +- Added `path_name` and `start_name` to service metricset on windows module {issue}8364[8364] {pull}11877[11877] +- Add check on object name in the counter path if the instance name is missing {issue}6528[6528] {pull}11878[11878] +- Add AWS cloudwatch metricset. {pull}11798[11798] {issue}11734[11734] +- Add `regions` in aws module config to specify target regions for querying cloudwatch metrics. {issue}11932[11932] {pull}11956[11956] +- Keep `etcd` followers members from reporting `leader` metricset events {pull}12004[12004] +- Add overview dashboard to Consul module {pull}10665[10665] +- New fields were added in the mysql/status metricset. {pull}12227[12227] +- Add Kubernetes metricset `proxy`. {pull}12312[12312] +- Add Kubernetes proxy dashboard to Kubernetes module {pull}12734[12734] +- Always report Pod UID in the `pod` metricset. {pull}12345[12345] +- Add Vsphere Virtual Machine operating system to `os` field in Vsphere virtualmachine module. {pull}12391[12391] +- Add validation for elasticsearch and kibana modules' metricsets when xpack.enabled is set to true. {pull}12386[12386] +- Add CockroachDB module. {pull}12467[12467] +- Add support for metricbeat modules based on existing modules (a.k.a. light modules) {issue}12270[12270] {pull}12465[12465] +- Add a system/entropy metricset {pull}12450[12450] +- Add kubernetes metricset `controllermanager` {pull}12409[12409] +- Add Kubernetes controller manager dashboard to Kubernetes module {pull}12744[12744] +- Allow redis URL format in redis hosts config. {pull}12408[12408] +- Add tags into ec2 metricset. {issue}[12263]12263 {pull}12372[12372] +- Add metrics to kubernetes apiserver metricset. {pull}12922[12922] +- Add kubernetes metricset `scheduler` {pull}12521[12521] +- Add Kubernetes scheduler dashboard to Kubernetes module {pull}12749[12749] +- Add `beat` module. {pull}12181[12181] {pull}12615[12615] +- Collect tags for cloudwatch metricset in aws module. {issue}[12263]12263 {pull}12480[12480] +- Add AWS RDS metricset. {pull}11620[11620] {issue}10054[10054] +- Add Oracle Module {pull}11890[11890] +- Add Oracle Tablespaces Dashboard {pull}12736[12736] +- Collect client provided name for rabbitmq connection. {issue}12851[12851] {pull}12852[12852] +- Add support to load default aws config file to get credentials. {pull}12727[12727] {issue}12708[12708] +- Add statistic option into cloudwatch metricset. {issue}12370[12370] {pull}12840[12840] +- Add support for kubernetes cronjobs {pull}13001[13001] +- Add cgroup memory stats to docker/memory metricset {pull}12916[12916] +- Add AWS elb metricset. {pull}12952[12952] {issue}11701[11701] +- Add AWS ebs metricset. {pull}13167[13167] {issue}11699[11699] +- Add `metricset.period` field with the configured fetching period. {pull}13242[13242] {issue}12616[12616] +- Add rate metrics for ec2 metricset. {pull}13203[13203] +- Add refresh list of perf counters at every fetch {issue}13091[13091] +- Add Performance metricset to Oracle module {pull}12547[12547] +- Add proc/vmstat data to the system/memory metricset on linux {pull}13322[13322] +- Use DefaultMetaGeneratorConfig in MetadataEnrichers to initialize configurations {pull}13414[13414] +- Add module for statsd. {pull}13109[13109] +- Add support for NATS version 2. {pull}13601[13601] +- Add `docker.cpu.*.norm.pct` metrics for `cpu` metricset of Docker Metricbeat module. {pull}13695[13695] +- Add `instance` label by default when using Prometheus collector. {pull}13737[13737] +- Add azure module. {pull}13196[13196] {pull}13859[13859] {pull}13988[13988] +- Add Apache Tomcat module {pull}13491[13491] +- Add ECS `container.id` and `container.runtime` to kubernetes `state_container` metricset. {pull}13884[13884] +- Add `job` label by default when using Prometheus collector. {pull}13878[13878] +- Add `state_resourcequota` metricset for Kubernetes module. {pull}13693[13693] +- Add tags filter in ec2 metricset. {pull}13872[13872] {issue}13145[13145] +- Add cloud.account.id and cloud.account.name into events from aws module. {issue}13551[13551] {pull}13558[13558] +- Add `metrics_path` as known hint for autodiscovery {pull}13996[13996] +- Leverage KUBECONFIG when creating k8s client. {pull}13916[13916] +- Add ability to filter by tags for cloudwatch metricset. {pull}13758[13758] {issue}13145[13145] +- Release cloudwatch, s3_daily_storage, s3_request, sqs and rds metricset as GA. {pull}14114[14114] {issue}14059[14059] +- Add Oracle overview dashboard {pull}14021[14021] +- Release CoreDNS module as GA. {pull}14308[14308] +- Release CouchDB module as GA. {pull}14300[14300] +- Add `elasticsearch/enrich` metricset. {pull}14243[14243] {issue}14221[14221] +- Add support for Application ELB and Network ELB. {pull}14123[14123] {issue}13538[13538] {issue}13539[13539] +- Release aws ebs metricset as GA. {pull}14312[14312] {issue}14060[14060] +- Add `connection.state` field for RabbitMQ module. {pull}13981[13981] +- Add more TCP states to Metricbeat system socket_summary. {pull}14347[14347] +- Add Kafka JMX metricsets. {pull}14330[14330] +- Add metrics to envoyproxy server metricset and support for envoy proxy 1.12. {pull}14416[14416] {issue}13642[13642] +- Release kubernetes modules `controllermanager`, `scheduler`, `proxy`, `state_cronjob` and `state_resourcequota` as GA. {pull}14584[14584] +- Add module for ActiveMQ. {pull}14580[14580] +- Enable script processor. {pull}14711[14711] +- Enable wildcard for cloudwatch metricset namespace. {pull}14971[14971] {issue}14965[14965] +- Add `kube-state-metrics` `state_service` metrics for kubernetes module. {pull}14794[14794] +- Add `kube-state-metrics` `state_persistentvolume` metrics for kubernetes module. {pull}14859[14859] +- Add `kube-state-metrics` `state_persistentvolumeclaim` metrics for kubernetes module. {pull}15066[15066] +- Add usage metricset in aws modules. {pull}14925[14925] {issue}14935[14935] +- Add billing metricset in aws modules. {pull}14801[14801] {issue}14934[14934] +- Add AWS SNS metricset. {pull}14946[14946] +- Add overview dashboard for AWS SNS module {pull}14977[14977] +- Add `index` option to all modules to specify a module-specific output index. {pull}15100[15100] +- Add a `system/service` metricset for systemd data. {pull}14206[14206] +- Expand data for the `system/memory` metricset {pull}15492[15492] +- Add azure `storage` metricset in order to retrieve metric values for storage accounts. {issue}14548[14548] {pull}15342[15342] - Add cost warnings for the azure module. {pull}15356[15356] - Release elb module as GA. {pull}15485[15485] - Add a `system/network_summary` metricset {pull}15196[15196] diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index a86d842987d..a1f1a975aa2 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -30398,6 +30398,89 @@ type: long The percentage of used swap memory. +type: scaled_float + +format: percent + +-- + +[float] +=== page_stats + +memory page statistics + + +*`system.memory.page_stats.pgscan_kswapd.pages`*:: ++ +-- +pages scanned by kswapd + +type: long + +format: number + +-- + +*`system.memory.page_stats.pgscan_direct.pages`*:: ++ +-- +pages scanned directly + +type: long + +format: number + +-- + +*`system.memory.page_stats.pgfree.pages`*:: ++ +-- +pages freed by the system + +type: long + +format: number + +-- + +*`system.memory.page_stats.pgsteal_kswapd.pages`*:: ++ +-- +number of pages reclaimed by kswapd + +type: long + +format: number + +-- + +*`system.memory.page_stats.pgsteal_direct.pages`*:: ++ +-- +number of pages reclaimed directly + +type: long + +format: number + +-- + +*`system.memory.page_stats.direct_efficiency.pct`*:: ++ +-- +direct reclaim efficiency percentage. A lower percentage indicates the system is struggling to reclaim memory. + +type: scaled_float + +format: percent + +-- + +*`system.memory.page_stats.kswapd_efficiency.pct`*:: ++ +-- +kswapd reclaim efficiency percentage. A lower percentage indicates the system is struggling to reclaim memory. + type: scaled_float format: percent diff --git a/metricbeat/module/system/fields.go b/metricbeat/module/system/fields.go index 70a36c3fe52..aced479b857 100644 --- a/metricbeat/module/system/fields.go +++ b/metricbeat/module/system/fields.go @@ -32,5 +32,9 @@ func init() { // AssetSystem returns asset data. // This is the base64 encoded gzipped contents of ../metricbeat/module/system. func AssetSystem() string { +<<<<<<< HEAD return "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" +======= + return "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" +>>>>>>> 0fd2250f0... [Metricbeat] Add new page statistics to system/memory metricset (#15492) } diff --git a/metricbeat/module/system/memory/_meta/data.json b/metricbeat/module/system/memory/_meta/data.json index b38aaa7991f..01231bede4c 100644 --- a/metricbeat/module/system/memory/_meta/data.json +++ b/metricbeat/module/system/memory/_meta/data.json @@ -6,7 +6,8 @@ "module": "system" }, "metricset": { - "name": "memory" + "name": "memory", + "period": 10000 }, "service": { "type": "system" @@ -14,13 +15,13 @@ "system": { "memory": { "actual": { - "free": 671084544, + "free": 14247317504, "used": { - "bytes": 362037248, - "pct": 0.3504 + "bytes": 1407057920, + "pct": 0.0899 } }, - "free": 340848640, + "free": 4859097088, "hugepages": { "default_size": 2097152, "free": 0, @@ -38,28 +39,51 @@ "pct": 0 } }, + "page_stats": { + "direct_efficiency": { + "pct": 0.9976 + }, + "kswapd_efficiency": { + "pct": 0.6213 + }, + "pgfree": { + "pages": 4382105954 + }, + "pgscan_direct": { + "pages": 485820 + }, + "pgscan_kswapd": { + "pages": 77390925 + }, + "pgsteal_direct": { + "pages": 484631 + }, + "pgsteal_kswapd": { + "pages": 48081976 + } + }, "swap": { - "free": 0, + "free": 7846490112, "in": { - "pages": 0 + "pages": 1111 }, "out": { - "pages": 0 + "pages": 20255 }, "readahead": { - "cached": 0, - "pages": 0 + "cached": 28, + "pages": 65 }, - "total": 0, + "total": 7897870336, "used": { - "bytes": 0, - "pct": 0 + "bytes": 51380224, + "pct": 0.0065 } }, - "total": 1033121792, + "total": 15654375424, "used": { - "bytes": 692273152, - "pct": 0.6701 + "bytes": 10795278336, + "pct": 0.6896 } } } diff --git a/metricbeat/module/system/memory/_meta/fields.yml b/metricbeat/module/system/memory/_meta/fields.yml index 26b3f78097d..ab80bf3ba28 100644 --- a/metricbeat/module/system/memory/_meta/fields.yml +++ b/metricbeat/module/system/memory/_meta/fields.yml @@ -102,6 +102,39 @@ description: > The percentage of used swap memory. + - name: page_stats + type: group + description: memory page statistics + fields: + - name: pgscan_kswapd.pages + type: long + format: number + description: pages scanned by kswapd + - name: pgscan_direct.pages + type: long + format: number + description: pages scanned directly + - name: pgfree.pages + type: long + format: number + description: pages freed by the system + - name: pgsteal_kswapd.pages + type: long + format: number + description: number of pages reclaimed by kswapd + - name: pgsteal_direct.pages + type: long + format: number + description: number of pages reclaimed directly + - name: direct_efficiency.pct + type: scaled_float + format: percent + description: direct reclaim efficiency percentage. A lower percentage indicates the system is struggling to reclaim memory. + - name: kswapd_efficiency.pct + type: scaled_float + format: percent + description: kswapd reclaim efficiency percentage. A lower percentage indicates the system is struggling to reclaim memory. + - name: hugepages type: group prefix: "[float]" diff --git a/metricbeat/module/system/memory/memory.go b/metricbeat/module/system/memory/memory.go index 57c6d588892..76b3e6c0541 100644 --- a/metricbeat/module/system/memory/memory.go +++ b/metricbeat/module/system/memory/memory.go @@ -103,7 +103,38 @@ func (m *MetricSet) Fetch(r mb.ReporterV2) error { "pages": vmstat.SwapRa, "cached": vmstat.SwapRaHit, } + pageStats := common.MapStr{ + "pgscan_kswapd": common.MapStr{ + "pages": vmstat.PgscanKswapd, + }, + "pgscan_direct": common.MapStr{ + "pages": vmstat.PgscanDirect, + }, + "pgfree": common.MapStr{ + "pages": vmstat.Pgfree, + }, + "pgsteal_kswapd": common.MapStr{ + "pages": vmstat.PgstealKswapd, + }, + "pgsteal_direct": common.MapStr{ + "pages": vmstat.PgstealDirect, + }, + } + // This is similar to the vmeff stat gathered by sar + // these ratios calculate thhe efficiency of page reclaim + if vmstat.PgscanDirect != 0 { + pageStats["direct_efficiency"] = common.MapStr{ + "pct": common.Round(float64(vmstat.PgstealDirect)/float64(vmstat.PgscanDirect), common.DefaultDecimalPlacesCount), + } + } + + if vmstat.PgscanKswapd != 0 { + pageStats["kswapd_efficiency"] = common.MapStr{ + "pct": common.Round(float64(vmstat.PgstealKswapd)/float64(vmstat.PgscanKswapd), common.DefaultDecimalPlacesCount), + } + } + memory["page_stats"] = pageStats } memory["swap"] = swap diff --git a/metricbeat/module/system/test_system.py b/metricbeat/module/system/test_system.py index e81a67ee8f1..bef0e8bedea 100644 --- a/metricbeat/module/system/test_system.py +++ b/metricbeat/module/system/test_system.py @@ -42,7 +42,7 @@ SYSTEM_FSSTAT_FIELDS = ["count", "total_files", "total_size"] SYSTEM_MEMORY_FIELDS = ["swap", "actual.free", "free", "total", "used.bytes", "used.pct", "actual.used.bytes", - "actual.used.pct", "hugepages"] + "actual.used.pct", "hugepages", "page_stats"] SYSTEM_NETWORK_FIELDS = ["name", "out.bytes", "in.bytes", "out.packets", "in.packets", "in.error", "out.error", "in.dropped", "out.dropped"] @@ -294,6 +294,9 @@ def test_memory(self): if not re.match("(?i)linux", sys.platform) and not "hugepages" in memory: # Ensure presence of hugepages only in Linux memory["hugepages"] = None + if not re.match("(?i)linux", sys.platform) and not "page_stats" in memory: + # Ensure presence of page_stats only in Linux + memory["page_stats"] = None self.assertItemsEqual(self.de_dot(SYSTEM_MEMORY_FIELDS), memory.keys()) # Check that percentages are calculated.