使用Zipkin进行分布式追踪

概述

分布式追踪可以让用户对跨多个分布式服务网格的 1 个请求进行追踪分析。 进而可以通过可视化的方式更加深入地了解请求的延迟,序列化和并行度。Istio 利用 Envoy 的分布式追踪功能提供了开箱即用的追踪集成。 确切地说,Istio 提供了安装各种追踪后端服务的选项,并且通过配置代理来自动发送追踪 Span 到分布式追踪系统服务。

尽管 Istio 代理能够自动发送 Span,但需要一些附加信息才能将这些 Span 加到同一个调用链。 所以当代理发送 Span 信息的时候,应用程序需要附加适当的 HTTP 请求头信息,这样才能够把多个 Span 加到同一个调用链。

要做到这一点,每个应用程序必须从每个传入的请求中收集请求头,并将这些请求头转发到传入请求所触发的所有传出请求。 具体选择转发哪些请求头取决于所配置的跟踪后端。要转发到请求头的设置在每个追踪系统特定的任务页面进行说明。 以下是一个汇总:

所有应用程序必须转发以下请求头:

x-request-id:这是 Envoy 专用的请求头,用于对日志和追踪进行一致的采样。
对于 Zipkin、Jaeger、Stackdriver 和 OpenCensus Agent,应转发 B3 多请求头格式:

  • x-b3-traceid
  • x-b3-spanid
  • x-b3-parentspanid
  • x-b3-sampled
  • x-b3-flags
    这些是 Zipkin、Jaeger、OpenCensus 和许多其他工具支持的请求头。

部署zipkin

使用yaml快速部署,仅用于演示,没有针对性能或安全性进行调优。

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/addons/extras/zipkin.yaml

file

Zipkin 安装完成后,您需要指定 Istio 代理用来向 Deployment 发送追踪数据。可以在安装时候可以通过配置参数 --set values.global.tracer.zipkin.address=<zipkin-collector-address>:9411 指定。

部署bookinfo

所有的微服务都和 Envoy Sidecar 集成在一起,被集成服务所有的出入流量都被 Sidecar 所劫持, 这样就为外部控制准备了所需的 Hook,然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。
file

开启自动注入

kubectl label namespace default istio-injection=enabled

部署应用

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
# 如果禁用了自动注入,选择手动注入的话,命令如下:
kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)

查看应用

file

测试应用

kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"

file

部署网关

我这里没有loadbalancer,选择使用istio APIs来创建。

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

file

确定网关ip和端口。ip就是主机ip,端口是istio-ingressgateway的http2端口,即上面图中的31469端口。

从集群外部访问服务

curl -s "http://172.16.255.183:31469/productpage" | grep -o "<title>.*</title>"

file

网页访问:

file

file

访问dashboard

istioctl dashboard zipkin

相当于kubectl proxy,不过无法访问,需要修改zipkin的svc为nodePort,修改后,再次访问。

file

file

使用bookinfo产生trace

当 Bookinfo 应用程序启动并运行时,访问 http://$GATEWAY_URL(172.16.255.183:31469)/productpage 一次或多次以生成追踪信息。

要查看追踪数据,必须向服务发送请求。请求的数量取决于 Istio 的采样率。 采样率在安装 Istio 时设置,默认采样速率为 1%。在第一个跟踪可见之前,您需要发送至少 100 个请求。

这个值可以进行修改:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    defaultConfig:
      tracing:
        sampling: 50

或者可以在deployment中使用proxy.istio.io/config

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sleep
spec:
  ...
  template:
    metadata:
      ...
      annotations:
        ...
        proxy.istio.io/config: |
          tracing:
            sampling: 10
            custom_tags:
              my_tag_header:
                header:
                  name: host
    spec:
      ...

详情参考:https://istio.io/latest/zh/docs/tasks/observability/distributed-tracing/mesh-and-proxy-config/
https://istio.io/latest/zh/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig

使用以下命令向 productpage 服务发送 100 个请求:

for i in `seq 1 100`; do curl -s -o /dev/null http://172.16.255.183:31469/productpage; done

打开zipkin,在搜索面板中,点击 “+” 号,从第一个下拉列表中选择 serviceName,从第二个下拉列表中选择 productpage.default,再点击搜索图标:

file

file

点击 ISTIO-INGRESSGATEWAY 的搜索结果,查看与之对应的最新的 /productpage 请求的详细信息:

file

追踪由一组 Span 组成,其中每个 Span 对应一个 Bookinfo Service,这些服务在执行 /productpage 请求或 Istio 内部组件时被调用,例如:istio-ingressgateway。

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
3
0
希望看到您的想法,请您发表评论x