skywalking-go 原理剖析

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 本文代码示例基于 skywalking-go v0.3.0 1. 引言 apache/skywalking-go 的内部实现比较复杂,本文针对几个核心的点进行展开,以便于大家更好的阅读和理解。 2.TracingID生成 详细参考代码 id.go skywalking-go中的TraceID形如: “ab95670cae9d11ee87ca5626e1cdcfe2.14.39165238789840005” 一共由4部分组成: 1)uuid 使用uuid version1 2)goroutine ID,golang协程ID 3)timestamp 自1900年以来的毫秒值 4)sequence, 从0 ~ 10000 3. 跨协程传递Tracing信息 在没有skywalking-go的情况下,如果想在多个协程中传递Tracing信息, 开发者必须要用到context。使用skywalking-go之后,很多细节,开发者无需关心。 下面是一个在gin中使用多协程的示例,完整代码见参考资料2 r.GET("/ping", func(c *gin.Context) { g, _ := errgroup.WithContext(context.Background()) g.Go(func() error { val, err := rdb.Incr(context.Background(), "helloCounter2").Result() zlog.Info("ping", zap.Int64("val", val), zap.Error(err)) return nil }) g.Go(func() error { hsetRes, err := rdb.HSet(context.Background(), "xyz", "def", 0).Result() zlog.Info("ping", zap.Int64("setRes", hsetRes), zap.Error(err)) return nil }) c.JSON(http.StatusOK, gin.H{ "message": "pong", }) }) ...

January 10, 2024 · 2 min

apache/skywalking-go 源码分析

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc apache/skywalking-go 源码分析 参考资料 1.劫持 Golang 编译 2.SkyWalking Go Agent 快速开始指南 3.support-plugins 4.Hybrid Compilation 5.Key Principle 6.通过SkyWalking上报Go应用数据 1. 前言 Skywalking是什么? Skywalking 是一个开源的应用性能监控工具,它专注于分布式系统架构中的性能监控和故障排查。 它能够跟踪分布式系统中的请求流,并提供实时的性能指标、调用链追踪、错误分析等功能。 使用 Skywalking 可以帮助开发人员和运维团队更好地理解应用程序的性能特征, 并快速定位和解决潜在的性能问题和故障。 几年前,当我最开始知道Skywalking的时候,它似乎只支持Java,它给我的最大的惊喜时,是直接使用字节码注入的方式来实现埋点, 减少开发人员埋点的工作量,且代码几乎无侵入。 2023年上半年,Skywalking推出一个全新的Go Agent skywalking-go。 它基于Golang build提供的-toolexec参数,实现了编译期劫持,也达到了在对代码几乎无侵入的情况下,实现埋点。 截止2023年12月1日,已经有大量的库得到了支持。参看support-plugins 日志库 zap、logrus 数据库Client gorm、sql HTTP Server gin、http HTTP Client http RPC框架 gRPC 它是如何做到代码几乎无入侵埋点的呢?本文试图解答这个问题 2. skywalking-go实现埋点 关于skywalking-go的使用参看SkyWalking Go Agent 快速开始指南 skywalking-go实现埋点主要依靠在golang build编译阶段的编译劫持。 go build -toolexec="/myopt/bin/skywalking-go-agent" -x -work -a -o test . 这里我们增加了2个额外参数 -x:这个标志告诉 Go 打印它执行的命令。 -work:这个标志告诉 Go 打印临时工作目录的名称,并在退出时不删除它。 ...

December 4, 2023 · 3 min