当前位置: 首页 > news >正文

专业二维码网站建设郑州知名做网站公司

专业二维码网站建设,郑州知名做网站公司,最炫的网站,什么是网页设计读书笔记为什么需要链路追踪? 我们程序员在日常工作中,最常做事情之一就是修bug了。如果程序只是运行在单机上,我们最常用的方式就是在程序上打日志,然后程序运行的过程中将日志输出到文件上,然后我们根据日志去推断程序是哪一…

为什么需要链路追踪?

我们程序员在日常工作中,最常做事情之一就是修bug了。如果程序只是运行在单机上,我们最常用的方式就是在程序上打日志,然后程序运行的过程中将日志输出到文件上,然后我们根据日志去推断程序是哪一步发生了问题。但是如果我们的程序是部署在分布式架构的各个服务上,我们再用这种方法去查看一个又一个日志文件,这就显得非常的低效了。所以这时候如果有一个可以帮助我们根据时间脉络将所有的信息都汇集起来并以可视化的方式直观展示给我们看,我们的bugfix是不是就变得事半功倍了呢?

一、什么是链路追踪?

链路追踪(Distributed Tracing)是一种用于监测和诊断分布式应用程序中请求路径的技术。在分布式系统中,单个请求可能会涉及多个服务和组件。链路追踪通过记录和分析请求在这些服务之间的传递路径和执行情况,帮助开发人员和运维团队理解系统的运行状况、性能和问题。

二、链路追踪是怎么实现的?

1.链路追踪关键概念介绍

  • Span(片段): 在链路追踪中,Span 是描述单个操作或事件的基本单元。一个请求被分解成一个或多个 Span,每个 Span 表示一个操作的开始和结束。例如,一个数据库查询、一个 HTTP 请求、一个函数调用等都可以作为一个 Span。
  • Context(上下文): 在链路追踪中,上下文是指跨越不同服务的信息传递。每个 Span 都关联一个上下文,允许跟踪系统将相关的 Span 连接起来,以显示请求的完整路径。
  • Trace ID(追踪标识)Trace ID 是整个请求路径的唯一标识符。它用于将整个请求的所有 Span 关联到同一个 Trace 中。当一个请求进入系统时,生成一个唯一的 Trace ID,并在整个请求过程中一直保持不变,以确保所有的 Span 都能够关联到同一个 Trace 中
  • Span ID(Span 标识): Span ID 是用于标识单个操作或事件的唯一标识符。每个 Span 都有自己的 Span ID,它用于在 Trace 中标识不同的操作或事件。

2.span是怎么基于context进行关联的?

由上面的概念我们大概可以想象到,一条追踪链路其实是由多个span组成的,而span之间是基于每一个span的context进行关联 (即根据context里的同一个trace id进行关联)

在这里插入图片描述

三、OpenTelemetry、Jaeger这些和链路追踪有什么关系?

  • OpenTelemetry 是一个用于跟踪和监控分布式系统的开放式标准和工具集。它提供了一套标准的API 和工具,用于生成、导出和聚合跟踪数据,并将这些数据发送到各种后端,如 Jaeger、Zipkin、Prometheus 等。
  • Jaeger这些系统为链路追踪提供了一种可视化和分析分布式系统的能力,通过记录请求的执行路径和操作(span),在一个直观的用户界面中展示整个系统中的请求传播路径和性能数据。

四、怎么快速使用OpenTelemetry、Jaeger实现一个链路追踪的demo

  • 步骤1:需要安装Jaeger,并运行Jaeger。Jaeger官方入门文档
    为了快速演示,我们可以使用官方推荐的测试方式用docker快速启动:
    docker run --rm --name jaeger \-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \-p 6831:6831/udp \-p 6832:6832/udp \-p 5778:5778 \-p 16686:16686 \-p 4317:4317 \-p 4318:4318 \-p 14250:14250 \-p 14268:14268 \-p 14269:14269 \-p 9411:9411 \jaegertracing/all-in-one:1.51
    
    然后,打开http://localhost:16686就可以访问 Jaeger UI了。
  • 步骤2:运行下面代码,具体代码请拉取我github上的demo
