You need to enable JavaScript to run this app.
文档中心
应用性能监控全链路版

应用性能监控全链路版

复制全文
下载 pdf
CloudWeGo 集成
Kitex 接入
复制全文
下载 pdf
Kitex 接入
Kitex 字节跳动开源的 Go 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部已广泛使用。​
通过OpenTelemetry接入​
步骤一:初始化 Kitex​
Kitex 以中间件的方式,集成 opentelemetry sdk,默认支持生成、上报链路和指标数据至 apmplus 服务端。​
关于日志数据上报,目前 kitex 没有默认集成,不过可以通过一些社区的拓展日志库进行集成,在服务端接入中提供了 otelLogger 代码参考示例。​
运行示例代码所需的 hello.thrift 源文件及其生成代码可以在 cloudwego/kitex-examples 仓库中获取,下文主要提供核心的观测 Opentelemetry 集成部分的代码。​
服务端接入:​
​
package main​
​
import (​
"context"​
"log"​
"log/slog"​
​
api "github.com/cloudwego/kitex-examples/hello/kitex_gen/api/hello"​
"github.com/cloudwego/kitex/server"​
"github.com/kitex-contrib/obs-opentelemetry/provider"​
"github.com/kitex-contrib/obs-opentelemetry/tracing"​
"go.opentelemetry.io/contrib/bridges/otelslog"​
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"​
"go.opentelemetry.io/otel/log/global"​
sdklog "go.opentelemetry.io/otel/sdk/log"​
)​
​
var otelLogger *slog.Logger​
​
func main() {​
ctx := context.Background()​
// 1. 初始化 otel provider​
p := provider.NewOpenTelemetryProvider(​
provider.WithInsecure(),​
)​
defer p.Shutdown(ctx)​
​
svr := api.NewServer(​
new(HelloImpl),​
// 2. 初始化 tracing 中间件​
server.WithSuite(tracing.NewServerSuite()),​
)​
​
// 3. 初始化 otel log provider​
lp := initLog(ctx)​
defer lp.Shutdown(ctx)​
​
// 4. 使用第三方 logger 打印日志,日志会自动上报至后台服务​
otelLogger.Info("init logger successfully")​
​
err := svr.Run()​
if err != nil {​
log.Println(err.Error())​
}​
}​
​
func initLog(ctx context.Context) *sdklog.LoggerProvider {​
logExporter, err := otlploggrpc.New(ctx, otlploggrpc.WithInsecure())​
if err != nil {​
panic("failed to initialize exporter")​
}​
​
lp := sdklog.NewLoggerProvider(​
sdklog.WithProcessor(​
sdklog.NewSimpleProcessor(logExporter),​
),​
)​
​
global.SetLoggerProvider(lp)​
​
// init otelLogger, then use it directly anywhere in your app to record your log, and the​
// log content will be sent to apmplus backend.​
otelLogger = otelslog.NewLogger("slog")​
return lp​
}​
​
客户端接入:​
​
package main​
​
import (​
"context"​
"log"​
"time"​
​
"github.com/cloudwego/kitex-examples/hello/kitex_gen/api"​
"github.com/cloudwego/kitex-examples/hello/kitex_gen/api/hello"​
"github.com/cloudwego/kitex/client"​
"github.com/kitex-contrib/obs-opentelemetry/provider"​
"github.com/kitex-contrib/obs-opentelemetry/tracing"​
)​
​
func main() {​
ctx := context.Background()​
// 1. 初始化 otel provider​
p := provider.NewOpenTelemetryProvider(​
provider.WithInsecure(),​
)​
defer p.Shutdown(ctx)​
​
client, err := hello.NewClient(​
"hello",​
client.WithHostPorts("0.0.0.0:8888"),​
// 2. 初始化 tracing 中间件​
client.WithSuite(tracing.NewClientSuite()),​
)​
if err != nil {​
log.Fatal(err)​
}​
for {​
req := &api.Request{Message: "my request"}​
resp, err := client.Echo(context.Background(), req)​
if err != nil {​
log.Fatal(err)​
}​
log.Println(resp)​
time.Sleep(time.Second * 10)​
}​
}​
​
步骤二:数据上报​
方式一:直接上报至 ApmPlus 服务端​
  1. 获取鉴权信息​
  • ​​​
  1. 设置环境变量并启动 Kitex 应用​
​
变量名​
描述​
OTEL_SERVICE_NAME​
设置服务名​
OTEL_EXPORTER_OTLP_ENDPOINT​
数据上报地址设置,参考上报地址明细​
OTEL_EXPORTER_OTLP_HEADERS​
鉴权信息,格式如下:OTEL_EXPORTER_OTLP_HEADERS=X-ByteAPM-AppKey=*******​
​
上报地址明细:​
​
网络类型​
地域​
上报地址​
公网​
北京​
https://apmplus-cn-beijing.volces.com:4317​
​
上海​
https://apmplus-cn-shanghai.volces.com:4317​
私网​
北京​
http://apmplus-cn-beijing.ivolces.com:4317​
​
上海​
http://apmplus-cn-shanghai.ivolces.com:4317​
​
方式二:Otel Collector 转发​
APMPlusOpenTelemetryCollector是APMPlus基于OpenTelemetryCollector二次开发的数据采集器。您可以在集群中安装 Opentelemetry Collector 做数据转发​
  1. 安装 vke-addon:APMPlusOpenTelemetryCollector​
  • 选择即将部署应用的集群​
  • 组件管理 > 监控 > apmplus-opentelemetry-collector 安装​
​Image​​
  1. 设置环境变量启动 Kitex 应用​
​
变量名​
描述​
OTEL_SERVICE_NAME​
设置服务名​
OTEL_EXPORTER_OTLP_ENDPOINT​
数据上报地址设置,设置为集群内的 collector 地址,​
http://apmplus-opentelemetry-gateway-service-grpc.apmplus-opentelemetry-operator:4317​
​
​
​
​
最近更新时间:2026.01.27 17:22:04
这个页面对您有帮助吗?
有用
有用
无用
无用