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

应用性能监控全链路版

复制全文
下载 pdf
CloudWeGo 集成
Hertz 接入
复制全文
下载 pdf
Hertz 接入
Hertz 是一个 Golang 微服务 HTTP 框架,具有高易用性、高性能、高扩展性等特点。​
通过OpenTelemetry接入​
步骤一:初始化 Hertz​
Hertz 以中间件的方式,集成 opentelemetry sdk,默认可以生成、上报链路和指标数据。​
关于日志数据上报,目前 Hertz 没有默认集成,不过可以通过一些社区的拓展日志库进行集成,在服务端接入中提供了 otelLogger 代码参考示例。​
服务端接入:​
​
package main​
​
import (​
"context"​
"log/slog"​
"time"​
​
"github.com/cloudwego/hertz/pkg/app"​
"github.com/cloudwego/hertz/pkg/app/server"​
"github.com/cloudwego/hertz/pkg/protocol/consts"​
"github.com/hertz-contrib/obs-opentelemetry/provider"​
hertztracing "github.com/hertz-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() {​
// 1. 初始化 otel metrics/traces provider​
ctx := context.Background()​
p := provider.NewOpenTelemetryProvider(​
provider.WithInsecure(),​
)​
defer p.Shutdown(ctx)​
​
// 2. 初始化 hertz tracer 中间件​
tracer, cfg := hertztracing.NewServerTracer()​
h := server.Default(tracer)​
h.Use(hertztracing.ServerMiddleware(cfg))​
​
// 3. 初始化 otel log provider​
lp := initLog(ctx)​
defer lp.Shutdown(ctx)​
​
h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {​
// 4. 使用 otelLogger 记录日志​
otelLogger.InfoContext(c, "/ping called", "time", time.Now().Unix())​
ctx.JSON(consts.StatusOK, time.Now().Unix())​
})​
​
h.Spin()​
}​
​
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"​
"fmt"​
"time"​
​
"github.com/cloudwego/hertz/pkg/app/client"​
"github.com/cloudwego/hertz/pkg/common/hlog"​
"github.com/hertz-contrib/obs-opentelemetry/provider"​
hertztracing "github.com/hertz-contrib/obs-opentelemetry/tracing"​
)​
​
func main() {​
// 1. 初始化 otel metrics/traces provider​
p := provider.NewOpenTelemetryProvider(​
provider.WithInsecure(),​
)​
defer p.Shutdown(context.Background())​
​
// 2. 初始化 hertz tracer 中间件​
c, _ := client.NewClient()​
c.Use(hertztracing.ClientMiddleware())​
​
for {​
ctx := context.Background()​
_, b, err := c.Get(ctx, nil, "http://0.0.0.0:8888/ping?foo=bar")​
if err != nil {​
hlog.CtxErrorf(ctx, err.Error())​
}​
​
fmt.Println("request sent return:", string(b))​
​
<-time.After(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
这个页面对您有帮助吗?
有用
有用
无用
无用