Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
0bac6f3
Elasticsearch: store prevRevision when fetching nodes/edges
adrianlzt Jan 20, 2021
ae360c0
Descendants step parameter to include ownership_shared edge
adrianlzt Sep 7, 2020
a1a2c94
First functional version of proccon and procpeering
adrianlzt May 19, 2020
edca5d2
proccon probe: modify Origin field in nodes/edges
adrianlzt Jan 19, 2021
805ff74
Unmarshal correctly metadata from nodes with network info
adrianlzt Jan 19, 2021
66319ab
procpeering probe: custom Origin field in edge
adrianlzt Jan 20, 2021
cd3004b
proccon probe: allow a prefix to distinguish different priv networks
adrianlzt Jan 27, 2021
3b24c26
Use metric timestamp as CreatedAt/UpdatedAt value
adrianlzt Feb 18, 2021
110eb7b
proccon: force a sync to the backend each several iterations
adrianlzt Feb 18, 2021
5bfb37a
elasticsearch: rolles indices should keep the same mapping
adrianlzt Feb 19, 2021
abb54b3
procpeering,proccon: only load probes if configured
adrianlzt Feb 23, 2021
5cdb552
Small refactor of addNetworkInfo. Tests for revision
adrianlzt Feb 23, 2021
d4499e4
Accumulate changes to "others" Software node in one change
adrianlzt Feb 23, 2021
4294093
Merge branch 'master' into datadope
datadope-pablo Mar 15, 2021
658353c
Delete go.sum
datadope-pablo Mar 16, 2021
76dd5bd
proccon: check network info has the expected format
adrianlzt Mar 11, 2021
a3e7379
proccon: use msgpack for communication with telegraf
adrianlzt Mar 9, 2021
663bbf8
proccon: make probe valid for all OSs
adrianlzt Mar 11, 2021
bfff853
proccon: avoid errors while GCing missing fields
adrianlzt Mar 12, 2021
237646c
procpeering: do not fail when patching a software node
adrianlzt Mar 12, 2021
b66585f
api: create edge with the 'api' service type
adrianlzt Mar 11, 2021
66cbdae
proccon: call ReadAll from ioutil instead of io
datadope-pablo Mar 17, 2021
997bea4
proccon: avoid panicking if invalid value type
adrianlzt Apr 12, 2021
3682621
proccon: use X-Forwarded-For header for client logging
datadope-pablo Apr 12, 2021
5f11257
Merge pull request #16 from datadope-io/bug/real-ip-header
adrianlzt Apr 12, 2021
7a315ca
Add Ascendants step
adrianlzt May 13, 2021
6db5d1b
proccon: OpenTelemetry y función processMetric. Benchmarks
adrianlzt May 28, 2021
cddc0e0
proccon: server node id fijo. Agrupar metricas por host
adrianlzt May 28, 2021
fd75aed
proccon: quitamos la telemetria con OpenTelemetry
adrianlzt May 28, 2021
8bec433
Evitamos perder los data type al parchear nodos
adrianlzt Jun 8, 2021
b242ead
Solucionamos escritura/lectura concurrente en graph
adrianlzt Jun 10, 2021
f30a1d0
Cambio nombre variables y reformular el http handler
adrianlzt Jun 11, 2021
077185d
proccon: refactor del código para simplificar y gestionar locks
adrianlzt Jun 11, 2021
2182838
Add snmplldp topology probe
datadope-pablo Apr 12, 2021
e41db7d
snmplldp: check if the SNMP object exists
datadope-pablo Apr 30, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 20 additions & 14 deletions agent/topology_probes.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,25 +140,31 @@ func NewTopologyProbeBundle(g *graph.Graph, hostNode *graph.Node) (*probe.Bundle
}

probeList := []string{"hardware"}
if runtime.GOOS == "linux" {
probeList = append(probeList, "netlink", "netns")
}
/*
* Do not add netlink by default
if runtime.GOOS == "linux" {
probeList = append(probeList, "netlink", "netns")
}
*/

probeList = append(probeList, config.GetStringSlice("agent.topology.probes")...)
logging.GetLogger().Infof("Topology probes: %v", probeList)

