go-zero接入skywalking链路追踪

2024-08-24 05:28

本文主要是介绍go-zero接入skywalking链路追踪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Skywalking本地测试搭建
  • 项目引入
  • dockerfile打包引入
  • 最后效果图

Skywalking本地测试搭建

这里用Docker搭建

#数据存储用ES,搭建ES
docker run -d -p 9200:9200 -p 9300:9300 --name es -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx256m" elasticsearch:7.16.3# 搭建skywalking-oap服务,这里用的是8.9.1版本,oap服务需要关联ES
docker run --name skywalking-oap \
--restart always \
-p 11800:11800 -p 12800:12800 -d \
-e TZ=Asia/Shanghai \
-e SW_ES_USER= \
-e SW_ES_PASSWORD= \
-e SW_STORAGE=elasticsearch \
-e SW_STORAGE_ES_CLUSTER_NODES=192.168.1.234:9200 \
-v /etc/localtime:/etc/localtime:ro \
apache/skywalking-oap-server:8.9.1# 搭建skywalking-ui界面,需要关联oap服务
docker run -d \
--name skywalking-ui \
--restart always \
-p 8090:8080 \
--link skywalking-oap:skywalking-oap \
-e TZ=Asia/Shanghai \
-e SW_OAP_ADDRESS=http://skywalking-oap:12800 \
-v /etc/localtime:/etc/localtime:ro \
apache/skywalking-ui:8.9.1

搭建完成,打开ip:8090查看skywalking界面
在这里插入图片描述

项目引入

go get github.com/apache/skywalking-go//在main包中引入
import (_ "github.com/apache/skywalking-go"
)

接下来,请从官方 SkyWalking 网站下载Go Agent 程序 。当你使用 go build 命令进行编译时,请在 bin 目录中找到与当前操作系统匹配的代理程序,并添加 -toolexec=“/path/to/go-agent” -a 参数。例如,请使用以下命令:

go build -toolexec=“/path/to/go-agent” -a -o test .

在skywalking-go/bin路径下生成可执行文件。
不同的操作系统对应的可执行文件不同。例如,mac系统需选择skywalking-go-agent–darwin-amd64。(亲测相应文件在window系统执行会报错,在linux和mac系统正常)
在这里插入图片描述

dockerfile打包引入

相应的Agent程序skywalking-go-agent放在项目./doc/tool/目录下,并设置环境变量,具体看dockerfile

ENV SW_AGENT_NAME=go-${param}
ENV SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE=skywalking-oap.skywalking.svc.cluster.local:11800
ENV SW_AGENT_REPORTER_GRPC_CDS_FETCH_INTERVAL=-1
FROM golang:1.22-alpine AS builderLABEL stage=gobuilderENV GOPROXY https://goproxy.cn,direct
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositoriesRUN apk update --no-cache && apk add --no-cache tzdata# 设置工作目录
WORKDIR /build# 加载依赖
ADD go.mod .
ADD go.sum .
RUN go mod download# 复制源代码
COPY . .# 静态编译Go程序
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -toolexec="/build/doc/tool/skywalking-go-agent" -a -o app ./service/${struct_name}Service/${param}.go# 第二阶段:运行时镜像,使用空镜像scratch或者alpine
FROM alpineCOPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt# 设置工作目录
WORKDIR /app# 复制编译好的二进制文件到运行时镜像
COPY --from=builder /build/app .
COPY --from=builder /build/i18n /app/i18n
COPY --from=builder /build/key/google_play_service_account_key.json /etc/ssl/certs/google_play_service_account_key.json
COPY --from=builder /build/key/SubscriptionKey_23HSTRGFC3.p8 /etc/ssl/certs/SubscriptionKey_23HSTRGFC3.p8# 设置 SkyWalking Agent 的配置
ENV SW_AGENT_NAME=go-${param}
ENV SW_AGENT_REPORTER_GRPC_BACKEND_SERVICE=skywalking-oap.skywalking.svc.cluster.local:11800
ENV SW_AGENT_REPORTER_GRPC_CDS_FETCH_INTERVAL=-1# 运行程序
ENTRYPOINT ["./app"]
# 设置CMD指令来指定参数,默认测试环境的etcd
CMD ["16.162.220.93:2379"]

最后效果图

在这里插入图片描述

这篇关于go-zero接入skywalking链路追踪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101574

相关文章

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

PyCharm 接入 DeepSeek最新完整教程

《PyCharm接入DeepSeek最新完整教程》文章介绍了DeepSeek-V3模型的性能提升以及如何在PyCharm中接入和使用DeepSeek进行代码开发,本文通过图文并茂的形式给大家介绍的... 目录DeepSeek-V3效果演示创建API Key在PyCharm中下载Continue插件配置Con

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英