An Istio service mesh demo with full observability using OpenTelemetry and a local observability stack (Jaeger, Prometheus, OpenSearch) and/or Dash0.
- Creates a multi-node Kind cluster with Istio service mesh (1.28.3)
- Deploys local observability stack: Jaeger, Prometheus, and OpenSearch
- Configures OTLP distributed tracing and access logs from Envoy sidecars
- Deploys OpenTelemetry Collectors with dual export to Dash0 and local stack
- Includes two-service demo with service-to-service communication through mesh
- Uses Istio Gateway and VirtualService for traffic management
- Docker
- Kind
- kubectl
- Helm 3
- Optional: Dash0 account with API token (telemetry also exports to local stack)
-
Configure environment variables:
# From the root directory (dash0-examples) cp .env.template .env # Edit .env with your Dash0 credentials
-
Deploy everything:
./00_run.sh
-
Access the gateway:
kubectl port-forward -n istio-system svc/istio-ingressgateway 8080:80
-
Test the application:
# Test frontend curl -H 'Host: service-a.dash0-examples.com' http://localhost:8080/ # Test service mesh communication (service-a → service-b) curl -H 'Host: service-a.dash0-examples.com' http://localhost:8080/api/backend
The demo sends telemetry to both Dash0 (primary cloud backend) and a local observability stack for offline inspection.
Log in to your Dash0 dashboard to view:
- Traces: Filter by
service.name = "istio-ingressgateway"or"service-a" - Metrics: Search for
istio_*andenvoy_*metrics - Logs: Access logs with correlated trace IDs
Jaeger (Traces):
kubectl port-forward -n default svc/jaeger-query 16686:16686Visit: http://localhost:16686
Prometheus (Metrics):
kubectl port-forward -n default svc/prometheus 9090:9090Visit: http://localhost:9090
OpenSearch Dashboards (Logs):
kubectl port-forward -n default svc/opensearch-dashboards 5601:5601Visit: http://localhost:5601
- Username:
admin - Password:
SecureP@ssw0rd123
To view logs in OpenSearch Dashboards:
- Navigate to "Discover" in the left menu
- Create an index pattern:
otel-logs* - Select
@timestampas the time field - Explore the logs with trace correlation
./01_cleanup.sh