How to build
Skydive relies on two main components:
- skydive agent, has to be started on each node where the topology and flows informations will be captured
- skydive analyzer, the node collecting data captured by the agents
Dependencies
Minimal
- Go >= 1.11
- libpcap (dev)
- libxml2 (dev)
- libvirt (dev)
- protoc >= 3.0
- protobuf
- npm
Installation
Dependencies
Below how to install the minimal required dependencies for Fedora and Ubuntu.
Fedora
sudo dnf install -y git make patch golang findutils protobuf-c-compiler protobuf-devel \
npm libpcap-devel libxml2-devel libvirt-develUbuntu
sudo apt-get install -y git make patch golang findutils protobuf-compiler libprotobuf-dev \
npm libpcap0.8-dev libxml2-dev libvirt-devBuild
Create a dedicated GOPATH.
For example:
mkdir $HOME/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATHthen get and build Skydive
mkdir -p $GOPATH/src/github.com/skydive-project
git clone https://github.com/skydive-project/skydive.git \
$GOPATH/src/github.com/skydive-project/skydive
cd $GOPATH/src/github.com/skydive-project/skydive
makeeBPF support
Skydive can leverage eBPF programs for topology and flow capture. This provides
a lightweight solution for retrieving topology information such as process socket information
and for packet processing within the kernel.
Some extra dependencies are required :
- llvm
- clang
- kernel-headers / linux-libc-dev
- bcc / bcc-devel
To enable the eBPF support :
make install WITH_EBPF=trueDPDK flow capture support
Skydive support flow capture from DPDK NICs. This allows starting flow capture on-demand on DPDK interface like any other interface.
Some extra dependencies are required :
- numactl-devel
- kernel-devel
To enable the DPDK support :
make install WITH_DPDK=trueThe DPDK probe requires some configuration adjustments. Below the DPDK configuration section :
dpdk:
# DPDK port listening flows from
ports:
# - 0
# - 1
# nb workers per port
# workers: 4
# debug message every n seconds
# debug: 1Ports to be used need to be un-commented or added.
Third Parties
Collectd plugin
Skydive Project provides a Collectd plugin which allows to expose Collectd metrics to the Skydive topology. The plugin has to be
started on the same host than Skydive agents and will update the Host node of the Skydive topology.
In order to compile the Skydive Collectd plugin one need to have the Collectd sources.
export COLLECTD_SRC=/tmp/collectd
git clone https://github.com/collectd/collectd $COLLECTD_SRC
mkdir -p $GOPATH/src/github.com/skydive-project
git clone https://github.com/skydive-project/skydive-collectd-plugin.git \
$GOPATH/src/github.com/skydive-project/skydive-collectd-plugin
cd $GOPATH/src/github.com/skydive-project/skydive-collectd-plugin
makeThis will generate a shared object (skydive.so) that can be placed in the collectd plugin folder.
In order to use it, it has to be copied in the collectd plugin folder. In order to configure it the following section
has to be added to the collectd config file.
LoadPlugin skydive
<Plugin skydive>
Address "127.0.0.1:8081"
Username ""
Password ""
</Plugin>Addressis theSkydiveagent addressUsernameSkydivecluster authentication user namePasswordSkydivecluster authentication password
Example:
In order to get memory metrics from Collectd:
LoadPlugin memory
LoadPlugin skydive
<Plugin skydive>
Address "127.0.0.1:8081"
Username ""
Password ""
</Plugin>All the Collectd metrics are currently reported in a Collectd sub-key of the Host topology node.
skydive client query 'G.V().HasKey("Collectd").Values("Collectd")