audit

package
v0.5.11 Latest Latest
Warning

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

Go to latest
Published: Aug 12, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Package audit 提供 Hexagon AI Agent 框架的审计日志

支持操作审计记录、敏感操作监控、审计日志查询等功能。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ContextWithAuditLogger

func ContextWithAuditLogger(ctx context.Context, logger *AuditLogger) context.Context

ContextWithAuditLogger 将审计日志添加到 context

func LogFromContext

func LogFromContext(ctx context.Context, event *AuditEvent)

LogFromContext 从 context 记录审计事件

Types

type ActionStats

type ActionStats struct {
	Action string `json:"action"`
	Count  int64  `json:"count"`
}

ActionStats 操作统计

type Actor

type Actor struct {
	// Type 类型(user/agent/system)
	Type string `json:"type"`

	// ID 标识
	ID string `json:"id"`

	// Name 名称
	Name string `json:"name"`

	// IP IP 地址
	IP string `json:"ip,omitempty"`

	// UserAgent 用户代理
	UserAgent string `json:"user_agent,omitempty"`

	// Roles 角色
	Roles []string `json:"roles,omitempty"`
}

Actor 执行者

func AgentActor

func AgentActor(id, name string) *Actor

AgentActor Agent 执行者

func SystemActor

func SystemActor() *Actor

SystemActor 系统执行者

func UserActor

func UserActor(id, name string, roles []string) *Actor

UserActor 用户执行者

type ActorStats

type ActorStats struct {
	ActorID   string `json:"actor_id"`
	ActorName string `json:"actor_name"`
	Count     int64  `json:"count"`
}

ActorStats 执行者统计

type AuditConfig

type AuditConfig struct {
	// Enabled 是否启用
	Enabled bool

	// BufferSize 缓冲区大小
	BufferSize int

	// FlushInterval 刷新间隔
	FlushInterval time.Duration

	// RetentionDays 保留天数
	RetentionDays int

	// LogLevel 日志级别
	LogLevel AuditLevel

	// SensitiveFields 敏感字段(需要脱敏)
	SensitiveFields []string

	// IncludeDetails 是否包含详细信息
	IncludeDetails bool
}

AuditConfig 审计配置

func DefaultAuditConfig

func DefaultAuditConfig() AuditConfig

DefaultAuditConfig 默认配置

type AuditEvent

type AuditEvent struct {
	// ID 事件 ID
	ID string `json:"id"`

	// Timestamp 时间戳
	Timestamp time.Time `json:"timestamp"`

	// Level 级别
	Level AuditLevel `json:"level"`

	// Category 类别
	Category EventCategory `json:"category"`

	// Action 操作
	Action string `json:"action"`

	// Actor 执行者
	Actor *Actor `json:"actor"`

	// Target 目标
	Target *Target `json:"target,omitempty"`

	// Result 结果
	Result EventResult `json:"result"`

	// Details 详细信息
	Details map[string]any `json:"details,omitempty"`

	// Request 请求信息
	Request *RequestInfo `json:"request,omitempty"`

	// Response 响应信息
	Response *ResponseInfo `json:"response,omitempty"`

	// Duration 耗时
	Duration time.Duration `json:"duration,omitempty"`

	// TraceID 追踪 ID
	TraceID string `json:"trace_id,omitempty"`

	// SpanID Span ID
	SpanID string `json:"span_id,omitempty"`

	// Tags 标签
	Tags []string `json:"tags,omitempty"`

	// Metadata 元数据
	Metadata map[string]any `json:"metadata,omitempty"`
}

AuditEvent 审计事件

type AuditLevel

type AuditLevel string

AuditLevel 审计级别

const (
	LevelDebug    AuditLevel = "debug"
	LevelInfo     AuditLevel = "info"
	LevelWarning  AuditLevel = "warning"
	LevelError    AuditLevel = "error"
	LevelCritical AuditLevel = "critical"
)

type AuditLogger

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

AuditLogger 审计日志记录器

func AuditLoggerFromContext

func AuditLoggerFromContext(ctx context.Context) *AuditLogger

AuditLoggerFromContext 从 context 获取审计日志

func NewAuditLogger

func NewAuditLogger(opts ...AuditOption) *AuditLogger

NewAuditLogger 创建审计日志记录器

func (*AuditLogger) AddFilter

func (l *AuditLogger) AddFilter(filter EventFilter)

AddFilter 添加过滤器

func (*AuditLogger) AddHook

func (l *AuditLogger) AddHook(hook EventHook)

