mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-18 21:09:38 +00:00
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.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user