Skip to content

Commit 5922043

Browse files
committed
add filtering for systemd system services
1 parent a98b1e1 commit 5922043

File tree

4 files changed

+46
-1
lines changed

4 files changed

+46
-1
lines changed

containers/registry.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,14 @@ func (r *Registry) getOrCreateContainer(pid uint32) *Container {
373373
r.containersByPidIgnored[pid] = &t
374374
return nil
375375
}
376+
if cg.ContainerType == cgroup.ContainerTypeSystemdService && *flags.SkipSystemdSystemServices {
377+
if md.systemd.IsSystemService() {
378+
klog.InfoS("skipping system service", "id", id, "unit", md.systemd.Unit, "type", md.systemd.Type, "triggered_by", md.systemd.TriggeredBy, "pid", pid)
379+
t := time.Now()
380+
r.containersByPidIgnored[pid] = &t
381+
return nil
382+
}
383+
}
376384

377385
if c := r.containersById[id]; c != nil {
378386
klog.Warningln("id conflict:", id)

containers/systemd.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,23 @@ import (
1818
var (
1919
dbusConn *dbus.Conn
2020
dbusTimeout = time.Second
21+
22+
systemServicePrefixes = []string{
23+
"systemd-",
24+
"dbus",
25+
"getty",
26+
"system-serial",
27+
"system-getty",
28+
"serial-getty",
29+
"snapd",
30+
"packagekit",
31+
"unattended-upgrades",
32+
"multipathd",
33+
"qemu-guest-agent",
34+
"irqbalance",
35+
"networkd-dispatcher",
36+
"rpcbind",
37+
}
2138
)
2239

2340
func init() {
@@ -40,6 +57,7 @@ func init() {
4057
}
4158

4259
type SystemdProperties struct {
60+
Unit string
4361
TriggeredBy string
4462
Type string
4563
}
@@ -48,6 +66,22 @@ func (sp SystemdProperties) IsEmpty() bool {
4866
return sp.TriggeredBy == "" && sp.Type == ""
4967
}
5068

69+
func (sp SystemdProperties) IsSystemService() bool {
70+
switch sp.Type {
71+
case "oneshot", "dbus":
72+
return true
73+
}
74+
if strings.HasSuffix(sp.TriggeredBy, ".timer") {
75+
return true
76+
}
77+
for _, prefix := range systemServicePrefixes {
78+
if strings.HasPrefix(sp.Unit, prefix) {
79+
return true
80+
}
81+
}
82+
return false
83+
}
84+
5185
func getSystemdProperties(id string) SystemdProperties {
5286
props := SystemdProperties{}
5387
if dbusConn == nil {
@@ -57,6 +91,7 @@ func getSystemdProperties(id string) SystemdProperties {
5791
defer cancel()
5892
parts := strings.Split(id, "/")
5993
unit := parts[len(parts)-1]
94+
props.Unit = unit
6095
properties, err := dbusConn.GetAllPropertiesContext(ctx, unit)
6196
if err != nil {
6297
klog.Warningln("failed to get systemd properties:", err)

flags/flags.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ var (
1818
ContainerAllowlist = kingpin.Flag("container-allowlist", "List of allowed containers (regex patterns)").Envar("CONTAINER_ALLOWLIST").Strings()
1919
ContainerDenylist = kingpin.Flag("container-denylist", "List of denied containers (regex patterns)").Envar("CONTAINER_DENYLIST").Strings()
2020

21+
SkipSystemdSystemServices = kingpin.Flag("skip-systemd-system-services", "Skip well-known systemd system services (apt, motd, udev, etc.)").Default("true").Envar("SKIP_SYSTEMD_SYSTEM_SERVICES").Bool()
22+
2123
ExcludeHTTPMetricsByPath = kingpin.Flag("exclude-http-requests-by-path", "Skip HTTP metrics and traces by path").Envar("EXCLUDE_HTTP_REQUESTS_BY_PATH").Strings()
2224

2325
ExternalNetworksWhitelist = kingpin.

proc/fd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func ReadFds(pid uint32) ([]Fd, error) {
3434
}
3535
dest, err := os.Readlink(path.Join(fdDir, entry.Name()))
3636
if err != nil {
37-
if os.IsNotExist(err) {
37+
if !os.IsNotExist(err) {
3838
klog.Warningf("failed to read link '%s': %s", entry.Name(), err)
3939
}
4040
continue

0 commit comments

Comments
 (0)