From d2abd027c9357deca1d1aca053760554b4e5f499 Mon Sep 17 00:00:00 2001 From: mayankpande88 Date: Thu, 16 Apr 2026 21:26:12 +0530 Subject: [PATCH 1/2] fix: suppress noisy uprobe "symbol not found" errors for non-matching binaries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Binaries like calico-node match the nodejs detection regex but lack uv__io_poll. Similarly, some libpthread.so builds lack pthread_cond_timedwait. These are expected failures, not actionable errors — suppress them like other benign attachment failures. --- ebpftracer/nodejs.go | 2 +- ebpftracer/python.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ebpftracer/nodejs.go b/ebpftracer/nodejs.go index 78cef98a..01e383c9 100644 --- a/ebpftracer/nodejs.go +++ b/ebpftracer/nodejs.go @@ -14,7 +14,7 @@ import ( func (t *Tracer) AttachNodejsProbes(pid uint32, exe string) []link.Link { log := func(libPath, msg string, err error) { if err != nil { - for _, s := range []string{"no such file or directory", "no such process", "permission denied"} { + for _, s := range []string{"no such file or directory", "no such process", "permission denied", "not found"} { if strings.HasSuffix(err.Error(), s) { return } diff --git a/ebpftracer/python.go b/ebpftracer/python.go index f6565fef..6060618f 100644 --- a/ebpftracer/python.go +++ b/ebpftracer/python.go @@ -20,7 +20,7 @@ var ( func (t *Tracer) AttachPythonThreadLockProbes(pid uint32) []link.Link { log := func(libPath, msg string, err error) { if err != nil { - for _, s := range []string{"no such file or directory", "no such process", "permission denied"} { + for _, s := range []string{"no such file or directory", "no such process", "permission denied", "not found"} { if strings.HasSuffix(err.Error(), s) { return } From 38ee5ae9a343ad8d508c6d00597cce3c28d9fc3e Mon Sep 17 00:00:00 2001 From: mayankpande88 Date: Thu, 16 Apr 2026 21:33:54 +0530 Subject: [PATCH 2/2] fix: narrow suppression to "symbol ... not found" errors only Generic "not found" suffix could mask unrelated errors. Match the specific error format from elf.go GetSymbol instead. --- ebpftracer/nodejs.go | 5 ++++- ebpftracer/python.go | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ebpftracer/nodejs.go b/ebpftracer/nodejs.go index 01e383c9..30079587 100644 --- a/ebpftracer/nodejs.go +++ b/ebpftracer/nodejs.go @@ -14,11 +14,14 @@ import ( func (t *Tracer) AttachNodejsProbes(pid uint32, exe string) []link.Link { log := func(libPath, msg string, err error) { if err != nil { - for _, s := range []string{"no such file or directory", "no such process", "permission denied", "not found"} { + for _, s := range []string{"no such file or directory", "no such process", "permission denied"} { if strings.HasSuffix(err.Error(), s) { return } } + if strings.Contains(err.Error(), "symbol") && strings.HasSuffix(err.Error(), "not found") { + return + } klog.ErrorfDepth(1, "pid=%d lib=%s: %s: %s", pid, libPath, msg, err) return } diff --git a/ebpftracer/python.go b/ebpftracer/python.go index 6060618f..90c4d12d 100644 --- a/ebpftracer/python.go +++ b/ebpftracer/python.go @@ -20,11 +20,14 @@ var ( func (t *Tracer) AttachPythonThreadLockProbes(pid uint32) []link.Link { log := func(libPath, msg string, err error) { if err != nil { - for _, s := range []string{"no such file or directory", "no such process", "permission denied", "not found"} { + for _, s := range []string{"no such file or directory", "no such process", "permission denied"} { if strings.HasSuffix(err.Error(), s) { return } } + if strings.Contains(err.Error(), "symbol") && strings.HasSuffix(err.Error(), "not found") { + return + } klog.ErrorfDepth(1, "pid=%d lib=%s: %s: %s", pid, libPath, msg, err) return }