Skip to content

Commit 5494c22

Browse files
authored
make bpfink more fail-tolerant during startup & runtime (#46)
1. Bad consumer initialization during startup does not lead to crash anymore 2. BPF kernel metrics file bad closing doesn't lead to crash anymore 3. Links to socket files are not monitored anymore 4. Removed some unreachable/redundant code Co-authored-by: Nick Loginov <>
1 parent 3aac2f3 commit 5494c22

File tree

3 files changed

+9
-13
lines changed

3 files changed

+9
-13
lines changed

Diff for: cmd/main.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,10 @@ func (c Configuration) resolvePath(pathFull string) (string, os.FileInfo) {
327327
}
328328
return "", nil
329329
}
330+
if fileInfo.Mode()&os.ModeSocket != 0 {
331+
return "", nil
332+
}
333+
330334
fi = fileInfo
331335
pathFull = linkPath
332336
}
@@ -409,7 +413,7 @@ func (c Configuration) watcher() (*pkg.Watcher, error) {
409413

410414
for _, consumer := range consumers {
411415
if err := consumer.Init(); err != nil {
412-
logger.Fatal().Err(err).Msg("failed to init consumer")
416+
logger.Error().Err(err).Msg("failed to init consumer")
413417
}
414418
}
415419
return pkg.NewWatcher(func(w *pkg.Watcher) {
@@ -472,10 +476,7 @@ func run() error {
472476
metrics.RecordByInstalledHost()
473477
// send version metric
474478
metrics.RecordVersion(Version)
475-
err = metrics.RecordBPFMetrics()
476-
if err != nil {
477-
logger.Fatal().Err(err).Msg("error starting bpf metrics")
478-
}
479+
metrics.RecordBPFMetrics()
479480
key := make([]byte, keySize)
480481
if config.Keyfile == "" {
481482
if _, err := io.ReadFull(rand.Reader, key); err != nil {

Diff for: pkg/graphite.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ func (m *Metrics) RecordByInstalledHost() {
119119
}
120120

121121
// RecordBPFMetrics send metrics for BPF hits and misses per probe
122-
func (m *Metrics) RecordBPFMetrics() error {
122+
func (m *Metrics) RecordBPFMetrics() {
123123
go func() {
124124
for range time.Tick(m.MetricsInterval) {
125125
BPFMetrics, err := m.fetchBPFMetrics()
@@ -138,7 +138,6 @@ func (m *Metrics) RecordBPFMetrics() error {
138138
}
139139
}
140140
}()
141-
return nil
142141
}
143142

144143
func (m *Metrics) fetchBPFMetrics() (map[string]bpfMetrics, error) {
@@ -150,7 +149,7 @@ func (m *Metrics) fetchBPFMetrics() (map[string]bpfMetrics, error) {
150149
}
151150
defer func() {
152151
if err := file.Close(); err != nil {
153-
log.Fatal(err)
152+
log.Print(err)
154153
}
155154
}()
156155

@@ -209,7 +208,7 @@ func (m *Metrics) fetchBPFMetrics() (map[string]bpfMetrics, error) {
209208
}
210209

211210
if err := scanner.Err(); err != nil {
212-
log.Fatal(err)
211+
log.Print(err)
213212
}
214213
return BPFMetrics, nil
215214
}

Diff for: pkg/watcher.go

-4
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,7 @@ func (w *Watcher) removeInode(key uint64) {
209209
func (w *Watcher) Start() error {
210210
defer func() {
211211
if i := recover(); i != nil {
212-
w.Fatal().Msgf("Panic Caught")
213212
w.Fatal().Msgf("Caught panic: %v", i)
214-
if err := w.Start(); err != nil {
215-
w.Error().Err(err)
216-
}
217213
}
218214
}()
219215
w.Debug().Msgf("consumer Count: %v", len(w.Consumers))

0 commit comments

Comments
 (0)