第 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 文件),如控制平面、工作负载、服务等视图。

图 1: Grafana 主页
图 1: Grafana 主页

导入与查看 Istio Dashboard

通过 ConfigMap 导入 Dashboard 后,Grafana 会自动识别并展示。点击 Home 菜单可选择 Istio Control Plane Dashboard、Istio Service Dashboard 等,分别查看控制平面和服务的关键指标。

图 2: 控制平面 Dashboard
图 2: 控制平面 Dashboard
图 3: 控制平面指标图
图 3: 控制平面指标图

服务层面可选择具体服务(如 webapp.istioinaction),查看请求量、延迟、错误率等指标。

图 4: webapp 服务 Dashboard
图 4: webapp 服务 Dashboard

分布式追踪与 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 的详细信息。

图 5: Jaeger 追踪界面
图 5: Jaeger 追踪界面

可通过 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,便于一站式排障
图 6: Kiali 总览仪表板
图 6: Kiali 总览仪表板
图 7: Kiali 服务拓扑图
图 7: Kiali 服务拓扑图

总结

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

参考文献

  1. Istio 官方文档 - istio.io
  2. Grafana 官方文档 - grafana.com
  3. Jaeger 分布式追踪 - jaegertracing.io
  4. Kiali 官方文档 - kiali.io
  5. OpenTelemetry 规范 - opentelemetry.io

文章导航

独立页面

这是书籍中的独立页面。

书籍首页

评论区