From e5a04ec5a4e6eca1165daef60d3b33a7df439ff6 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Tue, 27 Jun 2017 12:48:51 +0100 Subject: [PATCH] do not filter endpoints by procspied/ebpf in renderers The filtering of endpoints causes some connections to get missed for non-eBPF-tracked connections. Furthermore, the filtering of endpoints is entirely pointless when the probes run eBPF since the filters just pass through eBPF-tracked endpoints (for good reason too; because otherwise some connections would be missed). So in that case it is just costing CPU and removing it actually improves performance. Note that removing the filtering does not result in over-counting connections since that is done by source ip:port pairs. Fixes #2551. Fixes #2558. --- render/container.go | 15 ++++++--------- render/filters.go | 20 -------------------- render/process.go | 2 +- 3 files changed, 7 insertions(+), 30 deletions(-) diff --git a/render/container.go b/render/container.go index dbec44a0d..81e426771 100644 --- a/render/container.go +++ b/render/container.go @@ -45,13 +45,7 @@ var ContainerRenderer = MakeFilter( ), ) -var mapEndpoint2IP = MakeMap( - endpoint2IP, - // We drop endpoint nodes which were procspied, as they will be - // joined to containers through the process topology, and we don't - // want to double count edges. - MakeFilter(Complement(procspied), SelectEndpoint), -) +var mapEndpoint2IP = MakeMap(endpoint2IP, SelectEndpoint) const originalNodeID = "original_node_id" const originalNodeTopology = "original_node_topology" @@ -121,8 +115,11 @@ func endpoint2IP(m report.Node, local report.Networks) report.Nodes { return report.Nodes{} } - if externalNode, ok := NewDerivedExternalNode(m, addr, local); ok { - return report.Nodes{externalNode.ID: externalNode} + // Nodes without a hostid may be pseudo nodes + if _, ok := m.Latest.Lookup(report.HostNodeID); !ok { + if externalNode, ok := NewDerivedExternalNode(m, addr, local); ok { + return report.Nodes{externalNode.ID: externalNode} + } } // We also allow for joining on ip:port pairs. This is useful for diff --git a/render/filters.go b/render/filters.go index 8cf384618..1bd8520c2 100644 --- a/render/filters.go +++ b/render/filters.go @@ -5,7 +5,6 @@ import ( "github.com/weaveworks/common/mtime" "github.com/weaveworks/scope/probe/docker" - "github.com/weaveworks/scope/probe/endpoint" "github.com/weaveworks/scope/probe/kubernetes" "github.com/weaveworks/scope/report" ) @@ -237,25 +236,6 @@ func IsRunning(n report.Node) bool { // IsStopped checks if the node is *not* a running docker container var IsStopped = Complement(IsRunning) -func procspied(node report.Node) bool { - _, ok := node.Latest.Lookup(endpoint.Procspied) - return ok -} - -func procspiedOrEBPF(node report.Node) bool { - if procspied(node) { - return true - } - _, ok := node.Latest.Lookup(endpoint.EBPF) - return ok -} - -// FilterProcspiedOrEBPF keeps only endpoints which were found via -// procspy or eBPF. -func FilterProcspiedOrEBPF(r Renderer) Renderer { - return MakeFilter(procspiedOrEBPF, r) -} - // IsApplication checks if the node is an "application" node func IsApplication(n report.Node) bool { containerName, _ := n.Latest.Lookup(docker.ContainerName) diff --git a/render/process.go b/render/process.go index 1f19c8c60..c6ce509b7 100644 --- a/render/process.go +++ b/render/process.go @@ -22,7 +22,7 @@ func renderProcesses(rpt report.Report) bool { } // EndpointRenderer is a Renderer which produces a renderable endpoint graph. -var EndpointRenderer = FilterProcspiedOrEBPF(SelectEndpoint) +var EndpointRenderer = SelectEndpoint // ProcessRenderer is a Renderer which produces a renderable process // graph by merging the endpoint graph and the process topology.