Service meshes add a critical infrastructure layer to Kubernetes clusters — handling service-to-service communication, mutual TLS, traffic management, and resilience patterns. But once your mesh is running, how do you know what’s actually happening inside it? Service mesh observability dashboards answer that question.

In this guide, we compare the three leading open-source service mesh visualization platforms: Kiali (for Istio), Linkerd Viz (for Linkerd), and Consul Dashboard (for Consul Service Mesh). Each provides a different window into your mesh’s health, traffic patterns, and configuration state.

What Is Service Mesh Observability?

Service mesh observability goes beyond standard application monitoring. Because the mesh intercepts all service-to-service traffic via sidecar proxies, it generates rich telemetry data including:

  • Service dependency graphs showing which services talk to which
  • Request latency, throughput, and error rates per service pair
  • Mutual TLS certificate status and rotation
  • Traffic split and canary deployment visualization
  • Policy enforcement audit trails

A good observability dashboard turns this raw telemetry into actionable insights — helping you spot misconfigurations, debug latency spikes, and verify security policies.

Kiali

GitHub: kiali/kiali | Stars: ~3,500+ | License: Apache-2.0

Kiali is the official observability console for Istio service mesh. It provides a comprehensive web UI for visualizing your Istio topology, validating configurations, and monitoring traffic flow between services.

Key Features

  • Real-time service topology graph with traffic animation
  • Istio configuration validation (detecting misconfigured VirtualServices, DestinationRules)
  • Distributed tracing integration with Jaeger and Tempo
  • Workload health scoring and error rate visualization
  • Namespace and cluster isolation views
  • Custom graph layouts (grid, concentric, dagre)

Installation

Kiali installs via Helm alongside Istio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# kiali-values.yaml
auth:
  strategy: login  # or 'openshift', 'token'
server:
  web_fqdn: kiali.example.com
  web_port: 443
  web_root: /
deployment:
  accessible_namespaces:
    - "**"  # all namespaces
external_services:
  prometheus:
    url: http://prometheus.istio-system:9090
  grafana:
    in_cluster_url: http://grafana.istio-system:3000
  tracing:
    in_cluster_url: http://tracing.istio-system:16686
    enabled: true
1
2
3
4
helm repo add kiali https://kiali.org/helm-charts
helm install kiali kiali/kiali \
  --namespace istio-system \
  --values kiali-values.yaml

Docker Compose (Local Testing)

For local development with a mesh stack:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# docker-compose-kiali.yml
version: "3.8"
services:
  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin

  jaeger:
    image: jaegertracing/all-in-one:latest
    ports:
      - "16686:16686"
      - "14268:14268"

  kiali:
    image: quay.io/kiali/kiali:latest
    ports:
      - "20001:20001"
    environment:
      - AUTH_STRATEGY=login
    depends_on:
      - prometheus
      - grafana
      - jaeger
1
docker compose -f docker-compose-kiali.yml up -d

Linkerd Viz

GitHub: linkerd/linkerd2 | Stars: ~27,000+ | License: Apache-2.0

Linkerd Viz is the observability extension for Linkerd, the lightweight service mesh from the Cloud Native Computing Foundation. Unlike Kiali’s standalone dashboard approach, Linkerd Viz is tightly integrated into the Linkerd CLI and control plane.

Key Features

  • linkerd viz dashboard command for instant UI access
  • Per-route metrics (not just per-service)
  • Automatic tap stream of live requests
  • Service profile validation and traffic splitting visualization
  • Top command for real-time traffic monitoring
  • Prometheus integration baked in

Installation

Linkerd Viz is installed as an extension to the Linkerd control plane:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Install Linkerd CLI
curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install | sh
export PATH=$HOME/.linkerd2/bin:$PATH

# Install Linkerd control plane
linkerd install | kubectl apply -f -

# Install the Viz extension
linkerd viz install | kubectl apply -f -

# Open the dashboard
linkerd viz dashboard &

Configure the dashboard with Grafana and Prometheus:

1
2
3
4
5
# viz-values.yaml
prometheusUrl: http://prometheus.linkerd-viz:9090
grafanaUrl: http://grafana.linkerd-viz:3000
enablePodMonitor: true
defaultRetention: 48h
1
linkerd viz install --viz-values-file viz-values.yaml | kubectl apply -f -

Live Traffic Tap

One of Linkerd Viz’s standout features is the ability to tap live traffic:

1
2
3
4
5
6
7
8
# Tap all requests to the webapp service
linkerd viz tap deploy/webapp -n production

# Filter by status code
linkerd viz tap deploy/webapp --to deploy/api --status 500

# JSON output for automation
linkerd viz tap deploy/webapp -o json | jq '.'

Consul Dashboard

GitHub: hashicorp/consul | Stars: ~29,000+ | License: BUSL-1.1 (open source, with commercial license available)

Consul’s built-in web UI provides observability for Consul service mesh deployments. While Consul is primarily known for service discovery and key-value storage, its mesh capabilities with Envoy sidecars are production-ready and come with a functional dashboard.

Key Features

  • Service catalog with health check status
  • Service mesh topology with intention (authorization policy) visualization
  • Key-value store browser and editor
  • Node health and membership monitoring
  • WAN federation status across datacenters
  • Built-in without additional components

