本包提供了完整的链路追踪功能,支持将追踪数据上传到 Jaeger。
- ✅ OpenTelemetry 标准实现
- ✅ Jaeger 集成(支持 UDP Agent 和 HTTP Collector)
- ✅ gRPC 自动追踪
- ✅ HTTP 自动追踪
- ✅ 数据库操作追踪(GORM)
- ✅ 采样率配置
- ✅ 跨服务链路传播
tracing:
enabled: true
serviceName: "auth-server"
serviceVersion: "1.0.0"
environment: "production"
samplingRate: 1.0 # 采样率:0.0-1.0,1.0 表示采样所有请求
jaeger:
enabled: true
# 方式1:使用 UDP Agent(推荐,性能更好)
agentHost: "localhost"
agentPort: 6831
# 方式2:使用 HTTP Collector(如果需要认证)
# collectorEndpoint: "http://localhost:14268/api/traces"
# username: "jaeger"
# password: "password"enabled: 是否启用链路追踪serviceName: 服务名称(用于标识服务)serviceVersion: 服务版本environment: 环境名称(dev、staging、prod)samplingRate: 采样率(0.0-1.0),默认 1.0(采样所有请求)jaeger.enabled: 是否启用 Jaeger 上传jaeger.agentHost: Jaeger Agent 主机地址jaeger.agentPort: Jaeger Agent 端口(UDP,默认 6831)jaeger.collectorEndpoint: Jaeger Collector HTTP 端点(可选)jaeger.username: Collector 用户名(如果 Collector 需要认证)jaeger.password: Collector 密码(如果 Collector 需要认证)
import (
"quickgo"
"github.com/team-dandelion/quickgo/tracing"
)
func main() {
// 加载配置
var tracingConfig tracing.Config
quickgo.LoadCustomConfigKey("tracing", &tracingConfig)
// 创建框架实例
app, err := quickgo.NewFramework(
quickgo.ConfigOptionWithApp(appConfig),
quickgo.ConfigOptionWithLogger(loggerConfig),
quickgo.ConfigOptionWithTracing(&tracingConfig),
// ... 其他配置
)
if err != nil {
panic(err)
}
// 初始化(会自动初始化 tracing)
if err := app.Init(); err != nil {
panic(err)
}
// 启动服务
if err := app.Start(); err != nil {
panic(err)
}
// 等待中断信号(优雅关闭时会自动关闭 tracing)
app.Wait()
}gRPC 服务会自动追踪,无需额外配置。追踪信息会包含:
- 方法名
- 请求/响应大小
- 错误信息
- 执行时间
HTTP 服务会自动追踪,需要在 HTTP Server 配置中启用:
httpServerConfig := &quickgo.HTTPServerConfig{
Enabled: true,
Address: "0.0.0.0",
Port: 8080,
EnableTrace: true, // 启用追踪
}import (
"github.com/team-dandelion/quickgo/tracing"
"go.opentelemetry.io/otel/attribute"
)
func myFunction(ctx context.Context) {
// 创建新的 span
ctx, span := tracing.StartSpan(ctx, "my-function")
defer span.End()
// 设置属性
span.SetAttributes(
attribute.String("key", "value"),
attribute.Int("count", 10),
)
// 执行操作
// ...
// 记录错误(如果有)
if err != nil {
tracing.SetSpanError(span, err)
return
}
}GORM 操作会自动追踪,追踪信息会包含:
- SQL 语句
- 执行时间
- 影响行数
- 数据库类型(master/replica)
docker run -d \
--name jaeger \
-p 6831:6831/udp \
-p 16686:16686 \
-p 14268:14268 \
jaegertracing/all-in-one:latest部署后访问:http://localhost:16686
- 性能影响:启用追踪会有一定的性能开销,建议在生产环境使用采样率(如 0.1 表示采样 10% 的请求)
- 存储空间:追踪数据会占用存储空间,建议配置合适的采样率和数据保留策略
- 网络延迟:如果 Jaeger Agent 不可达,可能会影响服务启动(建议配置超时和重试)