From 1a36ca360536cfaece4d733d029bdac9a4fc4732 Mon Sep 17 00:00:00 2001 From: Mayank Pande Date: Sun, 19 May 2024 11:52:06 +0530 Subject: [PATCH] fix: fix for duplicate stats --- containers/container.go | 16 ++++++---------- containers/registry.go | 9 +++------ main.go | 6 ++++-- node/collector.go | 3 +-- tracing/tracing.go | 8 +++++--- 5 files changed, 19 insertions(+), 23 deletions(-) diff --git a/containers/container.go b/containers/container.go index 03c30e06..2069c65c 100644 --- a/containers/container.go +++ b/containers/container.go @@ -17,7 +17,6 @@ import ( "github.com/coroot/coroot-node-agent/flags" "github.com/coroot/coroot-node-agent/logs" "github.com/coroot/coroot-node-agent/node" - "github.com/coroot/coroot-node-agent/node/metadata" "github.com/coroot/coroot-node-agent/pinger" "github.com/coroot/coroot-node-agent/proc" "github.com/coroot/coroot-node-agent/tracing" @@ -141,13 +140,11 @@ type Container struct { lock sync.RWMutex - done chan struct{} - ip_resolver IPResolver - instanceMetadata *metadata.CloudMetadata + done chan struct{} + ip_resolver IPResolver } -func NewContainer(id ContainerID, cg *cgroup.Cgroup, md *ContainerMetadata, hostConntrack *Conntrack, pid uint32, ip_resolver IPResolver, instanceMeta *metadata.CloudMetadata) (*Container, error) { - instanceMetadata := instanceMeta +func NewContainer(id ContainerID, cg *cgroup.Cgroup, md *ContainerMetadata, hostConntrack *Conntrack, pid uint32, ip_resolver IPResolver) (*Container, error) { netNs, err := proc.GetNetNs(pid) if err != nil { return nil, err @@ -179,9 +176,8 @@ func NewContainer(id ContainerID, cg *cgroup.Cgroup, md *ContainerMetadata, host hostConntrack: hostConntrack, - done: make(chan struct{}), - ip_resolver: ip_resolver, - instanceMetadata: instanceMetadata, + done: make(chan struct{}), + ip_resolver: ip_resolver, } for _, n := range md.networks { @@ -696,7 +692,7 @@ func (c *Container) onL7Request(pid uint32, fd uint64, timestamp uint64, r *l7.R if r.Response != nil { response = base64.StdEncoding.EncodeToString(r.Response) } - trace.HttpRequest(method, uri, r.Status, r.Duration, r.PayloadSize, payload, headers, response, host, *c.instanceMetadata, conn.actualDestWorkload) + trace.HttpRequest(method, uri, r.Status, r.Duration, r.PayloadSize, payload, headers, response, host, conn.actualDestWorkload) case l7.ProtocolHTTP2: if conn.http2Parser == nil { conn.http2Parser = l7.NewHttp2Parser() diff --git a/containers/registry.go b/containers/registry.go index 0399f782..a5b0fbf2 100644 --- a/containers/registry.go +++ b/containers/registry.go @@ -12,7 +12,6 @@ import ( "github.com/coroot/coroot-node-agent/common" "github.com/coroot/coroot-node-agent/ebpftracer" "github.com/coroot/coroot-node-agent/flags" - "github.com/coroot/coroot-node-agent/node/metadata" "github.com/coroot/coroot-node-agent/proc" "github.com/prometheus/client_golang/prometheus" "github.com/vishvananda/netns" @@ -55,7 +54,6 @@ type Registry struct { processInfoCh chan<- ProcessInfo ip_resolver IPResolver - instanceMeta *metadata.CloudMetadata } func NewRegistry(reg prometheus.Registerer, kernelVersion string, processInfoCh chan<- ProcessInfo, ip_resolver *common.K8sIPResolver) (*Registry, error) { @@ -112,9 +110,8 @@ func NewRegistry(reg prometheus.Registerer, kernelVersion string, processInfoCh processInfoCh: processInfoCh, - tracer: ebpftracer.NewTracer(kernelVersion, *flags.DisableL7Tracing), - ip_resolver: ip_resolver, - instanceMeta: metadata.GetInstanceMetadata(), + tracer: ebpftracer.NewTracer(kernelVersion, *flags.DisableL7Tracing), + ip_resolver: ip_resolver, } go r.handleEvents(r.events) @@ -310,7 +307,7 @@ func (r *Registry) getOrCreateContainer(pid uint32) *Container { r.containersByCgroupId[cg.Id] = c return c } - c, err := NewContainer(id, cg, md, r.hostConntrack, pid, r.ip_resolver, r.instanceMeta) + c, err := NewContainer(id, cg, md, r.hostConntrack, pid, r.ip_resolver) if err != nil { klog.Warningf("failed to create container pid=%d cg=%s id=%s: %s", pid, cg.Id, id, err) return nil diff --git a/main.go b/main.go index 2ebfd3f5..5de0ab35 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,7 @@ import ( "github.com/coroot/coroot-node-agent/flags" "github.com/coroot/coroot-node-agent/logs" "github.com/coroot/coroot-node-agent/node" + "github.com/coroot/coroot-node-agent/node/metadata" "github.com/coroot/coroot-node-agent/profiling" "github.com/coroot/coroot-node-agent/prom" "github.com/coroot/coroot-node-agent/tracing" @@ -148,7 +149,8 @@ func main() { whitelistNodeExternalNetworks() machineId := machineID() - tracing.Init(machineId, hostname, version) + md := metadata.GetInstanceMetadata() + tracing.Init(machineId, hostname, version, md) logs.Init(machineId, hostname, version) registry := prometheus.NewRegistry() @@ -156,7 +158,7 @@ func main() { registerer.MustRegister(info("node_agent_info", version)) - if err := registerer.Register(node.NewCollector(hostname, kv)); err != nil { + if err := registerer.Register(node.NewCollector(hostname, kv, md)); err != nil { klog.Exitln(err) } diff --git a/node/collector.go b/node/collector.go index fc86458f..d2358be4 100644 --- a/node/collector.go +++ b/node/collector.go @@ -152,8 +152,7 @@ type Collector struct { instanceMetadata *metadata.CloudMetadata } -func NewCollector(hostname, kernelVersion string) *Collector { - md := metadata.GetInstanceMetadata() +func NewCollector(hostname, kernelVersion string, md *metadata.CloudMetadata) *Collector { klog.Infof("instance metadata: %+v", md) return &Collector{ hostname: hostname, diff --git a/tracing/tracing.go b/tracing/tracing.go index 3a3d4d7f..e184d6ac 100644 --- a/tracing/tracing.go +++ b/tracing/tracing.go @@ -26,11 +26,13 @@ const ( ) var ( - tracer func(containerId string) trace.Tracer + tracer func(containerId string) trace.Tracer + instanceMetadata *metadata.CloudMetadata ) -func Init(machineId, hostname, version string) { +func Init(machineId, hostname, version string, md *metadata.CloudMetadata) { endpointUrl := *flags.TracesEndpoint + instanceMetadata = md if endpointUrl == nil { klog.Infoln("no OpenTelemetry traces collector endpoint configured") return @@ -108,7 +110,7 @@ func (t *Trace) createSpan(name string, duration time.Duration, error bool, attr span.End(trace.WithTimestamp(end)) } -func (t *Trace) HttpRequest(method, path string, status l7.Status, duration time.Duration, requestSize uint64, payload string, headers string, response string, host string, instanceMetadata metadata.CloudMetadata, destWorkload common.Workload) { +func (t *Trace) HttpRequest(method, path string, status l7.Status, duration time.Duration, requestSize uint64, payload string, headers string, response string, host string, destWorkload common.Workload) { if t == nil || method == "" { return }