# openObserver **Repository Path**: golang_common/open-observer ## Basic Information - **Project Name**: openObserver - **Description**: 日志文件上报轮子,日志文件上报轮子日志文件上报轮子日志文件上报轮子日志文件上报轮子日志文件上报轮子日志文件上报轮子日志文件上报轮子 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-09-30 - **Last Updated**: 2026-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenObserve Go 客户端 本包提供一个轻量且无额外依赖的写入器,用于调用 OpenObserve 原生 JSON 日志写入接口: ```text POST /api/{organization}/{stream}/_json ``` 支持异步批量写入、有界队列、重试、Basic Auth、TLS、优雅刷新,以及标准库 `log/slog`。 ## 基础用法 ```bash go get gitee.com/golang_common/open-observer@v1.0.5 ``` ```go client, err := openobserve.New(openobserve.Config{ Endpoint: "http://127.0.0.1:5080", Organization: "default", Stream: "app_logs", Username: "root@example.com", Password: "ChangeMe_StrongPassword_2026", }) if err != nil { panic(err) } defer client.Close(context.Background()) client.Enqueue(map[string]any{ "trace_id": "abc123", "message": "hello from Go", }) ``` ## 标准库 slog ```go logger := slog.New(openobserve.NewSlogHandler(client)) logger.Info("user created", "user_id", 1001) ``` ## GoFrame ### 1. `gflog` 子包会将 OpenObserve 客户端安装为 GoFrame 全局日志处理器,并提供 请求链路追踪、访问日志、SQL 日志和响应包装。 ```go import "gitee.com/golang_common/open-observer/gflog" var ( Main = gcmd.Command{ Name: "main", Usage: "main", Brief: "start http server", Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { //这里初始化 logger, err := gflog.Init(ctx) if err != nil { return err } //延时关闭 defer func() { shutdownCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if shutdownErr := logger.Close(shutdownCtx); shutdownErr != nil { _, _ = fmt.Fprintf(os.Stderr, "logging shutdown failed: %v\n", shutdownErr) } }() s := g.Server() //这里设置日志 s.SetHandler(gflog.WithoutTraceIDHeader(s.GetHandler())) s.Group("/", func(group *ghttp.RouterGroup) { //这里设置中间件 group.Middleware( gflog.MiddlewareTraceID, gflog.MiddlewareAccessLog, gflog.MiddlewareHandlerResponse, ) group.Bind( hello.NewV1(), ) }) s.Run() return nil }, } ) ``` ### 2. 默认配置前缀为 `logging`: ```yaml # https://goframe.org/docs/core/glog-config logger: # 全局日志配置 level: "all" # 记录所有日志级别 stdout: true # 同时输出到标准输出 ctxKeys: # 写入日志的上下文键列表 - "trace_id" # 将 trace_id 写入日志上下文 logging: # 项目日志模块配置 serviceName: "testJaeger" # 服务名称 environment: "dev" # 运行环境 recordRequestParams: true # 记录请求参数 maxRequestParamBytes: 8192 # 请求参数最大记录字节数 sensitiveRequestParams: # 需要脱敏的请求参数 - "password" # 脱敏 password - "passwd" # 脱敏 passwd - "pwd" # 脱敏 pwd - "token" # 脱敏 token - "access_token" # 脱敏 access_token - "refresh_token" # 脱敏 refresh_token - "authorization" # 脱敏 authorization - "secret" # 脱敏 secret - "client_secret" # 脱敏 client_secret openobserve: # OpenObserve 日志上报配置 enabled: true # 启用 OpenObserve 上报 endpoint: "http://127.0.0.1:5080" # OpenObserve 服务地址 organization: "default" # 组织名称 stream: "app_logs" # 日志流名称 username: "root@example.com" # 登录用户名 password: "ChangeMe_StrongPassword_2026" # 登录密码 batchSize: 100 # 每批上报日志条数 flushInterval: "2s" # 日志刷新间隔 queueSize: 10000 # 本地待上报队列容量 requestTimeout: "5s" # 请求超时时间 maxRetries: 3 # 请求失败最大重试次数 insecureSkipVerify: false # 是否跳过 TLS 证书校验 # https://goframe.org/docs/core/gdb-config-file database: # 数据库配置 logger: # 数据库日志配置 path: "./logs/sql" # SQL 日志文件目录 level: "all" # 记录所有数据库日志级别 stdout: true # 同时输出到标准输出 prefix: "sql" # SQL 日志前缀 ctxKeys: # 写入数据库日志的上下文键列表 - "trace_id" # 将 trace_id 写入数据库日志上下文 default: # 默认数据库连接配置 link: "mysql:bc:CHMsxwK7W8yLTBdx@tcp(127.0.0.1:3306)/bc?loc=Local&parseTime=true" # MySQL 连接地址 debug: true # 开启 SQL 调试输出 ``` ## 效果图 ### 请求信息 ![PixPin_2026-09-30_13-21-55.png](PixPin_2026-09-30_13-21-55.png) ### openObserve 里面查询 ![2026-09-30_13-19-22.png](2026-09-30_13-19-22.png)