微服务的精灵:Jaeger在K8S中,为你描绘分布式应用的魔法图谱!

微服务的精灵:Jaeger在K8S中,为你描绘分布式应用的魔法图谱!

jaeger简介

jaeger是Uber推出的一款调用链追踪系统,类似于Zipkin和Dapper,为微服务调用追踪而生。其主要用于多个服务调用过程追踪分析,图形化服务调用轨迹,便于快速准确定位问题。
Jaeger组成 前端界面展示UI 数据存储Cassandra或Elasticsearch 数据查询Query 数据收集处理Collector 客户端代理Agent
Jaeger服务之间关系

微服务的精灵:Jaeger在K8S中,为你描绘分布式应用的魔法图谱!
14861799-bcfd4ac7a7493867.webp

整体上讲,一个基础的 Jaeger 追踪系统包含下面几个部分:

  • • jaeger-query: 用于客户端查询和检索组件,并包含了一个基础的 UI

  • • jaeger-collector: 接收来自 jaeger-agent 的 trace 数据,并通过处理管道来执行。当前的处理管道包含验证 trace 数据,创建索引,执行数据转换以及将数据存储到对应的后端

  • • jaeger-agent: 一个网络守护进程,侦听通过 UDP 发送的 spans ,它对其进行批处理并发送给收集器。它被设计为作为基础设施组件部署到所有主机。代理将收集器的路由和发现从客户机抽象出来

  • • backend-storage: 用于指标数据存储的可插拔式后端存储,支持 Cassandra, Elasticsearch and Kafka

  • • ingester: 可选组件,用于从 kafka 中消费数据并写入到可直接读取的 Cassandra 或 Elasticsearch 存储中

注意: trace 和 span 是链路追踪系统中的专业属于,span 就表示具体的一个工作单元,并且包含了该单元的元数据比如具体是什么操作,执行的时间等等,而 trace 是通过整个系统的数据路径,可以被认为是将 Spans 组成一个有向无环图 (DAG) 而对于一个多组件系统来说,也存在多个网络端口用于数据的传输,下图即为各个组件的端口用途:

背景

Kubernetes 已经成为整个云原生公认的基础设施了,随着互联网业务的快速发展,越来越多的业务会在一开始就选择使用云原生的方式进行开发和交付,而 Helm 就是整个过程中用来交付环境的工具,就好比在过去,我们会将各个业务打包成 tar 包或者 RPM 包,然后交付到不同环境进行部署。而云原生应用天然的分布式和微服务特性会使得我们在业务运行过程中很难洞察到业务问题,对于 SRE 来讲,就无从谈起可用性和稳定性问题了。因此,对于云原生系统而言,一个可靠的分布式应用监控以及链路追踪系统就显得尤为重要了。当然,类似的分布式应用监控和追踪系统也有很多,比如 SkyWalingZipkinCatPinpoint 。而工作中使用到了 Jaeger 以及对 Golang 语言相对而言比较熟悉,从而有了本篇文章。

微服务的精灵:Jaeger在K8S中,为你描绘分布式应用的魔法图谱!
image.png

安装jaeger

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jaegertracing-all-in-one
  namespace: jaeger
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jaegertracing-all-in-one
  template:
    metadata:
      labels:
        app: jaegertracing-all-in-one
    spec:
      containers:
      - name: jaeger-all-in-one
        image: jaegertracing/all-in-one
        ports:
        - containerPort: 5775
          protocol: UDP
        - containerPort: 6831
          protocol: UDP
        - containerPort: 6832
          protocol: UDP
        - containerPort: 5778
          protocol: TCP
        - containerPort: 16686
          protocol: TCP
        - containerPort: 14268
          protocol: TCP
        - containerPort: 9411
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: jaeger-service
  namespace: jaeger
  labels:
    app: jaegertracing-all-in-one
spec:
  type: NodePort
  selector:
    app: jaegertracing-all-in-one
  ports:
  - port: 16686
    targetPort: 16686
    nodePort: 32686
    name: jaegerservice
  - port: 6831
    targetPort: 6831
    nodePort: 41957
    name: upd-6831
    protocol: UDP
微服务的精灵:Jaeger在K8S中,为你描绘分布式应用的魔法图谱!

注意:默认我们没有应用的数据采集,因此看不到任何链路相关的数据,其实可以看到,我们上面也部署了一个测试程序,它是一个简单但却完整的程序

微服务的精灵:Jaeger在K8S中,为你描绘分布式应用的魔法图谱!

微服务的精灵:Jaeger在K8S中,为你描绘分布式应用的魔法图谱!


原文始发于微信公众号(背带裤的云原生):微服务的精灵:Jaeger在K8S中,为你描绘分布式应用的魔法图谱!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/219027.html

(0)
青莲明月的头像青莲明月

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!