Эх сурвалжийг харах

Feature #TASK_QT-18250 对接采控平台规则
Merge branch 'master' of https://git.cloudwise.com/TSB/ebpf-demo

Feature #TASK_QT-18250 对接采控平台规则

Carl 3 сар өмнө
parent
commit
91d5c5e502

+ 29 - 0
config/manager.go

@@ -1,12 +1,14 @@
 package config
 
 import (
+	"encoding/json"
 	"net/url"
 	"os"
 	"strings"
 	"sync"
 
 	"github.com/coroot/coroot-node-agent/flags"
+	klog "github.com/sirupsen/logrus"
 	"github.com/spf13/viper"
 )
 
@@ -630,6 +632,33 @@ func (c *Config) CgroupRoot() string {
 	return "/sys/fs/cgroup"
 }
 
+// AgentRule 配置文件 agent.rules 中的单条规则
+type AgentRule struct {
+	AppName  string `json:"app_name"`
+	RuleType int    `json:"rule_type"`
+	Filters  string `json:"filters"`
+}
+
+// AgentRules 从配置文件读取 agent.rules JSON 字符串,解析后返回规则列表
+// 若未配置或解析失败,返回 nil
+func (c *Config) AgentRules() []AgentRule {
+	val := c.getValue("agent.rules")
+	if val == nil {
+		return nil
+	}
+	s, ok := val.(string)
+	if !ok || s == "" {
+
+		return nil
+	}
+	var rules []AgentRule
+	if err := json.Unmarshal([]byte(s), &rules); err != nil {
+		klog.Errorf("failed to parse agent.rules: %v", err)
+		return nil
+	}
+	return rules
+}
+
 // TracesEndpoint 获取 TracesEndpoint
 // 优先级:命令行参数/环境变量 > 根据 DataServer 和 ServerPrefix 计算
 // 如果都为空,返回 nil

+ 3 - 0
containers/apm_heartbeat_batch.go

