in metric/system/process/process_common.go [159:213]
func (procStats *Stats) Init() error {
procStats.logger = logp.NewLogger("processes")
var err error
procStats.host, err = sysinfo.Host()
if err != nil {
procStats.host = nil
procStats.logger.Warnf("Getting host details: %v", err)
}
// footcannon prevention
if procStats.Hostfs == nil {
procStats.Hostfs = resolve.NewTestResolver("/")
}
if procStats.EnableNetwork && len(procStats.NetworkMetrics) == 0 {
procStats.logger.Warnf("Collecting all network metrics per-process; this will produce a large volume of data.")
}
procStats.ProcsMap = NewProcsTrack()
if len(procStats.Procs) == 0 {
return nil
}
procStats.procRegexps = []match.Matcher{}
for _, pattern := range procStats.Procs {
reg, err := match.Compile(pattern)
if err != nil {
return fmt.Errorf("failed to compile regexp [%s]: %w", pattern, err)
}
procStats.procRegexps = append(procStats.procRegexps, reg)
}
procStats.envRegexps = make([]match.Matcher, 0, len(procStats.EnvWhitelist))
for _, pattern := range procStats.EnvWhitelist {
reg, err := match.Compile(pattern)
if err != nil {
return fmt.Errorf("failed to compile env whitelist regexp [%v]: %w", pattern, err)
}
procStats.envRegexps = append(procStats.envRegexps, reg)
}
if procStats.EnableCgroups {
cgReader, err := cgroup.NewReaderOptions(procStats.CgroupOpts)
if errors.Is(err, cgroup.ErrCgroupsMissing) {
logp.Warn("cgroup data collection will be disabled: %v", err)
procStats.EnableCgroups = false
} else if err != nil {
return fmt.Errorf("error initializing cgroup reader: %w", err)
}
procStats.cgroups = cgReader
}
procStats.excludedPIDs = processesToIgnore()
return nil
}