cmd/collector/main.go (59 lines of code) (raw):

//go:build linux // +build linux package main import ( "flag" "fmt" "os" "path" "runtime" "github.com/alibaba/kubeskoop/version" pod_collector "github.com/alibaba/kubeskoop/pkg/skoop/collector/podcollector" "k8s.io/apimachinery/pkg/util/json" log "k8s.io/klog/v2" ) func main() { runtime.GOMAXPROCS(1) runtime.LockOSThread() if os.Args[0] == "nsenter" { output, err := pod_collector.NSExec(os.Args) if err != nil { os.Stderr.WriteString(fmt.Sprintf("error: %v\n", err)) os.Stderr.Sync() os.Exit(1) } fmt.Print(output) return } var ( dumpPath, podNamespace, podName, runtimeEndpoint string showVersion bool ) flag.StringVar(&dumpPath, "dump-path", "/data/collector.json", "Collector result path") flag.StringVar(&podNamespace, "namespace", "", "pod namespace to collect") flag.StringVar(&podName, "name", "", "pod name to collect, 'host' as host network namespace") flag.StringVar(&runtimeEndpoint, "runtime-endpoint", "", "runtime socket addr to resolve pod info") flag.BoolVar(&showVersion, "version", false, "show version") flag.Parse() if showVersion { version.PrintVersion() os.Exit(0) } c, err := pod_collector.NewCollector(podNamespace, podName, runtimeEndpoint) if err != nil { log.Fatalf("error init collector, %v", err) } result, err := c.DumpNodeInfos() if err != nil { log.Fatalf("error dump node info: %v", err) } resultStr, err := json.Marshal(result) if err != nil { log.Fatalf("error serialize result: %v", err) } if _, err = os.Stat(path.Dir(dumpPath)); os.IsNotExist(err) { _ = os.MkdirAll(path.Dir(dumpPath), 0644) } err = os.WriteFile(dumpPath, resultStr, 0644) if err != nil { log.Fatalf("error save result: %v", err) } }