From fd8c639e111a52b6b1dd1ae7fa6ffdfd59638745 Mon Sep 17 00:00:00 2001 From: Andrew Kroh Date: Tue, 30 Jan 2018 15:54:36 -0500 Subject: [PATCH] Fix system process metricset for kernel processes On Linux, kernel processes don't have an exe on disk so the `/proc/[PID]/exe` symlink is broken. When Metricbeat tries to read the symlink it gets an error and it skips the whole process. This adds a check for ENOENT and ignores the error which allows kernel processes to be reported by Metricbeat. This is the error that it fixes. 2018-01-30T20:31:02.512Z DEBUG [processes] process/process.go:443 Skip process pid=12113: error getting process exe for pid=12113: readlink /proc/12113/exe: no such file or directory Fixes #5700 --- CHANGELOG.asciidoc | 1 + libbeat/metric/system/process/process.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index cebe57df24f..8b569ec1ed3 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -111,6 +111,7 @@ https://github.com/elastic/beats/compare/v6.0.0-beta2...master[Check the HEAD di - Fix process cgroup memory metrics for memsw, kmem, and kmem_tcp. {issue}6033[6033] - Fix kafka OffsetFetch request missing topic and partition parameters. {pull}5880[5880] - Change kubernetes.node.cpu.allocatable.cores to float. {pull}6130[6130] +- Fix system process metricset for kernel processes. {issue}5700[5700] *Packetbeat* diff --git a/libbeat/metric/system/process/process.go b/libbeat/metric/system/process/process.go index b5e87d4770b..7d89125b942 100644 --- a/libbeat/metric/system/process/process.go +++ b/libbeat/metric/system/process/process.go @@ -76,7 +76,7 @@ func newProcess(pid int, cmdline string, env common.MapStr) (*Process, error) { } exe := sigar.ProcExe{} - if err := exe.Get(pid); err != nil && !sigar.IsNotImplemented(err) && !os.IsPermission(err) { + if err := exe.Get(pid); err != nil && !sigar.IsNotImplemented(err) && !os.IsPermission(err) && !os.IsNotExist(err) { return nil, fmt.Errorf("error getting process exe for pid=%d: %v", pid, err) }