@@ -131,6 +131,9 @@ func (r *Registry) TaskHeartbeatBatch() {
 	for {
 		select {
 		case <-ticker.C:
+			if !*flags.EnableLicenseCheck {
+				continue
+			}
 			r.DoHeartbeatBatch()
 		}
 	}

+ 1 - 0
containers/apm_register_app.go

@@ -15,6 +15,7 @@ func (c *Container) RegisterAppInfo(r *Registry, pid uint32) error {
 		c.AppInfo.AppIdHash.IntVal, _ = utils.BuildInt64ID(c.WhiteSettingInfo.AppName).ToInt64()
 		c.AppInfo.AppIdHash.HashtVal = utils.BuildInt64ID(c.WhiteSettingInfo.AppName).ToHashByte()
 		c.AppInfo.CodeType = c.GetCodeTypeFromCache(pid)
+		c.AppInfo.RegisterAt = time.Now().Unix()
 		c.AppInfo.SetAppSuccess()
 		return nil
 	}

+ 22 - 0
containers/apm_white_list_v2.go

@@ -3,7 +3,9 @@ package containers
 import (
 	"encoding/json"
 	"fmt"
+	"time"
 	"github.com/coroot/coroot-node-agent/common"
+	"github.com/coroot/coroot-node-agent/config"
 	"github.com/coroot/coroot-node-agent/utils"
 	. "github.com/coroot/coroot-node-agent/utils/modelse"
 	log "github.com/sirupsen/logrus"
@@ -32,6 +34,15 @@ func (r *Registry) pullWhiteListV2() (bool, error) {
 	if common.IsOpenFilter() {
 		return false, nil
 	}
+
+	// 若配置文件中存在 agent.rules,则直接使用,不走接口
+	if agentRules := config.Get().AgentRules(); len(agentRules) > 0 {
+		whiteData := buildWhiteDataFromAgentRules(agentRules)
+		r.setWhiteListV2(whiteData)
+		saveRule(whiteData)
+		return true, nil
+	}
+
 	nodeInfo := r.nodeInfo.GetNodeInfo()
 	if nodeInfo == nil {
 		return false, fmt.Errorf("could not find node info")
@@ -64,6 +75,17 @@ func (r *Registry) pullWhiteListV2() (bool, error) {
 	return true, nil
 }
 
+func buildWhiteDataFromAgentRules(rules []config.AgentRule) WhiteDataV2 {
+	var settings []WhiteSettingInfo
+	for _, rule := range rules {
+		settings = append(settings, WhiteSettingInfo{
+			AppName:    rule.AppName,
+			ProcessKey: rule.Filters,
+		})
+	}
+	return WhiteDataV2{SettingList: settings, LastUpdatedTime: int(time.Now().Unix())}
+}
+
 func saveRule(runtimeApps WhiteDataV2) {
 	appStr, _ := json.Marshal(runtimeApps)
 	dumpPath := path.Join(utils.GetDefaultRuntimePath(), "memdump")

+ 1 - 4
containers/registry.go

@@ -168,10 +168,7 @@ func NewRegistry(reg prometheus.Registerer, kernelVersion string, nodeInfo *Node
 			return nil, err
 		}
 		try.Go(r.TaskRegisterHost, CatchFn)
-		// 启动心跳批量上报任务(仅在开启 License 校验时)
-		if cfg.EnableLicenseCheck() {
-			try.Go(r.TaskHeartbeatBatch, CatchFn)
-		}
+		try.Go(r.TaskHeartbeatBatch, CatchFn)
 	}
 
 	if err = reg.Register(r); err != nil {

+ 1 - 1
dist/aarch64/package_dir/bin/agentctl

@@ -40,7 +40,7 @@ readonly EXIT_CODE_GENERIC_ERROR=1
 #==  配置重要文件名称
 #== **********************************************************
 readonly AGENT_PROC="euspace"
-readonly AGENT_CONFIG_PATH=""
+readonly AGENT_CONFIG_PATH="${INSTALL_DIR}/conf/config.yaml"
 
 readonly AGENT_PID_FILE="${INSTALL_DIR}/bin/${AGENT_PROC}.pid"
 

+ 0 - 0
dist/aarch64/package_dir/conf/.gitkeep


+ 4 - 0
dist/aarch64/package_dir/conf/config.yaml

@@ -0,0 +1,4 @@
+server:
+  server_prefix: "/doop-agent-api"
+"logging":
+  "log_level": "info"

+ 7 - 0
dist/aarch64/scripts/install_temp.sh

@@ -2945,6 +2945,13 @@ main() {
 #**********************************************************
 main "$@"
 
+----DEFAULT-CONFIG-START----
+server:
+  server_prefix: "/doop-agent-api"
+"logging":
+  "log_level": "info"
+----DEFAULT-CONFIG-END----
+
 ################################################
 ############# DO NOT REMOVE THIS ###############
 #### DO NOT ADD ANYTHING BELOW THIS COMMENT ####

+ 3 - 1
dist/aarch64/scripts/package.sh

@@ -583,7 +583,9 @@ main() {
     editScriptFileParam "readonly BRAND_PRODUCT_NAME" "\"${PARAM_NAME}\"" "${SMARTAGENT_DIR}/package_dir/bin/agentctl"
     editScriptFileParam "readonly BRAND_PRODUCT_NAME_LOWER" "\"${PARAM_NAME}\"" "${SMARTAGENT_DIR}/package_dir/bin/agentctl"
   #== 设置 agentctl 配置文件路径(存在时)
-    editScriptFileParam "readonly AGENT_CONFIG_PATH" "\"${PARAM_CONFIG_PATH}\"" "${SMARTAGENT_DIR}/package_dir/bin/agentctl"
+#    if [ -n "${PARAM_CONFIG_PATH}" ]; then
+#        editScriptFileParam "readonly AGENT_CONFIG_PATH" "\"${PARAM_CONFIG_PATH}\"" "${SMARTAGENT_DIR}/package_dir/bin/agentctl"
+#    fi
   fi
 
   #== 设置 uninstall 插件名

+ 1 - 1
dist/package_dir/bin/agentctl

@@ -40,7 +40,7 @@ readonly EXIT_CODE_GENERIC_ERROR=1
 #==  配置重要文件名称
 #== **********************************************************
 readonly AGENT_PROC="euspace"
-readonly AGENT_CONFIG_PATH=""
+readonly AGENT_CONFIG_PATH="${INSTALL_DIR}/config.yaml"
 
 readonly AGENT_PID_FILE="${INSTALL_DIR}/bin/${AGENT_PROC}.pid"
 

+ 1 - 1
dist/x86_64/package_dir/bin/agentctl

@@ -40,7 +40,7 @@ readonly EXIT_CODE_GENERIC_ERROR=1
 #==  配置重要文件名称
 #== **********************************************************
 readonly AGENT_PROC="euspace"
-readonly AGENT_CONFIG_PATH=""
+readonly AGENT_CONFIG_PATH="${INSTALL_DIR}/conf/config.yaml"
 
 readonly AGENT_PID_FILE="${INSTALL_DIR}/bin/${AGENT_PROC}.pid"
 

+ 0 - 0
dist/x86_64/package_dir/conf/.gitkeep


+ 4 - 0
dist/x86_64/package_dir/conf/config.yaml

@@ -0,0 +1,4 @@
+server:
+  server_prefix: "/doop-agent-api"
+"logging":
+  "log_level": "info"

+ 7 - 0
dist/x86_64/scripts/install_temp.sh

@@ -2945,6 +2945,13 @@ main() {
 #**********************************************************
 main "$@"
 
+----DEFAULT-CONFIG-START----
+server:
+  server_prefix: "/doop-agent-api"
+"logging":
+  "log_level": "info"
+----DEFAULT-CONFIG-END----
+
 ################################################
 ############# DO NOT REMOVE THIS ###############
 #### DO NOT ADD ANYTHING BELOW THIS COMMENT ####

+ 3 - 1
dist/x86_64/scripts/package.sh

@@ -583,7 +583,9 @@ main() {
     editScriptFileParam "readonly BRAND_PRODUCT_NAME" "\"${PARAM_NAME}\"" "${SMARTAGENT_DIR}/package_dir/bin/agentctl"
     editScriptFileParam "readonly BRAND_PRODUCT_NAME_LOWER" "\"${PARAM_NAME}\"" "${SMARTAGENT_DIR}/package_dir/bin/agentctl"
   #== 设置 agentctl 配置文件路径(存在时)
-    editScriptFileParam "readonly AGENT_CONFIG_PATH" "\"${PARAM_CONFIG_PATH}\"" "${SMARTAGENT_DIR}/package_dir/bin/agentctl"
+#    if [ -n "${PARAM_CONFIG_PATH}" ]; then
+#        editScriptFileParam "readonly AGENT_CONFIG_PATH" "\"${PARAM_CONFIG_PATH}\"" "${SMARTAGENT_DIR}/package_dir/bin/agentctl"
+#    fi
   fi
 
   #== 设置 uninstall 插件名

+ 2 - 2
main.go

@@ -338,7 +338,7 @@ func main() {
 
 			log.Infoln("send url is ", *flags.DataServer+*flags.ServerPrefix+urlRoute)
 			// req, err := http.NewRequest("POST", "http://10.0.7.115:18080/api/v2/ebpf/receive", bytes.NewBuffer(jsonData))
-			req, err := http.NewRequest("POST", *flags.DataServer+*flags.ServerPrefix+urlRoute, bytes.NewBuffer(jsonData))
+			req, err := http.NewRequest("POST", "http://"+*flags.DataServer+*flags.ServerPrefix+urlRoute, bytes.NewBuffer(jsonData))
 			if err != nil {
 				log.Errorf(err.Error())
 				return
@@ -366,7 +366,7 @@ func main() {
 			// 读取响应内容
 			responseData, err := io.ReadAll(response.Body)
 			if err != nil {
-				log.Infoln("Error:", err)
+				log.Errorf("Error:", err)
 				return
 			}