From b4aa80808303964ac89e1c8b6bc8e39986c2237e Mon Sep 17 00:00:00 2001 From: linxin Date: Wed, 12 Apr 2023 16:13:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E6=96=B9=E5=BC=8F=E4=B8=BA=E7=9B=B4=E6=8E=A5=E5=86=99?= =?UTF-8?q?=E5=85=A5systemd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- corepipe/corepipe.go | 32 ++++++++++++-------------------- corepipe/corepipe_test.go | 2 +- go.mod | 6 ++++-- go.sum | 4 ++-- 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/corepipe/corepipe.go b/corepipe/corepipe.go index 7857953..4fe2390 100644 --- a/corepipe/corepipe.go +++ b/corepipe/corepipe.go @@ -4,7 +4,6 @@ import ( "archive/zip" "context" "coredump-handler/config" - "coredump-handler/logger" "errors" "fmt" "io" @@ -16,6 +15,7 @@ import ( "github.com/containerd/containerd" "github.com/containerd/containerd/namespaces" + "github.com/coreos/go-systemd/v22/journal" ) const chunkSize = 1024 * 1024 * 1024 // 1GB @@ -80,7 +80,6 @@ func getImageId(container_id string, sock_path string) (string, error) { // 连接 containerd daemon client, err := containerd.New(sock_path) if err != nil { - logger.Logger.Println(err) return "", err } defer client.Close() @@ -88,13 +87,11 @@ func getImageId(container_id string, sock_path string) (string, error) { ctx := namespaces.WithNamespace(context.Background(), "k8s.io") container, err := client.LoadContainer(ctx, container_id) if err != nil { - logger.Logger.Println(err) return "", err } // 获取容器关联的镜像信息 imageRef, err := container.Image(ctx) if err != nil { - logger.Logger.Println(err) return "", err } return imageRef.Name(), nil @@ -173,46 +170,41 @@ func compress() error { return nil } + func main() { //切换到config文件路径 err := changeDirectory("/root/pipe/corepipe") if err != nil { - fmt.Println(err) + journal.Print(journal.PriErr, err.Error()) return } //读取config文件并初始化 pipe_config, err := config.PipeInit() if err != nil { - fmt.Println(err) + journal.Print(journal.PriErr, err.Error()) return } //判断硬盘使用率 flag, err := isMemorySufficient(pipe_config) if err != nil && !flag { - fmt.Println(err) + journal.Print(journal.PriErr, err.Error()) return } //判断参数传入是否符合要求 if len(os.Args) < 4 { - fmt.Println("parameter passing exception") + journal.Print(journal.PriErr, "parameter passing exception") return } //创建存储coredump内容文件夹 err = createCoreDumpDir(&pipe_config, os.Args) if err != nil { - fmt.Println(err) + journal.Print(journal.PriErr, err.Error()) return } //切换至存储coredump目录 err = changeDirectory(pipe_config.File_base_path) if err != nil { - fmt.Println(err) - return - } - //日志功能初始化 - err = logger.Init() - if err != nil { - fmt.Println(err) + journal.Print(journal.PriErr, err.Error()) return } //查找发生coredump进程对应的container id @@ -222,24 +214,24 @@ func main() { if err == nil && len(container_id) != 0 { image_id, err = getImageId(container_id, pipe_config.Containered_sock_path) if err != nil { - logger.Logger.Println(err) + journal.Print(journal.PriInfo, err.Error()) } } //将image name写入coredump config err = writeCoreConfig(image_id) if err != nil { - logger.Logger.Println(err) + journal.Print(journal.PriInfo, err.Error()) } //根据配置项选择存储coredump文件方式 if pipe_config.Save_model == 0 { err = writeCoreDumpToFile() if err != nil { - logger.Logger.Println(err) + journal.Print(journal.PriErr, err.Error()) } } else if pipe_config.Save_model == 1 { err = compress() if err != nil { - logger.Logger.Println(err) + journal.Print(journal.PriErr, err.Error()) } } } diff --git a/corepipe/corepipe_test.go b/corepipe/corepipe_test.go index f94fae9..057bfec 100644 --- a/corepipe/corepipe_test.go +++ b/corepipe/corepipe_test.go @@ -196,7 +196,7 @@ func TestGetImageId(t *testing.T) { name: "get image id successfully", input: input{ container_id: "invalid", - sock_path: "/run/containerd/containerd.sock", + sock_path: "/run/k3s/containerd/containerd.sock", }, want: "", wantErr: true, diff --git a/go.mod b/go.mod index 8b20e15..6b9e5f6 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,10 @@ module coredump-handler go 1.20 -require github.com/containerd/containerd v1.7.0 +require ( + github.com/containerd/containerd v1.7.0 + github.com/coreos/go-systemd/v22 v22.5.0 +) require ( github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 // indirect @@ -33,7 +36,6 @@ require ( github.com/opencontainers/runc v1.1.4 // indirect github.com/opencontainers/runtime-spec v1.1.0-rc.1 // indirect github.com/opencontainers/selinux v1.11.0 // indirect - github.com/pelletier/go-toml v1.9.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/sirupsen/logrus v1.9.0 // indirect go.opencensus.io v0.24.0 // indirect diff --git a/go.sum b/go.sum index 3a9ea06..711a287 100644 --- a/go.sum +++ b/go.sum @@ -27,6 +27,8 @@ github.com/containerd/ttrpc v1.2.1/go.mod h1:sIT6l32Ph/H9cvnJsfXM5drIVzTr5A2flTf github.com/containerd/typeurl/v2 v2.1.0 h1:yNAhJvbNEANt7ck48IlEGOxP7YAp6LLpGn5jZACDNIE= github.com/containerd/typeurl/v2 v2.1.0/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= @@ -110,8 +112,6 @@ github.com/opencontainers/runtime-spec v1.1.0-rc.1/go.mod h1:jwyrGlmzljRJv/Fgzds github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=