github.com/qiniu/go-sdk/v7@v7.27.0/examples/sandbox_metrics_logs/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 "os" 8 "time" 9 10 "github.com/qiniu/go-sdk/v7/sandbox" 11 ) 12 13 func main() { 14 apiKey := os.Getenv("QINIU_API_KEY") 15 if apiKey == "" { 16 log.Fatal("请设置 QINIU_API_KEY 环境变量") 17 } 18 19 apiURL := os.Getenv("QINIU_SANDBOX_API_URL") 20 21 c, err := sandbox.NewClient(&sandbox.Config{ 22 APIKey: apiKey, 23 Endpoint: apiURL, 24 }) 25 if err != nil { 26 log.Fatalf("创建客户端失败: %v", err) 27 } 28 29 ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) 30 defer cancel() 31 32 // 1. 创建沙箱 33 templateID := "base" 34 timeout := int32(120) 35 sb, _, err := c.CreateAndWait(ctx, sandbox.CreateParams{ 36 TemplateID: templateID, 37 Timeout: &timeout, 38 }, sandbox.WithPollInterval(2*time.Second)) 39 if err != nil { 40 log.Fatalf("创建沙箱失败: %v", err) 41 } 42 fmt.Printf("沙箱已就绪: %s\n", sb.ID()) 43 defer func() { 44 _ = sb.Kill(context.Background()) 45 fmt.Println("沙箱已终止") 46 }() 47 48 // 等待一段时间让沙箱产生指标数据 49 fmt.Println("等待 5 秒收集指标...") 50 time.Sleep(5 * time.Second) 51 52 // 2. 获取指标 53 metrics, err := sb.GetMetrics(ctx, nil) 54 if err != nil { 55 log.Fatalf("获取指标失败: %v", err) 56 } 57 fmt.Printf("指标数据 (%d 条):\n", len(metrics)) 58 for _, m := range metrics { 59 fmt.Printf(" - 时间: %s, CPU: %.1f%%, 内存: %d/%d bytes\n", 60 m.Timestamp.Format(time.RFC3339), m.CPUUsedPct, m.MemUsed, m.MemTotal) 61 } 62 63 // 3. 获取日志 64 logs, err := sb.GetLogs(ctx, nil) 65 if err != nil { 66 fmt.Printf("\n获取日志失败(服务端可能暂不支持): %v\n", err) 67 } else { 68 fmt.Printf("\n日志 (%d 条):\n", len(logs.Logs)) 69 for _, entry := range logs.Logs { 70 fmt.Printf(" [%s] %s\n", entry.Timestamp.Format(time.RFC3339), entry.Line) 71 } 72 } 73 }