多进程链路跟踪示例
Code Source: https://github.com/gogf/examples/tree/main/observability/trace/processes
简介
本目录包含了使用GoFrame不同进程管理方式实现多进程分布式链路跟踪的示例。包括:
-
命令行进程管理 (
gcmd/
)- 使用
gcmd
包进行进程管理 - 演示基于命令行的进程创建
- 展示父子进程间的链路跟踪上下文传播
- 使用
-
程序化进程管理 (
gproc/
)- 使用
gproc
包进行进程管理 - 演示程序化的进程创建
- 展示进程层级中的链路跟踪传播
- 使用
目录结构
.
├── gcmd/ # 命令行进程管理示例
│ ├── main.go # 主进程实现
│ └── sub/ # 子进程实现
│ └── sub.go # 子进程代码
├── gproc/ # 进程管理示例
│ ├── main.go # 主进程实现
│ └── sub/ # 子进程实现
│ └── sub.go # 子进程代码
├── go.mod # Go模块文件
└── go.sum # Go模块校验和
环境要求
- Go 1.22 或更高版本
- GoFrame框架
- GoFrame链路跟踪支持
功能特性
本示例展示了以下功能:
-
进程管理
// gcmd方式
Main = &gcmd.Command{
Name: "main",
Brief: "main process",
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
return gproc.ShellRun(ctx, `go run sub/sub.go`)
},
}
// gproc方式
if err := gproc.ShellRun(ctx, `go run sub/sub.go`); err != nil {
panic(err)
} -
链路跟踪上下文传播
// 主进程
ctx := gctx.GetInitCtx()
g.Log().Debug(ctx, `this is main process`)
// 子进程
ctx := gctx.GetInitCtx()
g.Log().Debug(ctx, `this is sub process`) -
日志和调试
- 进程标识
- 调试日志
- 错误报告
管理方式对比
命令行管理 (gcmd/)
-
特点:
- 命令行界面
- 结构化命令处理
- 内置帮助和文档
- 命令层级支持
-
使用场景:
- CLI应用程序
- 命令驱动工具
- 交互式应用
程序化管理 (gproc/)
-
特点:
- 程序化进程控制
- 直接进程操作
- Shell命令执行
- 进程同步
-
使用场景:
- 后台进程
- 服务管理
- 进程自动化
使用说明
命令行示例
-
进入gcmd示例目录:
cd gcmd
-
运行示例:
go run main.go
程序化管理示例
-
进入gproc示例目录:
cd gproc
-
运行示例:
go run main.go
实现说明
两个示例都演示了:
-
进程创建
- 主进程初始化
- 子进程启动
- 进程环境设置
-
上下文管理
// 创建和初始化上下文
ctx := gctx.GetInitCtx()
// 在进程间传播上下文
g.Log().Debug(ctx, `process message`) -
错误处理
// 进程执行错误处理
if err := gproc.ShellRun(ctx, command); err != nil {
panic(err)
}
// 命令执行错误处理
if err := cmd.Run(ctx); err != nil {
return err
}