if runtime.GOOS == "linux" {
nlHandler, err := NewTopologyProbe("netlink", ctx, bundle)
if err != nil {
return nil, err
}
bundle.AddHandler("netlink", nlHandler)

nsHandler, err := NewTopologyProbe("netns", ctx, bundle)
if err != nil {
return nil, err
}
bundle.AddHandler("netns", nsHandler)
/*
* Do not add netlink by default
nlHandler, err := NewTopologyProbe("netlink", ctx, bundle)
if err != nil {
return nil, err
}
bundle.AddHandler("netlink", nlHandler)

nsHandler, err := NewTopologyProbe("netns", ctx, bundle)
if err != nil {
return nil, err
}
bundle.AddHandler("netns", nsHandler)
*/
}

for _, t := range probeList {
Expand Down
10 changes: 10 additions & 0 deletions analyzer/probes.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ import (
"github.com/skydive-project/skydive/topology/probes/ovn"
"github.com/skydive-project/skydive/topology/probes/ovsdb"
"github.com/skydive-project/skydive/topology/probes/peering"
"github.com/skydive-project/skydive/topology/probes/proccon"
"github.com/skydive-project/skydive/topology/probes/procpeering"
"github.com/skydive-project/skydive/topology/probes/snmplldp"
)

func registerStaticProbes() {
Expand All @@ -54,6 +57,7 @@ func registerStaticProbes() {
ovsdb.Register()
libvirt.Register()
ovn.Register()
proccon.Register()
}

func registerPluginProbes() error {
Expand Down Expand Up @@ -121,6 +125,12 @@ func NewTopologyProbeBundleFromConfig(g *graph.Graph) (*probe.Bundle, error) {
handler, err = istio.NewIstioProbe(g)
case "nsm":
handler, err = nsm.NewNsmProbe(g)
case "proccon":
handler, err = proccon.NewProbe(g)
case "procpeering":
handler, err = procpeering.NewProbe(g)
case "snmplldp":
handler, err = snmplldp.NewProbe(g)
default:
logging.GetLogger().Errorf("unknown probe type: %s", t)
continue
Expand Down
1 change: 1 addition & 0 deletions analyzer/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ func NewServerFromConfig() (*Server, error) {
tr.AddTraversalExtension(ge.NewFlowTraversalExtension(tableClient, s.flowStorage))
tr.AddTraversalExtension(ge.NewSocketsTraversalExtension())
tr.AddTraversalExtension(ge.NewDescendantsTraversalExtension())
tr.AddTraversalExtension(ge.NewAscendantsTraversalExtension())
tr.AddTraversalExtension(ge.NewNextHopTraversalExtension())
tr.AddTraversalExtension(ge.NewGroupTraversalExtension())

Expand Down
29 changes: 29 additions & 0 deletions etc/skydive.yml.default
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ analyzer:
# - istio
# - nsm
# - ovn
# - procpeering
# - proccon

k8s:
# kubeconfig resolution order:
Expand Down Expand Up @@ -175,6 +177,33 @@ analyzer:
# * unix:/var/run/ovn/ovnnb_db.sock
# address: unix:/var/run/ovn/ovnnb_db.sock

# Probe to listen for outside metrics with network information about procs
proccon:
# Where does this probe listen for new data
listen: 0.0.0.0:4000

# Network information received by proccon that does not add new elements to Metadata.TCPConn or TCPListen
# does not produce a flush to the backend.
# To avoid leaving behind the backend, after this number of node revisions, the flush is done.
# The node.Revision field increments one for each modification in TCPConn or TCPListen.
# If the node receive info for both values, node.Revision will increment two times.
# Using revision_flush=1 will keep the backend synced to skydive, but at the expense of many writes.
# Using a big value could lost data in case of a restart.
# This value should be a trade-off between the interval of clients sending data the the garbage_collector.delete_duration
# Eg.: if clients send data each 5', assuming they always send conn+listen info, this will produce 2 updates each 5'.
# If we want to sync each two hours, we will set the value to 12*2/5=48
revision_flush: 48

# Clean old connections (items from Metadata.TCPConn and Metadata.TCPListen)
garbage_collector:
# How often garbage collector will run
# Format: https://golang.org/pkg/time/#ParseDuration
# Eg.: 2h, 20m, 3h45m
interval: 1h
# Network info older than this value will be deleted.
# Same format as "interval"
delete_duration: 3h

replication:
# debug: false

Expand Down
8 changes: 7 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,14 @@ require (
github.com/golang/protobuf v1.3.2
github.com/golangci/golangci-lint v1.18.0
github.com/gomatic/renderizer v1.0.1
github.com/google/go-cmp v0.5.5 // indirect
github.com/google/gopacket v1.1.17
github.com/gophercloud/gophercloud v0.13.0
github.com/gorilla/mux v1.8.0
github.com/gorilla/websocket v1.4.2
github.com/gosnmp/gosnmp v1.31.0 // indirect
github.com/gosuri/uitable v0.0.0-20160404203958-36ee7e946282 // indirect
github.com/grpc-ecosystem/grpc-gateway v1.11.3 // indirect
github.com/hashicorp/golang-lru v0.5.3
github.com/hydrogen18/stoppableListener v0.0.0-20151210151943-dadc9ccc400c
github.com/inconshreveable/log15 v0.0.0-20201112154412-8562bdadbbac // indirect
Expand All @@ -50,7 +53,6 @@ require (
github.com/lunixbochs/struc v0.0.0-20180408203800-02e4c2afbb2a
github.com/lxc/lxd v0.0.0-20200330183600-518f06676866
github.com/mailru/easyjson v0.7.6
github.com/mattn/go-isatty v0.0.12 // indirect
github.com/mattn/goveralls v0.0.2
github.com/mitchellh/mapstructure v1.3.3
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
Expand Down Expand Up @@ -79,17 +81,21 @@ require (
github.com/spf13/cobra v1.1.1
github.com/spf13/pflag v1.0.5
github.com/spf13/viper v1.7.0
github.com/stretchr/testify v1.7.0
github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c
github.com/tebeka/go2xunit v1.4.10
github.com/tebeka/selenium v0.0.0-20170314201507-657e45ec600f
github.com/tinylib/msgp v1.1.0 // indirect
github.com/tomnomnom/linkheader v0.0.0-20180905144013-02ca5825eb80 // indirect
github.com/vishvananda/netlink v1.0.0
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df
github.com/voxelbrain/goptions v0.0.0-20180630082107-58cddc247ea2 // indirect
github.com/weaveworks/tcptracer-bpf v0.0.0-20170817155301-e080bd747dc6
golang.org/x/net v0.0.0-20201021035429-f5854403a974
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d // indirect
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f
golang.org/x/tools v0.0.0-20210106214847-113979e3529a
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/grpc v1.23.1
gopkg.in/fsnotify/fsnotify.v1 v1.0.0-20180110053347-c2828203cd70
gopkg.in/macaroon-bakery.v2 v2.2.0 // indirect
Expand Down
2 changes: 1 addition & 1 deletion graffiti/api/server/edge.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func (h *EdgeAPIHandler) Create(resource rest.Resource, createOpts *rest.CreateO
graphEdge.UpdatedAt = graphEdge.CreatedAt
}
if graphEdge.Origin == "" {
graphEdge.Origin = h.g.GetOrigin()
graphEdge.Origin = graph.Origin(h.g.GetHost(), apiOrigin)
}
if graphEdge.Metadata == nil {
graphEdge.Metadata = graph.Metadata{}
Expand Down
10 changes: 9 additions & 1 deletion graffiti/api/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,18 @@ func (e *Edge) Validate() error {
}

// Node object
// easyjson:json
// swagger:model
type Node graph.Node

// UnmarshalJSON decodes types.Node using the custom graph.Node unmarshal which
// uses MetadataDecoders
func (n *Node) UnmarshalJSON(data []byte) error {
gNode := graph.Node(*n)
err := gNode.UnmarshalJSON(data)
*n = Node(gNode)
return err
}

// GetID returns the node ID
func (n *Node) GetID() string {
return string(n.ID)
Expand Down
Loading