AddHook 添加钩子

func (*AuditLogger) AddWriter

func (l *AuditLogger) AddWriter(w io.Writer)

AddWriter 添加写入器

func (*AuditLogger) GenerateReport

func (l *AuditLogger) GenerateReport(ctx context.Context, start, end time.Time) (*AuditReport, error)

GenerateReport 生成审计报告

func (*AuditLogger) GetBufferOverflowCount

func (l *AuditLogger) GetBufferOverflowCount() int64

GetBufferOverflowCount 获取缓冲区溢出次数

可用于监控审计系统的健康状态

func (*AuditLogger) GetStoreFailCount

func (l *AuditLogger) GetStoreFailCount() int64

GetStoreFailCount 获取存储写入失败次数

与 GetBufferOverflowCount 对称, 可用于监控审计日志落库丢失情况。 storeFailCount 在溢出同步写入 store 失败时累加。

func (*AuditLogger) Log

func (l *AuditLogger) Log(event *AuditEvent)

Log 记录审计事件

func (*AuditLogger) LogAgent

func (l *AuditLogger) LogAgent(actor *Actor, target *Target, action string, result EventResult, duration time.Duration, details map[string]any)

LogAgent 记录 Agent 事件

func (*AuditLogger) LogAuth

func (l *AuditLogger) LogAuth(actor *Actor, action string, result EventResult, details map[string]any)

LogAuth 记录认证事件

func (*AuditLogger) LogError

func (l *AuditLogger) LogError(category EventCategory, actor *Actor, action string, err error, details map[string]any)

LogError 记录错误事件

func (*AuditLogger) LogLLM

func (l *AuditLogger) LogLLM(actor *Actor, provider, model string, result EventResult, duration time.Duration, tokenUsage map[string]int)

LogLLM 记录 LLM 调用事件

func (*AuditLogger) LogSecurity

func (l *AuditLogger) LogSecurity(level AuditLevel, actor *Actor, action string, result EventResult, details map[string]any)

LogSecurity 记录安全事件

func (*AuditLogger) LogTool

func (l *AuditLogger) LogTool(actor *Actor, toolName string, result EventResult, duration time.Duration, details map[string]any)

LogTool 记录工具调用事件

func (*AuditLogger) SetStore

func (l *AuditLogger) SetStore(store AuditStore)

SetStore 设置存储

func (*AuditLogger) Start

func (l *AuditLogger) Start(ctx context.Context)

Start 启动审计日志

func (*AuditLogger) Stop

func (l *AuditLogger) Stop()

Stop 停止审计日志

在锁内同时设置 running=false 和关闭 buffer,确保原子性。 这样 Log() 方法在检查 running 状态时不会向已关闭的 channel 发送。

type AuditOption

type AuditOption func(*AuditConfig)

AuditOption 审计选项

func WithAuditEnabled

func WithAuditEnabled(enabled bool) AuditOption

WithAuditEnabled 设置启用状态

func WithAuditLevel

func WithAuditLevel(level AuditLevel) AuditOption

WithAuditLevel 设置日志级别

func WithRetentionDays

func WithRetentionDays(days int) AuditOption

WithRetentionDays 设置保留天数

type AuditQuery

type AuditQuery struct {
	// StartTime 开始时间
	StartTime time.Time

	// EndTime 结束时间
	EndTime time.Time

	// Categories 类别
	Categories []EventCategory

	// Levels 级别
	Levels []AuditLevel

	// ActorID 执行者 ID
	ActorID string

	// TargetID 目标 ID
	TargetID string

	// Action 操作
	Action string

	// Result 结果
	Result EventResult

	// TraceID 追踪 ID
	TraceID string

	// Tags 标签
	Tags []string

	// Limit 限制
	Limit int

	// Offset 偏移
	Offset int

	// OrderBy 排序
	OrderBy string

	// OrderDesc 降序
	OrderDesc bool
}

AuditQuery 审计查询

type AuditReport

type AuditReport struct {
	// Period 时间段
	Period TimeRange `json:"period"`

	// TotalEvents 总事件数
	TotalEvents int64 `json:"total_events"`

	// ByCategory 按类别统计
	ByCategory map[EventCategory]int64 `json:"by_category"`

	// ByLevel 按级别统计
	ByLevel map[AuditLevel]int64 `json:"by_level"`

	// ByResult 按结果统计
	ByResult map[EventResult]int64 `json:"by_result"`

	// TopActors 最活跃执行者
	TopActors []ActorStats `json:"top_actors"`

	// TopActions 最常见操作
	TopActions []ActionStats `json:"top_actions"`

	// Errors 错误列表
	Errors []*AuditEvent `json:"errors,omitempty"`

	// GeneratedAt 生成时间
	GeneratedAt time.Time `json:"generated_at"`
}

