kinggo
V1
2022/11/28阅读:54主题:默认主题
Hertz 的 Opentelemetry 实战
Hertz 的 Opentelemetry 实战
介绍
在上一篇 文章 中主要讲述 hlog 与 requestid 的联合使用,用来关联日志。 Hertz 目前也提供了对于 Opentelemetry 的扩展支持 obs-opentelemetry ,方便用户在 Hertz 服务中使用 Opentelemetry。
实战部分
Hertz 的 Opentelemetry 扩展主要提供了 Metric、Tracing、日志三个功能。
Metric
在 Hertz 中集成 Opentelemetry 的 Metric。
它支持 HTTP Metrics 和 Runtime Metrics,更多详细信息可以查看这里 。
import (
"github.com/hertz-contrib/obs-opentelemetry/provider"
hertztracing "github.com/hertz-contrib/obs-opentelemetry/tracing"
)
func main() {
// ...
p := provider.NewOpenTelemetryProvider(
provider.WithServiceName(serviceName),
// Support setting ExportEndpoint via environment variables: OTEL_EXPORTER_OTLP_ENDPOINT
provider.WithExportEndpoint("localhost:4317"),
provider.WithInsecure(),
)
defer p.Shutdown(context.Background())
tracer, cfg := hertztracing.NewServerTracer()
h := server.Default(tracer)
h.Use(hertztracing.ServerMiddleware(cfg))
// ...
}
效果如下:
Tracing
在 Hertz 中集成 Opentelemetry 的链路追踪。
import (
...
"github.com/hertz-contrib/obs-opentelemetry/provider"
"github.com/hertz-contrib/obs-opentelemetry/tracing"
)
func main() {
serviceName := "echo"
p := provider.NewOpenTelemetryProvider(
provider.WithServiceName(serviceName),
provider.WithExportEndpoint("localhost:4317"),
provider.WithInsecure(),
)
defer p.Shutdown(context.Background())
tracer, cfg := hertztracing.NewServerTracer()
h := server.Default(tracer)
h.Use(hertztracing.ServerMiddleware(cfg))
...
h.Spin()
}
效果如下:
Logger
在 Hertz 提供日志用于和链路追踪关联。
import (
hertzlogrus "github.com/hertz-contrib/obs-opentelemetry/logging/logrus"
)
func init() {
hlog.SetLogger(hertzlogrus.NewLogger())
hlog.SetLevel(hlog.LevelDebug)
}
func main() {
//...
h.GET("/ping", func(c context.Context, ctx *app.RequestContext) {
req := &api.Request{Message: "my request"}
resp, err := client.Echo(c, req)
if err != nil {
hlog.Errorf(err.Error())
return
}
hlog.CtxDebugf(c, "message received successfully: %s", req.Message)
ctx.JSON(consts.StatusOK, resp)
})
//...
}
效果如下:
{"level":"debug","msg":"message received successfully: my request","span_id":"445ef16484a171b8","time":"2022-07-04T06:27:35+08:00","trace_flags":"01","trace_id":"e9e579b32c9d6b0598f8f33d65689e06"}
完整示例代码
-
示例代码: https://github.com/cloudwego/hertz-examples/tree/main/opentelemetry -
文档说明: https://www.cloudwego.io/docs/hertz/tutorials/service-governance/Opentelemetry/
总结
Hertz 提供了 Opentelemetry 扩展 obs-opentelemetry,方便用户集成 Metric、Tracing、Logger 的功能, 下一篇文章我们将使用 Gorm 的 Opentelemetry 扩展和 Hertz 的 Opentelemetry 扩展一起开发一个项目。
参考文档
-
https://github.com/cloudwego/hertz -
https://github.com/hertz-contrib/obs-opentelemetry
作者介绍
kinggo
V1