前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用istio结合skywalking进行链路追踪

使用istio结合skywalking进行链路追踪

作者头像
有点技术
发布2021-06-25 21:40:23
4.3K1
发布2021-06-25 21:40:23
举报
文章被收录于专栏:有点技术有点技术

在最新的istio代码里实现了Telemetry API,引入了Telemetry CRD,从而可以更友好的配置istio Telemetry

构建istio

在目前代码里根据我的测试有些问题,skywalking进行trace需要设置StartChildSpan: true,

修改pilot/pkg/xds/filters/filters.go代码

代码语言:javascript
复制
    Router = &hcm.HttpFilter{        Name: wellknown.Router,        ConfigType: &hcm.HttpFilter_TypedConfig{            TypedConfig: util.MessageToAny(&router.Router{                StartChildSpan: true,            }),        },    }

拉取istio代码,构建最新版本istiod 镜像

代码语言:javascript
复制
git clone https://github.com/istio/istiocd istiomake docker

配置安装istio

获取default profile的配置

代码语言:javascript
复制
istioctl profile dump default > config.yaml

在meshconfig中配置

代码语言:javascript
复制
    extensionProviders:    - skywalking:        service: skywalking-oap.skywalking.svc.cluster.local        port: 11800      name: envoy.tracers.skywalking

Telemetry

创建Telemetry配置 引用extensionProviders配置

代码语言:javascript
复制
apiVersion: telemetry.istio.io/v1alpha1kind: Telemetrymetadata:  name: mesh-default  namespace: istio-systemspec:  tracing:  - customTags:      my_new_foo_tag:        literal:          value: foo    providers:    - name: envoy.tracers.skywalking    randomSamplingPercentage: 100

编写测试程序

代码语言:javascript
复制
package mainimport (    "io/ioutil"    "log"    "net/http"    "os")var target string = ""func main() {    log.SetFlags(log.Lshortfile)    if len(os.Args) > 1 {        target = os.Args[1]    }    http.HandleFunc("/", gethandler)    err := http.ListenAndServe(":9002", nil)    if err != nil {        log.Println(err)    }}var headersToCopy = []string{    "sw8",}func gethandler(w http.ResponseWriter, r *http.Request) {    client := &http.Client{}    if target != "" {        req, err := http.NewRequest("GET", target, nil)        if err!=nil {            return        }        for _, h := range headersToCopy {            val := r.Header.Get(h)            if val != "" {                req.Header.Set(h, val)            }        }        resp, err := client.Do(req)        if err != nil {            w.Write(nil)            return        }        result, err := ioutil.ReadAll(resp.Body)        if err != nil {            w.Write(nil)            return        }        w.Write([]byte(result))    }else {        w.Write([]byte("hello world"))    }}

创建三个deployment,串行调用

代码语言:javascript
复制
apiVersion: apps/v1kind: Deploymentmetadata:  name: demo  namespace: defaultspec:  selector:    matchLabels:      app: demo  template:    metadata:      labels:        app: demo    spec:      containers:        - args:            - http://demo1:9002          image: xxx/library/swdemo:v1          imagePullPolicy: Always          name: demo---apiVersion: apps/v1kind: Deploymentmetadata:  name: demo1  namespace: defaultspec:  selector:    matchLabels:      app: demo1  template:    metadata:      labels:        app: demo1    spec:      containers:        - args:            - http://demo2:9002          image: xxx/library/swdemo:v1          imagePullPolicy: Always          name: demo1---apiVersion: apps/v1kind: Deploymentmetadata:  name: demo2  namespace: defaultspec:  selector:    matchLabels:      app: demo2  template:    metadata:      labels:        app: demo2    spec:      containers:        - image: xxx/library/swdemo:v1          imagePullPolicy: Always          name: demo2

创建svc

代码语言:javascript
复制
kubectl expose deploy demo --port=9002 --target-port=9002kubectl expose deploy demo1 --port=9002 --target-port=9002kubectl expose deploy demo2 --port=9002 --target-port=9002

效果

通过gateway调用demo,查看skywalking ui

调用链路

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 有点技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 构建istio
  • 配置安装istio
  • Telemetry
  • 编写测试程序
  • 效果
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档