AuditReport 审计报告

type AuditStore

type AuditStore interface {
	// Save 保存事件
	Save(ctx context.Context, event *AuditEvent) error

	// Query 查询事件
	Query(ctx context.Context, query AuditQuery) ([]*AuditEvent, error)

	// Count 统计事件数量
	Count(ctx context.Context, query AuditQuery) (int64, error)

	// Delete 删除事件
	Delete(ctx context.Context, ids []string) error

	// Cleanup 清理过期事件
	Cleanup(ctx context.Context, before time.Time) (int64, error)
}

AuditStore 审计存储接口

type EventCategory

type EventCategory string

EventCategory 事件类别

const (
	CategoryAuth     EventCategory = "auth"
	CategoryAgent    EventCategory = "agent"
	CategoryTool     EventCategory = "tool"
	CategoryLLM      EventCategory = "llm"
	CategoryMemory   EventCategory = "memory"
	CategoryWorkflow EventCategory = "workflow"
	CategoryNetwork  EventCategory = "network"
	CategorySecurity EventCategory = "security"
	CategoryConfig   EventCategory = "config"
	CategoryAdmin    EventCategory = "admin"
)

type EventFilter

type EventFilter func(*AuditEvent) bool

EventFilter 事件过滤器

func FilterByCategory

func FilterByCategory(categories ...EventCategory) EventFilter

FilterByCategory 按类别过滤

func FilterByLevel

func FilterByLevel(minLevel AuditLevel) EventFilter

FilterByLevel 按级别过滤

type EventHook

type EventHook func(*AuditEvent)

EventHook 事件钩子

type EventResult

type EventResult string

EventResult 事件结果

const (
	ResultSuccess EventResult = "success"
	ResultFailure EventResult = "failure"
	ResultDenied  EventResult = "denied"
	ResultError   EventResult = "error"
)

type MemoryAuditStore

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

MemoryAuditStore 内存审计存储

func NewMemoryAuditStore

func NewMemoryAuditStore() *MemoryAuditStore

NewMemoryAuditStore 创建内存存储

func (*MemoryAuditStore) Cleanup

func (s *MemoryAuditStore) Cleanup(ctx context.Context, before time.Time) (int64, error)

Cleanup 清理过期事件

func (*MemoryAuditStore) Count

func (s *MemoryAuditStore) Count(ctx context.Context, query AuditQuery) (int64, error)

Count 统计数量

func (*MemoryAuditStore) Delete

func (s *MemoryAuditStore) Delete(ctx context.Context, ids []string) error

Delete 删除事件

func (*MemoryAuditStore) Query

func (s *MemoryAuditStore) Query(ctx context.Context, query AuditQuery) ([]*AuditEvent, error)

Query 查询事件

func (*MemoryAuditStore) Save

func (s *MemoryAuditStore) Save(ctx context.Context, event *AuditEvent) error

Save 保存事件

type RequestInfo

type RequestInfo struct {
	// Method 方法
	Method string `json:"method,omitempty"`

	// Path 路径
	Path string `json:"path,omitempty"`

	// Query 查询参数
	Query map[string]string `json:"query,omitempty"`

	// Headers 请求头
	Headers map[string]string `json:"headers,omitempty"`

	// Body 请求体(脱敏后)
	Body any `json:"body,omitempty"`
}

RequestInfo 请求信息

type ResponseInfo

type ResponseInfo struct {
	// StatusCode 状态码
	StatusCode int `json:"status_code,omitempty"`

	// Body 响应体(脱敏后)
	Body any `json:"body,omitempty"`

	// Error 错误信息
	Error string `json:"error,omitempty"`
}

ResponseInfo 响应信息

type Target

type Target struct {
	// Type 类型
	Type string `json:"type"`

	// ID 标识
	ID string `json:"id"`

	// Name 名称
	Name string `json:"name,omitempty"`

	// Attributes 属性
	Attributes map[string]any `json:"attributes,omitempty"`
}

Target 目标

type TimeRange

type TimeRange struct {
	Start time.Time `json:"start"`
	End   time.Time `json:"end"`
}

TimeRange 时间范围

Jump to

Keyboard shortcuts

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