See A research lab for automating incident triage for a blog post introducing DepViz.
Real-time dynamic service dependency graph visualization from OpenTelemetry traces.
DepViz consists of two main components:
- Server: A Python-based OTLP gRPC receiver that processes incoming traces, aggregates service dependencies, and provides a REST/WebSocket API.
- UI: A web interface built with TypeScript and Cytoscape.js that visualizes the service topology in real-time.
DepViz is designed to work alongside the OpenTelemetry Demo. Follow the OTel Demo instructions for information on deploying and undeploying the demo to your k8s cluster.
DepViz consumes traces produced by the demo services to build a live map of the architecture, providing immediate visibility into service relationships, latency, and error rates.
To deploy DepViz alongside the OpenTelemetry Demo in a Kubernetes cluster (e.g., using kind or minikube), follow these steps:
First, build the Docker images for both the server and the UI, then load them into your local cluster.
# Build Server
cd server
docker build -t depviz-server:dev .
kind load docker-image depviz-server:dev # Or 'minikube image load depviz-server:dev'
# Build UI
cd ../ui
docker build -t depviz-ui:dev .
kind load docker-image depviz-ui:dev # Or 'minikube image load depviz-ui:dev'Apply the Kubernetes manifests for the server and the UI.
# From the project root
kubectl apply -f server/k8s/depviz-server.yaml
kubectl apply -f ui/k8s/depviz-ui.yamlTo feed traces into DepViz, you need to update the OpenTelemetry Collector configuration in your cluster.
- Locate the ConfigMap for your OTel Collector agent (e.g.,
otel-collector-agent). - Add a new OTLP exporter pointing to
depviz-server:4317. - Add this exporter to your traces pipeline.
Example configuration snippet:
exporters:
otlp/depviz:
endpoint: depviz-server:4317
tls:
insecure: true
service:
pipelines:
traces:
exporters: [otlp/jaeger, otlp/depviz, debug]Restart the OTel Collector to apply the new configuration:
kubectl rollout restart deployment/otel-collector-agentPort-forward to the UI service to view the dashboard:
kubectl port-forward deploy/depviz-ui 8001:8001Open your browser and navigate to http://localhost:8001.
For local development, it's more convenient to run the server and UI components on the host instead of running them in the k8s cluster. To start the server:
cd server
poetry shell
python3 src/depviz_server/main.pyTo start the UI:
cd ui
npm install
npm run build
npm run devIn the OTel Collector config map, use host.docker.internal:4317 for the OTLP exporter endpoint. Then restart the OTel Collector as described in the previous section.
Infers service-to-service dependencies directly from distributed traces, eliminating the need for manually maintained service maps.
Continuously updates a directed service graph as trace data streams in, providing an always-current view of runtime architecture.
Visualizes system health directly on the graph using latency and error metrics, allowing bottlenecks and failure propagation paths to surface immediately.
Enables click-through exploration of services and dependencies, exposing call volume, latency percentiles, and error rates.
Allows users to view dependency topology over selectable time ranges to observe topology drift and incident evolution.
Consumes OTLP trace data via gRPC directly from the OpenTelemetry Collector, demonstrating standards-based observability integration.
Supports exporting the dependency graph as an image for sharing, documentation, or incident reports.