Installation

Consul runs as a set of agents (server and client). The UI is included in the server binary:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# consul-server-config.json
{
  "datacenter": "dc1",
  "server": true,
  "bootstrap_expect": 1,
  "ui_config": {
    "enabled": true,
    "dashboard_url_templates": {
      "service": "https://grafana.example.com/d/service/{{.ServiceID}}",
      "node": "https://grafana.example.com/d/node/{{.NodeID}}"
    }
  },
  "connect": {
    "enabled": true,
    "ca_config": {
      "cluster_id": "consul-mesh"
    },
    "ca_provider": "consul"
  },
  "ports": {
    "http": 8500,
    "grpc": 8502
  }
}

Docker Compose deployment:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# docker-compose-consul.yml
version: "3.8"
services:
  consul-server:
    image: hashicorp/consul:1.18
    command: "agent -server -bootstrap-expect=1 -ui -client=0.0.0.0"
    ports:
      - "8500:8500"
      - "8600:8600/udp"
    volumes:
      - ./consul-server-config.json:/consul/config/server.json
      - consul-data:/consul/data

  consul-client:
    image: hashicorp/consul:1.18
    command: "agent -client -join=consul-server"
    environment:
      - CONSUL_BIND_ADDR=0.0.0.0
    depends_on:
      - consul-server

volumes:
  consul-data:
1
2
docker compose -f docker-compose-consul.yml up -d
# Access UI at http://localhost:8500

Comparison Table

FeatureKialiLinkerd VizConsul Dashboard
Mesh EngineIstio (Envoy)Linkerd (Linkerd2-proxy)Consul (Envoy)
Topology GraphRich, animatedBasicService catalog
Config ValidationYes (Istio resources)Limited (service profiles)Intentions only
Tracing IntegrationJaeger, TempoBuilt-in tapExternal only
Per-Route MetricsYesYesNo
Live Traffic TapNoYesNo
KV Store BrowserNoNoYes
Multi-DatacenterVia Istio multi-primaryVia Linkerd multiclusterNative WAN federation
InstallationHelm chartCLI extensionBuilt into server binary
Resource OverheadMedium (~500 MB)Low (~200 MB)Low (~150 MB)
LicenseApache-2.0Apache-2.0BUSL-1.1

Which Should You Choose?

Kiali is the most feature-rich dashboard, offering configuration validation, topology graphs, and tracing integration. If you’re running Istio, Kiali is the de facto standard and worth the additional resource overhead.

Linkerd Viz wins on simplicity. The linkerd viz dashboard command gives you instant access to per-route metrics and live traffic tapping. It’s lighter than Kiali and integrates more tightly with the control plane.

Consul Dashboard is best when you need service discovery AND service mesh in one package. The built-in UI covers health checks, service catalog, and KV store browsing. However, it lacks the deep mesh visualization of Kiali or Linkerd Viz.

Why Self-Host Your Service Mesh Observability?

Service mesh telemetry data reveals your entire application architecture — every service dependency, every communication pattern, every failure mode. Sending this data to a third-party observability SaaS gives vendors a complete map of your infrastructure.

Self-hosting keeps this sensitive topology data within your control. It also means your mesh dashboard remains available even during external service outages, and you avoid egress costs from shipping high-cardinality mesh metrics to external platforms.

For service identity and mTLS configuration, see our SPIFFE/SPIRE vs Istio vs Linkerd guide. For mutual TLS setup across your services, check our mTLS setup guide. If you’re managing API traffic through your mesh, our API firewall comparison covers Envoy-based security patterns.

FAQ

Can I use Kiali with Linkerd?

No. Kiali is designed specifically for Istio’s configuration model (VirtualServices, DestinationRules, Gateways). Linkerd uses a different configuration approach through ServiceProfiles and Linkerd CRDs. Use Linkerd Viz for Linkerd clusters.

Does Linkerd Viz require a separate Prometheus installation?

Linkerd Viz includes its own Prometheus instance by default. For production deployments, you can point it at an existing Prometheus installation to consolidate metrics storage and reduce resource usage.

Is Consul’s service mesh production-ready?

Yes. Consul service mesh uses Envoy sidecars and supports mTLS, traffic management, and intentions (authorization policies). The BUSL-1.1 license means it’s free for most uses but requires a commercial license for certain large-scale deployments.

Which dashboard uses the least resources?

Linkerd Viz is the lightest at ~200 MB RAM, followed by Consul Dashboard at ~150 MB. Kiali is the heaviest at ~500 MB due to its richer feature set and topology graph rendering.

Can I run multiple service meshes with their dashboards on the same cluster?

Technically yes, but it creates operational complexity and resource overhead. Most teams standardize on one mesh. If you need multi-mesh support, consider a platform like Kubefirst that can manage multiple mesh installations.

How does the live traffic tap in Linkerd Viz work?

Linkerd’s tap feature reads from the proxy’s debug endpoint, streaming live HTTP/gRPC requests in real-time. It shows request paths, status codes, latencies, and headers — similar to tcpdump but at the application layer with no packet capture overhead.