diff --git a/NOTICE.txt b/NOTICE.txt index 111bc8cfa9e8..003a42b153a8 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -11175,11 +11175,11 @@ Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-l -------------------------------------------------------------------------------- Dependency : github.com/elastic/elastic-agent-system-metrics -Version: v0.14.1 +Version: v0.14.3 Licence type (autodetected): Apache-2.0 -------------------------------------------------------------------------------- -Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-system-metrics@v0.14.1/LICENSE.txt: +Contents of probable licence file $GOMODCACHE/github.com/elastic/elastic-agent-system-metrics@v0.14.3/LICENSE.txt: Apache License Version 2.0, January 2004 diff --git a/changelog/fragments/1772011445-zswap-metrics.yaml b/changelog/fragments/1772011445-zswap-metrics.yaml new file mode 100644 index 000000000000..e3bd5410f324 --- /dev/null +++ b/changelog/fragments/1772011445-zswap-metrics.yaml @@ -0,0 +1,45 @@ +# REQUIRED +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# REQUIRED for all kinds +# Change summary; a 80ish characters long description of the change. +summary: Add zswap compressed swap cache metrics to system memory metricset + +# REQUIRED for breaking-change, deprecation, known-issue +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# description: + +# REQUIRED for breaking-change, deprecation, known-issue +# impact: + +# REQUIRED for breaking-change, deprecation, known-issue +# action: + +# REQUIRED for all kinds +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: metricbeat + +# AUTOMATED +# OPTIONAL to manually add other PR URLs +# PR URL: A link the PR that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +# pr: https://github.com/owner/repo/1234 + +# AUTOMATED +# OPTIONAL to manually add other issue URLs +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +# issue: https://github.com/owner/repo/1234 diff --git a/changelog/fragments/1772636540-zswap-metrics.yaml b/changelog/fragments/1772636540-zswap-metrics.yaml new file mode 100644 index 000000000000..c3cd2e36176a --- /dev/null +++ b/changelog/fragments/1772636540-zswap-metrics.yaml @@ -0,0 +1,45 @@ +# REQUIRED +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: feature + +# REQUIRED for all kinds +# Change summary; a 80ish characters long description of the change. +summary: Add cgroupv2 CPU metrics to system.process dataset + +# REQUIRED for breaking-change, deprecation, known-issue +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# description: + +# REQUIRED for breaking-change, deprecation, known-issue +# impact: + +# REQUIRED for breaking-change, deprecation, known-issue +# action: + +# REQUIRED for all kinds +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: metricbeat + +# AUTOMATED +# OPTIONAL to manually add other PR URLs +# PR URL: A link the PR that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +# pr: https://github.com/owner/repo/1234 + +# AUTOMATED +# OPTIONAL to manually add other issue URLs +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +# issue: https://github.com/owner/repo/1234 diff --git a/docs/reference/metricbeat/exported-fields-system.md b/docs/reference/metricbeat/exported-fields-system.md index d6bee9f47752..a1952d7c255d 100644 --- a/docs/reference/metricbeat/exported-fields-system.md +++ b/docs/reference/metricbeat/exported-fields-system.md @@ -776,6 +776,98 @@ This group contains statistics related to the swap memory usage on the system. format: percent +## zswap [_zswap] + +zswap compressed swap cache metrics. Available on Linux when zswap is enabled. + +**`system.memory.zswap.compressed`** +: Current compressed size of data stored in zswap. + + type: long + + format: bytes + + +**`system.memory.zswap.uncompressed`** +: Original uncompressed size of data stored in zswap. + + type: long + + format: bytes + + +## debug [_debug] + +Detailed zswap statistics from /sys/kernel/debug/zswap. Requires debugfs to be mounted and accessible. + +**`system.memory.zswap.debug.decompress_fail`** +: Number of load or writeback attempts that failed due to decompression failure. + + type: long + + +**`system.memory.zswap.debug.pool_limit_hit`** +: Number of times the zswap pool limit was hit, as configured by the zswap.max_pool_percent kernel parameter. + + type: long + + +**`system.memory.zswap.debug.pool_total_size`** +: Total size of the zswap pool in bytes. + + type: long + + format: bytes + + +**`system.memory.zswap.debug.reject_alloc_fail`** +: Number of store attempts that failed because the underlying allocator could not get memory. + + type: long + + +**`system.memory.zswap.debug.reject_compress_fail`** +: Number of store attempts that failed due to compression algorithm failure. + + type: long + + +**`system.memory.zswap.debug.reject_compress_poor`** +: Number of store attempts rejected because the compressed page was too big for the allocator to optimally store. + + type: long + + +**`system.memory.zswap.debug.reject_kmemcache_fail`** +: Number of store attempts that failed because the entry metadata could not be allocated (rare). + + type: long + + +**`system.memory.zswap.debug.reject_reclaim_fail`** +: Number of store attempts that failed due to a reclaim failure after pool limit was reached. + + type: long + + +**`system.memory.zswap.debug.stored_incompressible_pages`** +: Number of incompressible pages currently stored in zswap. + + type: long + + +**`system.memory.zswap.debug.stored_pages`** +: Number of pages currently stored in zswap. + + type: long + + +**`system.memory.zswap.debug.written_back_pages`** +: Number of pages written back from zswap to swap when pool limit was reached. + + type: long + + ## network [_network] `network` contains network IO metrics for a single network interface. @@ -1238,6 +1330,12 @@ cgroupv2 stats type: long +**`system.process.cgroup.cpu.cfs.weight`** +: CPU weight for the cgroup (cgroupv2). Used by the CFS scheduler to determine the share of CPU time available to the cgroup. Range is 1 to 10000, default 100. + + type: long + + **`system.process.cgroup.cpu.rt.period.us`** : Period of time in microseconds for how regularly a cgroup's access to CPU resources is reallocated. diff --git a/go.mod b/go.mod index 6cfaf4d41c01..0e60fe79ca36 100644 --- a/go.mod +++ b/go.mod @@ -173,7 +173,7 @@ require ( github.com/elastic/ebpfevents v0.8.0 github.com/elastic/elastic-agent-autodiscover v0.10.2 github.com/elastic/elastic-agent-libs v0.33.3 - github.com/elastic/elastic-agent-system-metrics v0.14.1 + github.com/elastic/elastic-agent-system-metrics v0.14.3 github.com/elastic/go-elasticsearch/v8 v8.19.0 github.com/elastic/go-freelru v0.16.0 github.com/elastic/go-quark v0.3.0 diff --git a/go.sum b/go.sum index 8ef6f6878a57..5b2aa8afeced 100644 --- a/go.sum +++ b/go.sum @@ -379,8 +379,8 @@ github.com/elastic/elastic-agent-client/v7 v7.18.0 h1:zXdoErqECfvRjj1c+1Ko4VGuUn github.com/elastic/elastic-agent-client/v7 v7.18.0/go.mod h1:ChFjpIfSsQOnhWT3se5Euw/o8P4Vf77FxeObE/vUfSc= github.com/elastic/elastic-agent-libs v0.33.3 h1:Gsq5FA29sUbbZVJbeLCKPyRkAxCrOhv3VtXvuG9Uu6k= github.com/elastic/elastic-agent-libs v0.33.3/go.mod h1:0xUg7alsNE/WhY9DZRIdTYW75nqSHC1octIAg//j/PQ= -github.com/elastic/elastic-agent-system-metrics v0.14.1 h1:XdV3KWbug/M1dkn8h9Yth9pfdyeFR2Z1iqaypX+ohBg= -github.com/elastic/elastic-agent-system-metrics v0.14.1/go.mod h1:JNfnZrC0viAjlJRUzQKKuMpDlXgjXBn4WdWEXQF7jcA= +github.com/elastic/elastic-agent-system-metrics v0.14.3 h1:v867kcgCVguOX3AYIHEVn2RNracdH40FqqXiZq71pDU= +github.com/elastic/elastic-agent-system-metrics v0.14.3/go.mod h1:JNfnZrC0viAjlJRUzQKKuMpDlXgjXBn4WdWEXQF7jcA= github.com/elastic/elastic-transport-go/v8 v8.8.0 h1:7k1Ua+qluFr6p1jfJjGDl97ssJS/P7cHNInzfxgBQAo= github.com/elastic/elastic-transport-go/v8 v8.8.0/go.mod h1:YLHer5cj0csTzNFXoNQ8qhtGY1GTvSqPnKWKaqQE3Hk= github.com/elastic/fsevents v0.0.0-20181029231046-e1d381a4d270 h1:cWPqxlPtir4RoQVCpGSRXmLqjEHpJKbR60rxh1nQZY4= diff --git a/metricbeat/module/system/fields.go b/metricbeat/module/system/fields.go index 33b8724eaa4f..e77f310ef1d2 100644 --- a/metricbeat/module/system/fields.go +++ b/metricbeat/module/system/fields.go @@ -32,5 +32,5 @@ func init() { // AssetSystem returns asset data. // This is the base64 encoded zlib format compressed contents of module/system. func AssetSystem() string { - return "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" + return "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" } diff --git a/metricbeat/module/system/memory/_meta/fields.yml b/metricbeat/module/system/memory/_meta/fields.yml index 95314a78b660..1e9baff027aa 100644 --- a/metricbeat/module/system/memory/_meta/fields.yml +++ b/metricbeat/module/system/memory/_meta/fields.yml @@ -91,3 +91,82 @@ format: percent description: > The percentage of used swap memory. + + - name: zswap + type: group + description: > + zswap compressed swap cache metrics. Available on Linux when zswap is enabled. + fields: + - name: compressed + type: long + format: bytes + description: > + Current compressed size of data stored in zswap. + + - name: uncompressed + type: long + format: bytes + description: > + Original uncompressed size of data stored in zswap. + + - name: debug + type: group + description: > + Detailed zswap statistics from /sys/kernel/debug/zswap. + Requires debugfs to be mounted and accessible. + fields: + - name: decompress_fail + type: long + description: > + Number of load or writeback attempts that failed due to decompression failure. + + - name: pool_limit_hit + type: long + description: > + Number of times the zswap pool limit was hit, as configured by the zswap.max_pool_percent kernel parameter. + + - name: pool_total_size + type: long + format: bytes + description: > + Total size of the zswap pool in bytes. + + - name: reject_alloc_fail + type: long + description: > + Number of store attempts that failed because the underlying allocator could not get memory. + + - name: reject_compress_fail + type: long + description: > + Number of store attempts that failed due to compression algorithm failure. + + - name: reject_compress_poor + type: long + description: > + Number of store attempts rejected because the compressed page was too big for the allocator to optimally store. + + - name: reject_kmemcache_fail + type: long + description: > + Number of store attempts that failed because the entry metadata could not be allocated (rare). + + - name: reject_reclaim_fail + type: long + description: > + Number of store attempts that failed due to a reclaim failure after pool limit was reached. + + - name: stored_incompressible_pages + type: long + description: > + Number of incompressible pages currently stored in zswap. + + - name: stored_pages + type: long + description: > + Number of pages currently stored in zswap. + + - name: written_back_pages + type: long + description: > + Number of pages written back from zswap to swap when pool limit was reached. diff --git a/metricbeat/module/system/process/_meta/fields.yml b/metricbeat/module/system/process/_meta/fields.yml index 595adeb811b9..e88de1dde2f3 100644 --- a/metricbeat/module/system/process/_meta/fields.yml +++ b/metricbeat/module/system/process/_meta/fields.yml @@ -265,6 +265,13 @@ available to the tasks in a cgroup. The value specified in the cpu.shares file must be 2 or higher. + - name: cfs.weight + type: long + description: > + CPU weight for the cgroup (cgroupv2). Used by the CFS + scheduler to determine the share of CPU time available + to the cgroup. Range is 1 to 10000, default 100. + - name: rt.period.us type: long description: > diff --git a/metricbeat/module/system/test_system.py b/metricbeat/module/system/test_system.py index 8509a0cae244..6bc157f384d4 100644 --- a/metricbeat/module/system/test_system.py +++ b/metricbeat/module/system/test_system.py @@ -102,7 +102,7 @@ def is_cpuinfo_supported(): "actual.used.pct"] } SYSTEM_MEMORY[metricbeat.P_LINUX] = SYSTEM_MEMORY[metricbeat.P_DEF] + \ - ["cached", "hugepages", "page_stats"] + ["cached", "hugepages", "page_stats", "zswap"] SYSTEM_MEMORY_FIELDS_LINUX = ["swap", "actual.free", "free", "total", "cached", "used.bytes", "used.pct", "actual.used.bytes", "actual.used.pct"] @@ -351,6 +351,8 @@ def test_memory(self): if re.match("(?i)linux", sys.platform) and not "page_stats" in memory: # Ensure presence of page_stats only in Linux memory["page_stats"] = None + if re.match("(?i)linux", sys.platform) and not "zswap" in memory: + memory["zswap"] = None self.assert_fields_for_platform(SYSTEM_MEMORY, memory)