第 8 章:可观测性 - 使用 Grafana、Jaeger 和 Kiali 观察网络行为
本文梳理了 Istio 服务网格可观测性的可视化与追踪实践,涵盖 Grafana、Jaeger、Kiali 等工具的集成与使用,帮助读者高效洞察服务流量与网络行为。
使用 Grafana 可视化 Istio 指标
在实际生产环境中,推荐使用 kube-prometheus 方案部署 Prometheus 和 Grafana。安装完成后,可通过端口转发访问 Grafana:
kubectl -n Prometheus port-forward svc/prom-grafana 3000:80
默认用户名为 admin
,密码为 prom-operator
。登录后可在 Home 菜单导入 Istio 官方或社区维护的 Dashboard(JSON 文件),如控制平面、工作负载、服务等视图。

导入与查看 Istio Dashboard
通过 ConfigMap 导入 Dashboard 后,Grafana 会自动识别并展示。点击 Home 菜单可选择 Istio Control Plane Dashboard、Istio Service Dashboard 等,分别查看控制平面和服务的关键指标。
服务层面可选择具体服务(如 webapp.istioinaction),查看请求量、延迟、错误率等指标。

分布式追踪与 Jaeger 集成
分布式追踪用于分析请求在多服务间的流转路径和耗时。Istio 支持自动注入追踪头(如 x-b3-traceid),并将 Span 数据发送到 Jaeger、Zipkin 等后端。
Jaeger 部署与配置
可通过 Istio samples/addons 目录快速部署 Jaeger:
kubectl apply -f istio-1.13.0/samples/addons/jaeger.yaml
配置 Istio 使用 Jaeger(Zipkin 兼容)作为追踪后端:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
defaultConfig:
tracing:
zipkin:
address: zipkin.istio-system:9411
追踪头传递与采样率
应用需确保传递 x-request-id、x-b3-traceid 等追踪头,才能完整还原调用链。采样率可通过 MeshConfig 或注解配置,支持全局和工作负载级别调整:
tracing:
sampling: 10 # 采样率 10%
zipkin:
address: zipkin.istio-system:9411
查看追踪数据
通过端口转发访问 Jaeger UI:
istioctl dashboard jaeger --browser=false
# 浏览器访问 http://localhost:16686
选择服务(如 istio-ingressgateway),可查看请求的 Trace 及各 Span 的详细信息。

可通过 x-envoy-force-trace 头强制采集特定请求的追踪:
curl -H "x-envoy-force-trace: true" -H "Host: webapp.istioinaction.io" http://localhost/api/catalog
自定义追踪标签
可为 Span 添加自定义标签,便于后续检索与分析:
tracing:
customTags:
custom_tag:
literal:
value: "Test Tag"
Kiali:服务网格可视化与拓扑分析
Kiali 是专为 Istio 设计的服务网格可视化工具,依赖 Prometheus 和 Jaeger,支持实时流量拓扑、健康状态、指标与追踪的关联展示。
安装与集成
推荐通过 Kiali Operator 安装:
kubectl create ns kiali-operator
helm install --set cr.create=true --set cr.namespace=istio-system \
--namespace kiali-operator --repo https://kiali.org/helm-charts \
--version 1.40.1 kiali-operator kiali-operator
创建 Kiali 实例并配置 Prometheus、Jaeger 集成:
apiVersion: kiali.io/v1alpha1
kind: Kiali
metadata:
namespace: istio-system
name: kiali
spec:
external_services:
prometheus:
url: "http://prom-kube-prometheus-stack-prometheus.prometheus:9090"
tracing:
enabled: true
in_cluster_url: "http://tracing.istio-system:16685/jaeger"
使用 Kiali 观测服务网格
端口转发后访问 Kiali UI:
kubectl -n istio-system port-forward deploy/kiali 20001
# 浏览器访问 http://localhost:20001
Kiali 支持:
- 命名空间与应用健康总览
- 实时流量拓扑图,展示服务间调用关系
- 工作负载、服务、应用的详细指标与追踪
- 关联 Trace、Metrics、Logs,便于一站式排障


总结
- Istio 可通过 Prometheus、Grafana、Jaeger、Kiali 等工具实现服务网格的全方位可观测性。
- Grafana 适合指标可视化,Jaeger 用于分布式追踪,Kiali 聚焦于流量拓扑与多维数据关联。
- 应用需配合传递追踪头,合理设置采样率与自定义标签,提升追踪与排障效率。
- 推荐结合实际场景灵活集成各类可观测性工具,构建高效的服务治理体系。
参考文献
- Istio 官方文档 - istio.io
- Grafana 官方文档 - grafana.com
- Jaeger 分布式追踪 - jaegertracing.io
- Kiali 官方文档 - kiali.io
- OpenTelemetry 规范 - opentelemetry.io