diff --git a/cmd/system-probe/modules/network_tracer.go b/cmd/system-probe/modules/network_tracer.go index 61847f9004aae8..7dcea7288beb2e 100644 --- a/cmd/system-probe/modules/network_tracer.go +++ b/cmd/system-probe/modules/network_tracer.go @@ -36,7 +36,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/tracer" usmconsts "github.com/DataDog/datadog-agent/pkg/network/usm/consts" usm "github.com/DataDog/datadog-agent/pkg/network/usm/utils" - "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -67,19 +66,13 @@ func createNetworkTracerModule(_ *sysconfigtypes.Config, deps module.FactoryDepe t, err := tracer.NewTracer(ncfg, deps.Telemetry) - done := make(chan struct{}) - if err == nil { - startTelemetryReporter(done) - } - - return &networkTracer{tracer: t, done: done}, err + return &networkTracer{tracer: t}, err } var _ module.Module = &networkTracer{} type networkTracer struct { tracer *tracer.Tracer - done chan struct{} restartTimer *time.Timer } @@ -322,7 +315,6 @@ func (nt *networkTracer) Register(httpMux *module.Router) error { // Close will stop all system probe activities func (nt *networkTracer) Close() { - close(nt.done) nt.tracer.Stop() } @@ -363,23 +355,6 @@ func writeConnections(w http.ResponseWriter, marshaler marshal.Marshaler, cs *ne log.Tracef("/connections: %d connections", len(cs.Conns)) } -func startTelemetryReporter(done <-chan struct{}) { - telemetry.SetStatsdClient(statsd.Client) - ticker := time.NewTicker(30 * time.Second) - go func() { - defer ticker.Stop() - - for { - select { - case <-ticker.C: - telemetry.ReportStatsd() - case <-done: - return - } - } - }() -} - func writeDisabledProtocolMessage(protocolName string, w http.ResponseWriter) { log.Warnf("%s monitoring is disabled", protocolName) w.WriteHeader(404) diff --git a/pkg/network/usm/monitor.go b/pkg/network/usm/monitor.go index 4ee3d2e535d68b..a6907c5124ec39 100644 --- a/pkg/network/usm/monitor.go +++ b/pkg/network/usm/monitor.go @@ -29,6 +29,7 @@ import ( usmstate "github.com/DataDog/datadog-agent/pkg/network/usm/state" "github.com/DataDog/datadog-agent/pkg/network/usm/utils" "github.com/DataDog/datadog-agent/pkg/process/monitor" + "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -51,6 +52,8 @@ type Monitor struct { closeFilterFn func() lastUpdateTime *atomic.Int64 + + telemetryStopChannel chan struct{} } // NewMonitor returns a new Monitor instance @@ -95,10 +98,11 @@ func NewMonitor(c *config.Config, connectionProtocolMap *ebpf.Map) (m *Monitor, usmstate.Set(usmstate.Running) usmMonitor := &Monitor{ - cfg: c, - ebpfProgram: mgr, - closeFilterFn: closeFilterFn, - processMonitor: processMonitor, + cfg: c, + ebpfProgram: mgr, + closeFilterFn: closeFilterFn, + processMonitor: processMonitor, + telemetryStopChannel: make(chan struct{}), } usmMonitor.lastUpdateTime = atomic.NewInt64(time.Now().Unix()) @@ -138,7 +142,11 @@ func (m *Monitor) Start() error { err = m.processMonitor.Initialize(m.cfg.EnableUSMEventStream) } - return err + if err != nil { + return err + } + m.startTelemetryReporter() + return nil } // Pause bypasses the eBPF programs in the monitor @@ -202,6 +210,9 @@ func (m *Monitor) Stop() { return } + if m.telemetryStopChannel != nil { + close(m.telemetryStopChannel) + } m.processMonitor.Stop() ddebpf.RemoveNameMappings(m.ebpfProgram.Manager.Manager) @@ -215,3 +226,20 @@ func (m *Monitor) Stop() { func (m *Monitor) DumpMaps(w io.Writer, maps ...string) error { return m.ebpfProgram.DumpMaps(w, maps...) } + +func (m *Monitor) startTelemetryReporter() { + telemetry.SetStatsdClient(statsd.Client) + ticker := time.NewTicker(30 * time.Second) + go func() { + defer ticker.Stop() + + for { + select { + case <-ticker.C: + telemetry.ReportStatsd() + case <-m.telemetryStopChannel: + return + } + } + }() +}