package mainimport ("context""fmt""log""net/http""go.opentelemetry.io/otel"`go.opentelemetry.io/otel/attribute`"go.opentelemetry.io/otel/exporters/trace/jaeger"`go.opentelemetry.io/otel/sdk/resource`sdktrace "go.opentelemetry.io/otel/sdk/trace"`go.opentelemetry.io/otel/semconv`svc `otel/demo1/svc`
)// 初始化 OpenTelemetry
func initTracer() *sdktrace.TracerProvider {exporter, err := jaeger.NewRawExporter(jaeger.WithAgentEndpoint(func(options *jaeger.AgentEndpointOptions) {options.Host = "localhost"options.Port = "6831"}),)if err != nil {log.Fatalf("Error creating Jaeger exporter: %v", err)}tp := sdktrace.NewTracerProvider(sdktrace.WithBatcher(exporter),sdktrace.WithSampler(sdktrace.AlwaysSample()),sdktrace.WithResource(resource.NewWithAttributes(semconv.ServiceNameKey.String("demo_service"), // 服务名)),)otel.SetTracerProvider(tp)return tp
}func main() {tp := initTracer()defer func() {if cerr := tp.Shutdown(context.Background()); cerr != nil {log.Fatalf("Error shutting down tracer provider: %v", cerr)}}()//启动http服务器http.HandleFunc("/demo", handleRequest)go func() {if err := http.ListenAndServe(":8080", nil); err != nil {log.Fatalf("Error starting Service A server: %v", err)}}()//模拟请求SimulateRequest()
}func handleRequest(w http.ResponseWriter, req *http.Request) {tracer := otel.Tracer("root")//开始创建root spanctx, span := tracer.Start(req.Context(), "span root")defer span.End()//可以在span上记录一些信息,例如日志、请求参数、sql语句等span.SetAttributes(attribute.String("some root service info", "This is the root service"),)//访问服务Asvc.CallServiceA(ctx)//访问服务Bsvc.CallServiceB(ctx)w.WriteHeader(http.StatusOK)fmt.Fprintf(w, "Response from Service Root")
}func SimulateRequest()  {req, err := http.NewRequest("GET", "http://localhost:8080/demo", nil)if err != nil {log.Fatalf("Creating request fail: %v", err)}resp, err := http.DefaultClient.Do(req)if err != nil {log.Fatalf("Request failed: %v", err)}defer resp.Body.Close()fmt.Println("Response received from Root Service")
}

运行后打开http://localhost:16686,选择对应的service查找trace可以看到
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五、总结

  1. 链路追踪是依靠于一个随机生成的trace_id,一条链路对应唯一一个trace_id。
  2. Span 是描述单个操作或事件的基本单元。一个请求被分解成一个或多个 Span。即一条链路是由多个span组成的。
  3. 在链路追踪中,context(上下文)是指跨越不同服务的信息传递。每个 Span 都关联一个上下文。
  4. OpenTelemetry 是一个用于跟踪和监控分布式系统的开放式标准和工具集。提供了一套标准的API 和工具,用于生成、导出和聚合跟踪数据,并将这些数据发送到各种后端。
  5. Jaeger、Zipkin、Prometheus等这些可以接收OpenTelemetry发送过来的数据,可以提供可视化的展示和分析数据的能力。
http://www.yayakq.cn/news/119175/

相关文章:

  • 个人备案的网站 做企业站企业网络贷款平台
  • 网站更改了资料 百度什么时侯来抓取外贸网站建设模板下载
  • 织梦 网站首页帝国后台网站如何设置自动刷新首
  • 美橙互联 网站备案拍照浏览器打不开二级网页
  • mvc 网站 只列出目录信息发布平台推广
  • 做推广用那个网站吗wordpress数据库删除所有评论
  • 专业网站制作公司采用哪些技术制作网站?鹤岗市城乡建设局网站
  • 优酷视频网站源码设计网站首页多少钱
  • 网站推广过程叙述东莞短视频推广方法
  • 什么网站备案容易审核点读软件网站建设
  • 深圳建科技有限公司网站首页.wordpress
  • 网站建设外包需要多少钱住房建设部官方网站命令
  • 设置网站404页面江苏财经职业技术学院会计系示范校建设专题网站
  • 先备案先建网站ae模板下载网站推荐
  • 网站建设优化兼职大连网站建设选高和科技
  • 张家界网站建设app做网站推广的工作内容
  • 找个做游戏的视频网站好seo网站关键词优化多少钱
  • 朝阳网站建设是什么高端网站建设网络设计互联网信息化服务类
  • 做二手平台公益的网站厦门百度竞价开户
  • 洛阳霞光建设网站一个网站怎么做后台
  • 做广个公司网站权重凡科互动下载
  • 重庆网站设计定制百度网站登录
  • wordpress 站点语言企业建设网站价格单
  • c 能做网站如何用手机建设网站
  • cms网站管理电商网站建设网
  • 网站建设和源代码问题html制作简单个人主页代码
  • 成都模版网站制作网站流量来源
  • 网站优化方案ppt网络维护公司需要什么资质
  • 网站开发的后期维护wordpress 内容
  • 网站首页地址 网站域名怎么在word里做网站