TraceHub is a cloud-native distributed tracing system that combines eBPF/TC-based traffic capture with Istio/Envoy WASM plugins to provide comprehensive observability for Kubernetes service mesh environments.
- eBPF/TC Traffic Capture: Kernel-level packet capture with minimal overhead
- Envoy WASM Plugin Integration: Application-layer trace collection via Istio service mesh
- OpenTelemetry Compatible: Export traces in OTLP format
- Kubernetes Native: DaemonSet deployment with automatic pod/service discovery
- Kubernetes cluster (v1.28+)
- Istio service mesh (v1.20+)
- Linux kernel 5.15+ with eBPF support
- Nodes with
NET_ADMIN,SYS_ADMINcapabilities
kubectl apply -f deployments/tracehub.yaml# Using Makefile (recommended)
make build # Binary output: bin/tracehub
# Or manually
cd tracehub && go build -o tracehub .# Using Makefile
make docker # Image: boanlab/tracehub:v0.1
# Or manually
docker build -t boanlab/tracehub:v0.1 -f deployments/Dockerfile .- Go 1.23+
- Clang 14+ / LLVM 14+
- Linux headers (
linux-headers-$(uname -r)) bpftool,iproute2
tracehub/
├── go.mod
├── main.go # Entry point
├── core/ # Core TraceHub lifecycle
├── config/ # Configuration management
├── collector/ # Data collection
│ ├── tc/ # eBPF/TC packet capture
│ └── wasm/ # Envoy WASM plugin
├── aggregator/ # Trace aggregation
├── exporter/ # OTLP export
├── k8s/ # Kubernetes integration
├── container/ # Container runtime integration
├── types/ # Shared type definitions
└── protobuf/ # gRPC proto definitions
TraceHub is configured via environment variables or command-line flags:
| Variable | Default | Description |
|---|---|---|
collectorAddr |
0.0.0.0 | Collector gRPC bind address |
collectorPort |
4317 | Collector gRPC port (OTLP) |
wasmPort |
4318 | WASM plugin API port |
exporterAddr |
0.0.0.0 | Exporter gRPC bind address |
exporterPort |
8080 | Exporter gRPC port |
aggregationPeriod |
1 | Metrics aggregation period (seconds) |
cleanUpPeriod |
5 | Outdated metrics cleanup period (seconds) |
A sample application is provided in sample-app/ for testing:
kubectl apply -f sample-app/namespace.yaml
kubectl apply -f sample-app/httpbin.yaml
kubectl apply -f sample-app/telemetry.yamlThis project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Copyright 2024 BoanLab @ DKU