Documentation
¶
Overview ¶
Package trace 提供 Genesis 的 OpenTelemetry 链路追踪初始化与传播辅助能力。
这个组件当前采用“全局模式”工作:Init 和 Discard 都会安装全局 TracerProvider 与 TextMapPropagator。这样做便于 Gin、gRPC、数据库插件和 MQ helper 共享同一套全局 tracing 状态;代价是重复初始化会覆盖之前安装的 全局 provider。
因此推荐的使用方式是:应用启动时只初始化一次 trace,并在退出时调用返回的 shutdown 函数。对于只需要本地生成 TraceID 的场景,也应明确知道 Discard 仍然会修改全局 tracing 状态。
Index ¶
- Constants
- func Discard(serviceName string) (func(context.Context) error, error)
- func Extract(ctx context.Context, carrier map[string]string) context.Context
- func GRPCClientStatsHandler() stats.Handler
- func GRPCServerStatsHandler() stats.Handler
- func GinMiddleware(serviceName string) gin.HandlerFunc
- func Init(cfg *Config) (func(context.Context) error, error)
- func Inject(ctx context.Context, carrier map[string]string)
- func MarkSpanError(span oteltrace.Span, err error)
- func SpanNameMQConsume(destination string) string
- func SpanNameMQPublish(destination string) string
- func StartConsumerSpanFromHeaders(ctx context.Context, tracer oteltrace.Tracer, spanName string, ...) (context.Context, oteltrace.Span)
- func StartProducerSpan(ctx context.Context, tracer oteltrace.Tracer, spanName string, ...) (context.Context, oteltrace.Span, map[string]string)
- type Config
- type MessagingMeta
- type MessagingTraceRelation
Constants ¶
const ( // Messaging 语义属性键 AttrMessagingSystem = "messaging.system" AttrMessagingDestination = "messaging.destination" AttrMessagingOperation = "messaging.operation" AttrMessagingConsumerGroup = "messaging.consumer.group" )
const ( // 常见的消息操作 MessagingOperationPublish = "publish" MessagingOperationConsume = "consume" MessagingOperationProcess = "process" )
const (
// 常见的消息系统
MessagingSystemNATS = "nats"
)
Variables ¶
This section is empty.
Functions ¶
func Discard ¶
Discard 创建一个不导出数据的 TracerProvider,仅用于本地生成 TraceID。
Discard 仍然采用全局模式:它会安装全局 TracerProvider 和全局传播器。 因此它不是“局部无副作用”的 helper,而是“安装一个不导出的全局 provider”。 返回的 shutdown 在关闭该 provider 后,会在必要时把全局 tracing 状态重置为 安全默认值。
func GRPCClientStatsHandler ¶
GRPCClientStatsHandler 返回一个可重用的 gRPC 客户端状态处理程序用于跟踪
func GRPCServerStatsHandler ¶
GRPCServerStatsHandler 返回一个可重用的 gRPC 服务器状态处理程序用于跟踪
func GinMiddleware ¶
func GinMiddleware(serviceName string) gin.HandlerFunc
GinMiddleware 返回一个可重用的 Gin 跟踪中间件
func Init ¶
Init 初始化全局 TracerProvider,返回 shutdown 函数。
Init 当前采用全局模式:它会创建一个新的 TracerProvider,并安装为 OpenTelemetry 全局 TracerProvider 和全局传播器。调用方通常应在应用启动时 调用一次,并负责在退出时执行返回的 shutdown 函数。
返回的 shutdown 会关闭底层 provider;若当前全局 TracerProvider 仍指向该 实例,还会将全局 tracing 状态重置为安全默认值。
func MarkSpanError ¶
MarkSpanError 记录并将 Span 标记为错误,当 err 不为 nil 时
func SpanNameMQConsume ¶
SpanNameMQConsume 返回用于从主题/主题消费的标准 Span Name
func SpanNameMQPublish ¶
SpanNameMQPublish 返回用于发布到主题/主题的标准 Span Name
func StartConsumerSpanFromHeaders ¶
func StartConsumerSpanFromHeaders( ctx context.Context, tracer oteltrace.Tracer, spanName string, headers map[string]string, meta MessagingMeta, attrs ...attribute.KeyValue, ) (context.Context, oteltrace.Span)
StartConsumerSpanFromHeaders 从传入的 headers 启动一个标准化的消费者 Span 关系默认是 link,可通过 MessagingMeta.TraceRelation 切换为 child_of
Types ¶
type Config ¶
type Config struct {
ServiceName string `mapstructure:"service_name"`
Endpoint string `mapstructure:"endpoint"`
Sampler float64 `mapstructure:"sampler"`
Batcher string `mapstructure:"batcher"`
Insecure bool `mapstructure:"insecure"`
}
Config 定义全局 tracing 初始化参数。
当前实现是一个最小 OTLP gRPC 初始化器,不包含 TLS、认证头和附加 resource 属性等更复杂的 exporter 配置能力。
type MessagingMeta ¶
type MessagingMeta struct {
System string
Destination string
Operation string
ConsumerGroup string
// TraceRelation 控制消费端与上游生产端的关系建模方式,默认 link。
TraceRelation MessagingTraceRelation
}
MessagingMeta 描述标准化的消息属性
type MessagingTraceRelation ¶
type MessagingTraceRelation string
MessagingTraceRelation 表示消费者 Span 与上游消息 Span 的关系建模方式
const ( // MessagingTraceRelationLink 使用 Span Link 关联上游(默认,适合异步/批处理/多消费者) MessagingTraceRelationLink MessagingTraceRelation = "link" // MessagingTraceRelationChildOf 使用 parent/child 关系串成单条 Trace(适合端到端演示) MessagingTraceRelationChildOf MessagingTraceRelation = "child_of" )