tracing

package module
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 15, 2026 License: MIT Imports: 17 Imported by: 3

README

ekit-tracing

OpenTelemetry 分布式追踪 + trace_id 唯一真相源。

本仓库是 ekit(git.enjoye.top/enjoydream/ekit v0.34.0) 拆分出的独立 Go module,属于 oekit ekit 子项目矩阵(Round-2 深拆粒度)。

安装

go get github.com/oekit/tracing@v0.1.0

包清单

  • 根包 `tracing`(import `github.com/oekit/tracing`)— Init(Config) OTel 接入
  • `traceid/` — trace_id 生成/提取/桥接(FromContext/ContextWith/Middleware)
  • `httpotel/` — net/http OTel 插桩
  • `redisotel/` — go-redis OTel 插桩

矩阵总览(20 活跃仓 + 19 微库,自动生成)

仓库 内容 矩阵内依赖
ekit-bootstrap (见 README) ekit-bootstrap, ekit-concurrency, ekit-core, ekit-logx, ekit-metrics, ekit-nns, ekit-registry, ekit-tracing
ekit-cache 进程内缓存微库——LRU O(1)、TOCTOU 修复的 LocalCache —
ekit-concurrency (见 README) ekit-concurrency
ekit-convert 类型转换微库——字符串/数字/布尔/切片的宽容转换 —
ekit-core Go 后端基础工具库——应用基建件(governance 治理 schema / lifecycle 生命周期契约 / network IP 工具 / version) ekit-core
ekit-data (见 README) ekit-concurrency, ekit-logx
ekit-encoding 编解码微库——JSON/msgpack 等序列化助手 —
ekit-enumx 枚举工具微库——确定性顺序的 All/Values/解析 —
ekit-errors 错误处理微库——Wrap/Cause 链、BizError(业务码/HTTP 码双轨)、sentinel 错误 —
ekit-gorm (见 README) ekit-errors, ekit-gorm, ekit-logx, ekit-pagination
ekit-handler (见 README) ekit-core, ekit-errors, ekit-gorm, ekit-handler, ekit-middleware, ekit-pagination, ekit-tracing, ekit-validator
ekit-hertz (见 README) ekit-concurrency, ekit-core, ekit-hertz, ekit-logx, ekit-metrics, ekit-nns, ekit-registry, ekit-tracing
ekit-httpjson HTTP JSON 微库——DoJSON 带 retry 语义与 Retry-After 尊重 ekit-stringx
ekit-httpx (见 README) ekit-concurrency, ekit-httpx, ekit-logx, ekit-metrics, ekit-registry
ekit-istio (见 README) —
ekit-jsonrepair JSON 修复微库——宽容修复链:截断/尾逗号/单引号/非标准值归一 —
ekit-kitex (见 README) ekit-concurrency, ekit-core, ekit-errors, ekit-kitex, ekit-logx, ekit-metrics, ekit-nns, ekit-registry, ekit-tracing
ekit-kitex-examples (见 README) ekit-bootstrap, ekit-kitex, ekit-kitex-examples, ekit-logx, ekit-registry, ekit-tracing
ekit-logx (见 README) ekit-logx
ekit-mathx 数学工具微库——安全随机、区间、平均值等评测统计助手 —
ekit-metrics (见 README) ekit-core, ekit-metrics
ekit-middleware (见 README) ekit-concurrency, ekit-errors, ekit-logx, ekit-metrics, ekit-middleware, ekit-pathx, ekit-registry, ekit-tracing
ekit-network (见 README) ekit-concurrency, ekit-logx, ekit-tracing
ekit-nns (见 README) ekit-concurrency, ekit-core, ekit-logx, ekit-nns, ekit-registry
ekit-nns-endpoint NNS 端点工厂——per-service 熔断(4xx 不计失败)、HTTP 换实例重试、gRPC 连接池、弹性指标 ekit-httpx, ekit-logx, ekit-metrics, ekit-nns, ekit-registry
ekit-pagination 分页微库——PageRequest/PageResponse 与换算 —
ekit-pathx 路径匹配微库——glob(vendor/**、*.test)匹配 —
ekit-ptrx 指针工具微库——To/From/安全解引用 —
ekit-redis (见 README) ekit-concurrency, ekit-data, ekit-logx, ekit-redis
ekit-registry (见 README) ekit-core, ekit-logx, ekit-registry
ekit-slicex 切片工具微库——Partition 二分组、GroupBy、去重与映射 —
ekit-stringx 字符串工具微库——ID 生成、关键词匹配、缩进、复数化、模板替换 —
ekit-timertask 定时任务微库——分片定时任务(FNV-1a hash、心跳续约) ekit-concurrency, ekit-logx
ekit-timex 时间工具微库——格式化/解析/时间戳 + cron 表达式 —
ekit-tracing (见 README) ekit-logx
ekit-uidgen ID 生成微库——UUID、雪花、随机串 —
ekit-validator 参数校验微库——go-playground/validator 封装,ValidationError 归一为 BizError(400) ekit-errors
ekit-workflow (见 README) ekit-concurrency, ekit-logx

ekit-observability 已在 Round-2 解散归档;本表由源码 import 自动生成。 依赖严格单向:工具微库/L0 → 可观测门面 → registry → data/httpx/middleware → nns/bootstrap → hertz/kitex。

当前仓库依赖

详见上方矩阵表中本仓库行。

与 ekit 单体仓库的关系

  • 代码与 ekit v0.34.0 等价,module 路径 git.enjoye.top/enjoydream/ekit/... → github.com/oekit/tracing/...
  • 各子仓库独立发版(SemVer);开发规范沿用 ekit AGENTS.md 约定

License

见 LICENSE

Documentation

Overview

Package tracing 提供 OpenTelemetry 分布式追踪初始化。

直接基于 go.opentelemetry.io/otel + OTLP gRPC 导出器实现(不依赖任何 HTTP/RPC 框架,纯 Kitex 服务引用本包不会引入 Hertz),一行代码完成:

  • OTLP gRPC Trace Exporter + BatchSpanProcessor
  • OTLP gRPC Metrics Exporter(15s 周期读取)+ Go Runtime 指标采集
  • B3 + OpenTracing + W3C TraceContext + Baggage 传播器
  • service.name 资源属性

快速接入

provider, err := tracing.Init(tracing.Config{
    ServiceName: "wechat",
    Endpoint:    "otel-collector:4317",
    Insecure:    true,
})
if err != nil {
    log.Fatal(err)
}
defer provider.Shutdown(context.Background())

// Hertz server tracing(通过 instrumentation/hertzotel 接入)
tracing := hertzotel.NewServerTracing()
h := server.New(server.WithHostPorts(":8080"), tracing.Option)
h.Use(tracing.Middleware)

// ehttp client tracing
client := ehttp.NewClient("moyu", ehttp.WithTracing())

配置说明

  • ServiceName: 服务名称,写入 resource 的 service.name 属性
  • Endpoint: OTLP gRPC 地址,如 "otel-collector:4317";为空时不创建 导出器、不发起网络连接(仅安装本地 provider)
  • Insecure: 是否跳过 TLS(本地开发用 true,生产用 false)
  • SampleRate: 采样率,0.0~1.0;0 < SampleRate < 1.0 时启用 ParentBased(TraceIDRatioBased),其余(含 <= 0)为全量采样

重复调用

Init 会安装全局 provider;重复调用会自动关闭上一个被替换的 provider 后再安装新实例。常规服务应只 Init 一次(bootstrap 已保证)。

与 bootstrap 集成

bootstrap.Run 会自动初始化 tracing:

bootstrap.Run(bootstrap.Config{
    Tracing: &tracing.Config{
        Endpoint: "otel-collector:4317",
    },
}, func(app *bootstrap.App) error {
    // ...
})

子包

  • instrumentation/hertzotel: Hertz server/client 追踪(含 NewServerTracing 成对 API)
  • instrumentation/kitexotel: Kitex server/client 追踪
  • instrumentation/httpotel: HTTP 客户端追踪(标准库 http.Client)
  • instrumentation/redis: Redis 追踪

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	// ServiceName 服务名称,如 "wechat"、"fuxi_engine"。
	ServiceName string

	// Endpoint OTLP gRPC 地址,如 "otel-collector:4317"。
	// 为空时不创建 OTLP 导出器、不发起任何网络连接,仅安装本地 provider。
	Endpoint string

	// Insecure 是否跳过 TLS(本地开发用 true,生产用 false)。
	Insecure bool

	// SampleRate 采样率,0.0~1.0。
	// 0 < SampleRate < 1.0 时启用 ParentBased(TraceIDRatioBased) 采样;
	// SampleRate >= 1.0 或 <= 0 均为全量采样(默认 1.0)——<=0 沿用旧版
	// "静默全量" 语义,不视为错误。
	SampleRate float64
}

Config 是 OpenTelemetry Provider 的配置。

type Provider

type Provider interface {
	Shutdown(ctx context.Context) error
}

Provider 是 tracing provider 的最小接口,仅暴露 Shutdown 能力。 用于解耦调用方对具体 OTel SDK 实现的直接依赖。

func Init

func Init(cfg Config) (Provider, error)

Init 初始化 OpenTelemetry 全局 TracerProvider、Propagator(Endpoint 非空时 还包含 MeterProvider 与 Go runtime 指标采集),返回 Provider 接口用于 关闭时 flush。进程退出前调用 provider.Shutdown(ctx) 确保数据 flush。

行为说明:

  • Propagator: B3 + OpenTracing + W3C TraceContext + Baggage(与旧 hertz-contrib/obs-opentelemetry/provider 的默认组合一致)
  • 采样: 0 < SampleRate < 1.0 → ParentBased(TraceIDRatioBased(rate)); SampleRate >= 1.0 或 <= 0 → 全量采样
  • Endpoint 非空时同时初始化 OTLP gRPC Metrics(15s 周期读取 + runtime 指标); Endpoint 为空时跳过导出器初始化,不产生网络连接
  • 重复调用 Init 会自动关闭上一个 provider 后再安装新 provider; 被替换 provider 的原持有方再调用 Shutdown 会得到 already-shutdown 类错误,可安全忽略。常规服务应只 Init 一次

Directories

Path Synopsis
Package httpxotel 为标准库 net/http 提供 OpenTelemetry 追踪的 Transport 封装。
Package httpxotel 为标准库 net/http 提供 OpenTelemetry 追踪的 Transport 封装。
instrumentation
httpotel
Package httpxotel 为标准库 net/http 提供 OpenTelemetry 追踪的 Transport 封装。
Package httpxotel 为标准库 net/http 提供 OpenTelemetry 追踪的 Transport 封装。
redis
Package redisotel 为 go-redis 客户端提供 OpenTelemetry 追踪插桩。
Package redisotel 为 go-redis 客户端提供 OpenTelemetry 追踪插桩。
Package redisotel 为 go-redis 客户端提供 OpenTelemetry 追踪插桩。
Package redisotel 为 go-redis 客户端提供 OpenTelemetry 追踪插桩。
Package traceid 负责 HTTP 请求链路追踪 ID(trace_id)的生成、透传与提取。
Package traceid 负责 HTTP 请求链路追踪 ID(trace_id)的生成、透传与提取。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL