Help us shape the future of Go! Take the 2026 Go Developer Survey

telemetry

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Nov 1, 2026 License: MIT Imports: 23 Imported by: 0

Documentation

Overview

Package telemetry 是全项目统一的遥测出口:trace、指标与日志经同一条管道写出,实体身份经 ctx 下传。 本包按 OTel 属性名称记录操作、用量和内容。

Index

Constants

View Source
const (
	FinishReasonStop          = "stop"
	FinishReasonLength        = "length"
	FinishReasonContentFilter = "content_filter"
	FinishReasonToolCall      = "tool_call"
	// FinishReasonError 表示应收到结束原因却没有收到:调用失败、取消或流中断。
	FinishReasonError = "error"
)

结束原因的约定取值(schema FinishReason 枚举),业务包归一结束原因时使用。

View Source
const (
	TokenModalityText    = "text"
	TokenModalityUnknown = "unknown"
)

token 计数器的 gen_ai.token.modality 取值:llmkit 不提供按模态拆分的用量,只区分纯文本调用与其他。

View Source
const (
	MessageRoleUser      = "user"
	MessageRoleAssistant = "assistant"
	MessageRoleTool      = "tool"

	PartTypeText             = "text"
	PartTypeReasoning        = "reasoning"
	PartTypeToolCall         = "tool_call"
	PartTypeToolCallResponse = "tool_call_response"
	PartTypeURI              = "uri"
	PartTypeBlob             = "blob"

	ModalityImage = "image"
)

消息角色、part 类型与模态的约定取值,供业务包构造 ChatMessage。系统指令单独记录,没有 system 角色。

View Source
const (
	ChatPurposeConversation = "conversation"
	ChatPurposeCompact      = "compact"
)

模型调用的用途:普通对话或生成上下文摘要。

View Source
const RPCMethodOther = "_OTHER"

RPCMethodOther 是未注册方法的 rpc.method 取值;此时 span 名使用 rpc.system.name,原始方法名记在 rpc.method_original。

View Source
const ScopeName = "github.com/VaalaCat/openvaala"

ScopeName 是全项目 Tracer、Meter 与 OTLP 日志桥接共用的 instrumentation scope。

Variables

This section is empty.

Functions

func AddActiveConnections

func AddActiveConnections(ctx context.Context, delta int64)

AddActiveConnections 调整已建立的服务端连接数。

func AddActiveConversations

func AddActiveConversations(ctx context.Context, delta int64)

AddActiveConversations 调整运行中的对话数。

func AgentName

func AgentName(name string) attribute.KeyValue

AgentName 生成 Agent 名属性。

func ConnectionID

func ConnectionID(id string) attribute.KeyValue

ConnectionID 生成 WebSocket 连接身份属性。

func ContextWithAttrs

func ContextWithAttrs(ctx context.Context, attrs ...attribute.KeyValue) context.Context

ContextWithAttrs 把实体身份追加到上下文。

func ContextWithParentSpan

func ContextWithParentSpan(ctx context.Context, parent SpanRef) context.Context

ContextWithParentSpan 将给定 span 引用设为后续 span 的父节点。

func ContextWithTelemetry

func ContextWithTelemetry(ctx context.Context, telemetry *Telemetry) context.Context

ContextWithTelemetry 将遥测管道挂到上下文。

func ConversationID

func ConversationID(id string) attribute.KeyValue

ConversationID 生成对话身份属性。

func DecodeJSONContent

func DecodeJSONContent(raw []byte) any

DecodeJSONContent 解析工具内容中的 JSON。

func ExecutorID

func ExecutorID(id string) attribute.KeyValue

ExecutorID 生成工具执行环境的身份属性。

func GetLogger

func GetLogger(ctx context.Context) *slog.Logger

GetLogger 返回绑定当前上下文的日志对象。

func InputItemID

func InputItemID(id string) attribute.KeyValue

InputItemID 生成开启本轮的输入 Item 属性。

func NetworkPeerAddress

func NetworkPeerAddress(host string) attribute.KeyValue

NetworkPeerAddress 生成 WebSocket 连接的 TCP 对端地址属性。

func NetworkPeerPort

func NetworkPeerPort(port int) attribute.KeyValue

NetworkPeerPort 生成 WebSocket 连接的 TCP 对端端口属性。

func ParentSessionID

func ParentSessionID(id string) attribute.KeyValue

ParentSessionID 生成父 Session 身份属性。

func ServerAddress

func ServerAddress(host string) attribute.KeyValue

ServerAddress 生成服务监听地址属性。

func ServerPort

func ServerPort(port int) attribute.KeyValue

ServerPort 生成服务监听端口属性。

func SessionID

func SessionID(id string) attribute.KeyValue

SessionID 生成 Session 身份属性。

func ToolCallID

func ToolCallID(id string) attribute.KeyValue

ToolCallID 生成工具调用身份属性。

func ToolName

func ToolName(name string) attribute.KeyValue

ToolName 生成工具名称属性。

func TurnStep

func TurnStep(step int) attribute.KeyValue

TurnStep 生成 Turn 内的步骤序号属性。

Types

type ChatMessage

type ChatMessage struct {
	Role  string
	Parts []MessagePart
}

ChatMessage 是一条 GenAI 约定格式的消息,与业务类型无关;由业务包从模型请求或 Item 转换而来。

type ChatRecorder

type ChatRecorder struct {
	// contains filtered or unexported fields
}

ChatRecorder 记录一次模型调用,用量、结束原因、上游模型与输出分块在流式事件中陆续交给它;由执行这次调用的 goroutine 单独使用, End 恰好调用一次,End 之后不得再使用。

func StartChat

func StartChat(ctx context.Context, start ChatStart) (context.Context, *ChatRecorder)

StartChat 开始记录一次流式模型调用。

func (*ChatRecorder) End

func (r *ChatRecorder) End(err error)

End 结束模型调用记录并写入用量、指标和日志。

func (*ChatRecorder) IsContentCaptured

func (r *ChatRecorder) IsContentCaptured() bool

IsContentCaptured 本次模型调用是否采集内容?

func (*ChatRecorder) RecordChunk

func (r *ChatRecorder) RecordChunk()

RecordChunk 记录一个输出分块的到达时间。

func (*ChatRecorder) RecordFinishReason

func (r *ChatRecorder) RecordFinishReason(reason string)

RecordFinishReason 记录模型结束原因。

func (*ChatRecorder) RecordInput

func (r *ChatRecorder) RecordInput(systemInstructions []string, messages []ChatMessage, toolNames []string)

RecordInput 记录模型请求的系统指令、消息和工具名称。

func (*ChatRecorder) RecordOutput

func (r *ChatRecorder) RecordOutput(messages []ChatMessage)

RecordOutput 记录模型调用已收到的输出消息。

func (*ChatRecorder) RecordResponseModel

func (r *ChatRecorder) RecordResponseModel(model string)

RecordResponseModel 记录上游模型名。

func (*ChatRecorder) RecordUsage

func (r *ChatRecorder) RecordUsage(usage defs.TokenUsage)

RecordUsage 记录模型 token 用量。

type ChatStart

type ChatStart struct {
	ModelCallID string
	Model       string
	// Provider 是 gen_ai.provider.name;经网关或兼容接口访问时表示协议家族而非实际厂商。
	Provider string
	// Purpose 是 ChatPurposeConversation 或 ChatPurposeCompact。
	Purpose string
	// ServerAddress 与 ServerPort 是模型服务的主机与端口;地址为空时两者都不写。
	ServerAddress string
	ServerPort    int
	// Compacted 本次请求的上下文是否以摘要开头?是时记 gen_ai.conversation.compacted=true。
	Compacted bool
	// TokenModality 是 token 计数器的模态:TokenModalityText 或 TokenModalityUnknown;空值按 unknown 记录。
	TokenModality string
}

ChatStart 是开始记录一次模型调用所需的事实,由 Agent 与压缩在调用模型前填写。

type ExecuteToolRecorder

type ExecuteToolRecorder struct {
	// contains filtered or unexported fields
}

ExecuteToolRecorder 记录一次实际执行的工具调用;由执行这次调用的 goroutine 单独使用,End 恰好调用一次,End 之后不得再使用。

func StartExecuteTool

func StartExecuteTool(ctx context.Context, start ExecuteToolStart) (context.Context, *ExecuteToolRecorder)

StartExecuteTool 开始记录一次实际执行的工具调用。

func (*ExecuteToolRecorder) End

func (r *ExecuteToolRecorder) End(errorCode string)

End 结束工具调用记录并写入指标和日志。

func (*ExecuteToolRecorder) IsContentCaptured

func (r *ExecuteToolRecorder) IsContentCaptured() bool

IsContentCaptured 本次工具调用是否采集参数和结果?

func (*ExecuteToolRecorder) RecordArguments

func (r *ExecuteToolRecorder) RecordArguments(arguments any)

RecordArguments 记录工具调用参数。

func (*ExecuteToolRecorder) RecordResult

func (r *ExecuteToolRecorder) RecordResult(result any)

RecordResult 记录工具调用结果。

type ExecuteToolStart

type ExecuteToolStart struct {
	Name   string
	CallID string
	// Description 是工具定义中的描述;为空时不写。
	Description string
}

ExecuteToolStart 是开始记录一次工具调用所需的事实,由 ToolExecutor 在执行前填写。

type InvokeAgentEnd

type InvokeAgentEnd struct {
	Status  string
	Err     error
	Summary TurnSummary
}

InvokeAgentEnd 是 Turn 结束时的事实:Status 是 Turn 终态,Err 非 nil 表示失败(取消按取消记录)。

type InvokeAgentRecorder

type InvokeAgentRecorder struct {
	// contains filtered or unexported fields
}

InvokeAgentRecorder 记录一个 Agent Turn;由执行这个 Turn 的 goroutine 单独使用,End 恰好调用一次,End 之后不得再使用。

func StartInvokeAgent

func StartInvokeAgent(ctx context.Context, start InvokeAgentStart) (context.Context, *InvokeAgentRecorder)

StartInvokeAgent 开始记录一个 Agent Turn。

func (*InvokeAgentRecorder) End

func (r *InvokeAgentRecorder) End(end InvokeAgentEnd)

End 结束 Turn 记录并写入小结、指标和日志。

func (*InvokeAgentRecorder) IsContentCaptured

func (r *InvokeAgentRecorder) IsContentCaptured() bool

IsContentCaptured 本轮是否采集输入和回答内容?

func (*InvokeAgentRecorder) RecordInput

func (r *InvokeAgentRecorder) RecordInput(messages []ChatMessage)

RecordInput 记录开启本轮的输入消息。

type InvokeAgentStart

type InvokeAgentStart struct {
	AgentName        string
	AgentDescription string
	// Model 是 Agent 配置的主模型。
	Model  string
	TurnID string
}

InvokeAgentStart 是开始记录一个 Turn 所需的事实,由 Turn 在运行 Agent 前填写。

type MessagePart

type MessagePart struct {
	Type    string
	Content string
	ID      string
	Name    string
	// Arguments 是工具调用参数,Response 是工具结果:能解析为 JSON 时为解析结果,否则为原文字符串;为 nil 时不写出。
	Arguments any
	Response  any
	Modality  string
	MimeType  string
	URI       string
}

MessagePart 是消息中的一段内容;Type 决定使用哪些字段,空字段不写出。

type RPCServerRecorder

type RPCServerRecorder struct {
	// contains filtered or unexported fields
}

RPCServerRecorder 记录 Runtime Server 处理的一次 JSON-RPC 请求;由处理这个请求的 goroutine 单独使用,End 恰好调用一次,End 之后不得再使用。

func StartRPCServer

func StartRPCServer(ctx context.Context, method, originalMethod, requestID string) (context.Context, *RPCServerRecorder)

StartRPCServer 开始记录一次 JSON-RPC 请求。

func (*RPCServerRecorder) End

func (r *RPCServerRecorder) End(errorCode int, err error)

End 结束 RPC 请求记录。

type SpanRef

type SpanRef struct {
	// contains filtered or unexported fields
}

SpanRef 保存 span 的 trace ID 和 span ID,不携带 ctx 的取消信号和实体身份。

func GetSpanRef

func GetSpanRef(ctx context.Context) SpanRef

GetSpanRef 取得上下文中的 span 引用。

type Telemetry

type Telemetry struct {
	// contains filtered or unexported fields
}

Telemetry 是一条遥测管道的只读句柄:trace、指标、日志的出口。应用构造一次后传给各入口,可并发使用。

func GetTelemetry

func GetTelemetry(ctx context.Context) *Telemetry

GetTelemetry 获取上下文使用的遥测管道。

func NewTelemetry

func NewTelemetry(opt *TelemetryOpt) (*Telemetry, error)

NewTelemetry 校验出口并创建遥测管道。

func (*Telemetry) GetLogger

func (t *Telemetry) GetLogger(ctx context.Context) *slog.Logger

GetLogger 创建绑定上下文的日志对象。

type TelemetryOpt

type TelemetryOpt struct {
	TracerProvider trace.TracerProvider
	MeterProvider  metric.MeterProvider
	Logger         *slog.Logger
	// CaptureContent 是否把对话内容写入 span 属性?NewTelemetryOpt 默认开启,与配置默认值一致。
	CaptureContent bool
}

TelemetryOpt 是管道的三个出口;嵌入方可以传入任意 OTel Provider 与 slog Logger。

func NewTelemetryOpt

func NewTelemetryOpt(tracerProvider trace.TracerProvider, meterProvider metric.MeterProvider, logger *slog.Logger) *TelemetryOpt

NewTelemetryOpt 创建遥测出口配置。

func (*TelemetryOpt) WithCaptureContent

func (o *TelemetryOpt) WithCaptureContent(capture bool) *TelemetryOpt

WithCaptureContent 设置内容采集开关并返回配置。

type TurnSummary

type TurnSummary struct {
	// Steps 是普通模型调用次数。
	Steps int
	// InferenceCalls 是全部模型调用次数,含压缩调用。
	InferenceCalls int
	// ToolCalls 是收到结果的工具调用次数,FailedToolCalls 是其中带错误的次数。
	ToolCalls       int
	FailedToolCalls int
	// Usage 是全部模型调用的 token 合计。
	Usage defs.TokenUsage
	// FinishReason 是最后一次普通模型调用的结束原因(已归一)。
	FinishReason string
	// Output 是本轮最后一条助手消息;内容采集关闭时为空。
	Output []ChatMessage
}

TurnSummary 是一个 Turn 的小结,由 Agent 在自己的循环中统计、经 Turn 交给 Recorder。

Directories

Path Synopsis
Package telemetrytest 提供写入内存的遥测管道,供各包测试断言 span、指标与日志;与 net/http/httptest 同类。
Package telemetrytest 提供写入内存的遥测管道,供各包测试断言 span、指标与日志;与 net/http/httptest 同类。

Jump to

Keyboard shortcuts

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