From e9d34f5a7c9b6b55e519f4df58d539c87d8fff6a Mon Sep 17 00:00:00 2001 From: Wangjunqi123 Date: Mon, 26 Jun 2023 09:10:36 +0800 Subject: [PATCH] biotop probe: define the kprobe of blk_mq_start_request --- gala-ops/server/agentmanager/command.go | 105 +++++++++++----------- gala-ops/server/agentmanager/component.go | 8 +- observation/src/biotop/biotop.bpf.c | 13 +++ 3 files changed, 70 insertions(+), 56 deletions(-) diff --git a/gala-ops/server/agentmanager/command.go b/gala-ops/server/agentmanager/command.go index 587b382c..5a95588b 100644 --- a/gala-ops/server/agentmanager/command.go +++ b/gala-ops/server/agentmanager/command.go @@ -1,52 +1,53 @@ -package agentmanager - -import ( - "strings" - - "gitee.com/openeuler/PilotGo-plugins/sdk/common" - "gitee.com/openeuler/PilotGo-plugins/sdk/logger" - "openeuler.org/PilotGo/gala-ops-plugin/database" - "openeuler.org/PilotGo/gala-ops-plugin/utils" -) - -// 获取业务机集群gala-gopher版本信息 -func GetPkgVersion(machines []*database.Agent, batch *common.Batch, pkgname string) ([]*database.Agent, error) { - cmdresults, err := Galaops.Sdkmethod.RunCommand(batch, "rpm -qi"+pkgname) - if err == nil { - for _, result := range cmdresults { - if result.RetCode == 1 && strings.Contains(result.Stdout, "is not installed") && result.Stderr == "" { - logger.Error("%s not installed happened when getpackageversion: %s, %s, %s; ", pkgname, result.MachineUUID, result.MachineIP, result.Stderr) - continue - } else if result.RetCode == 127 && result.Stdout == "" && strings.Contains(result.Stderr, "command not found") { - logger.Error("rpm not installed when getpackageversion: %s, %s, %s", result.MachineUUID, result.MachineIP, result.Stderr) - continue - } else if result.RetCode == 0 && len(result.Stdout) > 0 && result.Stderr == "" { - reader := strings.NewReader(result.Stdout) - v, err := utils.ReadInfo(reader, `^Version.*`) - if err != nil && len(v) != 0 { - logger.Error("failed to read RPM package version when getpackageversion: %s, %s, %s", result.MachineUUID, result.MachineIP, result.Stderr) - continue - } - for _, m := range machines { - if m.UUID == result.MachineUUID { - switch pkgname { - case "gala-gopher": - m.Gopher_version = v - case "gala-anteater": - m.Anteater_version = v - case "gala-inference": - m.Inference_version = v - case "gala-spider": - m.Spider_version = v - } - } - } - } else { - logger.Error("failed to run command: rpm -qi %s in %s, %s, %s when getpackageversion", pkgname, result.MachineUUID, result.MachineIP, result.Stderr) - continue - } - } - return machines, nil - } - return nil, err -} +package agentmanager + +import ( + "fmt" + "strings" + + "gitee.com/openeuler/PilotGo-plugins/sdk/common" + "gitee.com/openeuler/PilotGo-plugins/sdk/logger" + "openeuler.org/PilotGo/gala-ops-plugin/database" + "openeuler.org/PilotGo/gala-ops-plugin/utils" +) + +// 获取业务机集群gala-gopher版本信息 +func GetPkgVersion(machines []*database.Agent, batch *common.Batch, pkgname string) ([]*database.Agent, error) { + cmdresults, err := Galaops.Sdkmethod.RunCommand(batch, "rpm -qi"+pkgname) + if err == nil { + for _, result := range cmdresults { + if result.RetCode == 1 && strings.Contains(result.Stdout, "is not installed") && result.Stderr == "" { + logger.Error("%s not installed happened when getpackageversion: %s, %s, %s; ", pkgname, result.MachineUUID, result.MachineIP, result.Stderr) + continue + } else if result.RetCode == 127 && result.Stdout == "" && strings.Contains(result.Stderr, "command not found") { + logger.Error("rpm not installed when getpackageversion: %s, %s, %s", result.MachineUUID, result.MachineIP, result.Stderr) + continue + } else if result.RetCode == 0 && len(result.Stdout) > 0 && result.Stderr == "" { + reader := strings.NewReader(result.Stdout) + v, err := utils.ReadInfo(reader, `^Version.*`) + if err != nil && len(v) != 0 { + logger.Error("failed to read RPM package version when getpackageversion: %s, %s, %s", result.MachineUUID, result.MachineIP, result.Stderr) + continue + } + for _, m := range machines { + if m.UUID == result.MachineUUID { + switch pkgname { + case "gala-gopher": + m.Gopher_version = v + case "gala-anteater": + m.Anteater_version = v + case "gala-inference": + m.Inference_version = v + case "gala-spider": + m.Spider_version = v + } + } + } + } else { + logger.Error("failed to run command: rpm -qi %s in %s, %s, %s when getpackageversion", pkgname, result.MachineUUID, result.MachineIP, result.Stderr) + continue + } + } + return machines, nil + } + return nil, fmt.Errorf("runcommand error: %s", err) +} diff --git a/gala-ops/server/agentmanager/component.go b/gala-ops/server/agentmanager/component.go index 66d49ff5..6182f7d9 100644 --- a/gala-ops/server/agentmanager/component.go +++ b/gala-ops/server/agentmanager/component.go @@ -215,10 +215,10 @@ func (o *Opsclient) DeployStatusCheck() error { // 获取业务机集群gala-gopher安装部署情况 // 获取业务机集群gala-gopher版本信息 - // machines, err = GetPkgVersion(machines, batch, "gala-gopher") - // if err != nil { - // return err - // } + machines, err = GetPkgVersion(machines, batch, "gala-gopher") + if err != nil { + return err + } // 添加业务机集群信息至opsclient.agentmap for _, m := range machines { diff --git a/observation/src/biotop/biotop.bpf.c b/observation/src/biotop/biotop.bpf.c index 470e6411..a1ee71f7 100644 --- a/observation/src/biotop/biotop.bpf.c +++ b/observation/src/biotop/biotop.bpf.c @@ -43,4 +43,17 @@ int BPF_KPROBE(blk_account_io_start, struct request *req) return 0; } +SEC("kprobe/blk_mq_start_request") +int BPF_KPROBE(blk_mq_start_request, struct request *req) +{ + /* time block I/O */ + struct start_req_t start_req; + + start_req.ts = bpf_ktime_get_ns(); + start_req.data_len = BPF_CORE_READ(req, __data_len); + bpf_map_update_elem(&start, &req, &start_req, BPF_ANY); + + return 0; +} + char LICENSE[] SEC("license") = "GPL"; -- Gitee