Răsfoiți Sursa

Fixed #TASK_QT-9810 jattach调整为cmd调用

Carl 1 an în urmă
părinte
comite
10f90f0eb3

+ 1 - 1
containers/registry_apm.go

@@ -38,7 +38,7 @@ func setK8sTag(c *Container, tag map[string]string, pid uint32) {
 
 func saveAppInfo(runtimeApps map[uint32]modelse.AppStatusInfo) {
 	appStr, _ := json.Marshal(runtimeApps)
-	dumpPath := path.Join(utils.GetDefaultLogPath(), "memdump")
+	dumpPath := path.Join(utils.GetDefaultRuntimePath(), "memdump")
 	err := os.MkdirAll(dumpPath, 0755)
 	if err != nil {
 		logrus.Error(err)

+ 3 - 1
dist/.gitignore

@@ -1,4 +1,6 @@
 .idea
 installer.version
 Cloudwise-euspace-installer*.sh
-logs/*
+logs/*
+package_dir/logs/*.log
+package_dir/runtime/memdump

+ 2 - 2
dist/package_dir/bin/agentctl

@@ -172,8 +172,8 @@ agentStart() {
 agentStop() {
   local agentPid
   if agentPid="$(getAgentPid)"; then
-    ${AGENT_BIN_DIR}/stop.sh ${agentPid}
-#    kill ${agentPid}
+#    ${AGENT_BIN_DIR}/stop.sh ${agentPid}
+    kill ${agentPid}
     echo "${BRAND_AGENT_PRODUCT_NAME} service stopped success."
     cat /dev/null > "${AGENT_PID_FILE}"
   else

+ 0 - 9
dist/package_dir/bin/start.sh

@@ -1,9 +0,0 @@
-#!/bin/bash
-echo "start in start.sh"
-#export CONFIG_SERVER=
-#export DATA_SERVER=
-export DISABLE_E2E_TRACING=false
-export DISABLE_STACK_TRACING=false
-pid=$(nohup $1 --listen="0.0.0.0:8123">>"/dev/null" 2>&1 & echo $!)
-AGENT_PID_FILE="$1.pid"
-echo ${pid} > "${AGENT_PID_FILE}"

+ 0 - 3
dist/package_dir/bin/stop.sh

@@ -1,3 +0,0 @@
-#!/bin/bash
-echo "stop in stop.sh"
-kill $1

+ 0 - 0
dist/package_dir/logs/.gitkeep


BIN
dist/package_dir/scripts/cwjattach


+ 1 - 1
dist/scripts/install_temp.sh

@@ -2882,7 +2882,7 @@ enableRootDropping() {
   #== CAP_SYS_ADMIN:访问特权 perf 事件信息
   #== CAP_SYS_RESOURCE:忽略资源限制
   #== CAP_NET_ADMIN:允许执行多种网络有关的操作
-  commandErrorWrapper setcap cap_dac_override,cap_fowner,cap_ipc_lock,cap_sys_ptrace,cap_sys_admin,cap_sys_resource,cap_net_admin+ep "${AGENT_BIN_DIR}/${AGENT_PROC}"
+  commandErrorWrapper setcap cap_setgid,cap_setuid,cap_dac_override,cap_fowner,cap_ipc_lock,cap_sys_ptrace,cap_sys_admin,cap_sys_resource,cap_net_admin+ep "${AGENT_BIN_DIR}/${AGENT_PROC}"
   local setCapCwServerAgentExitCode=$?
   if [ ${setCapCwServerAgentExitCode} -eq 0 ] ; then
     toConsoleInfo "Set file capabilities [${AGENT_PROC}]"

+ 1 - 1
dist/scripts/package.sh

@@ -144,7 +144,7 @@ tarSmartAgent() {
   cp -f "${SCRIPT_DIR}/uninstall.sh" ./package_dir
   #== 执行第一阶段压缩(源码压缩)Cloudwise-SmartAgent.tar
   toConsoleInfo "step【1】start【tar -cpf "${SMARTAGENT_PARENT_DIR}/${BRAND_AGENT_PRODUCT_NAME}.tar" ./package_dir/*】to ${BRAND_AGENT_PRODUCT_NAME}.tar"
-  tar -cpf "${SMARTAGENT_PARENT_DIR}/${BRAND_AGENT_PRODUCT_NAME}.tar" ./package_dir/* >>"${LOG_FILE}" 2>&1
+  tar -cpf "${SMARTAGENT_PARENT_DIR}/${BRAND_AGENT_PRODUCT_NAME}.tar" --exclude="*.gitkeep" --exclude="*.log" ./package_dir/* >>"${LOG_FILE}" 2>&1
   rm -f "./package_dir/uninstall.sh"
 
   if [ $? -ne 0 ]; then

+ 1 - 1
dist/scripts/uninstall.sh

@@ -21,7 +21,7 @@ readonly BRAND_AGENT_DEFAULT_USER_AND_GROUP_NAME="cloudwise"
 #== **********************************************************
 #== smartagentd
 readonly AGENT_PROC="euspace"
-readonly AGENT_INSTALLER_VERSION=0.0.7
+readonly AGENT_INSTALLER_VERSION=0.0.1
 #== **********************************************************
 #==  配置目录
 #== **********************************************************

+ 42 - 21
ebpftracer/tracer/jattach/jattach_linux_amd64.go

@@ -1,17 +1,21 @@
 package jattach
 
-/*
-#cgo CFLAGS: -I include
-#cgo amd64 LDFLAGS: ${SRCDIR}/lib/libjattach_amd64.a
-#cgo arm64 LDFLAGS: ${SRCDIR}/lib/libjattach_arm64.a
-#include <stdlib.h>
-// declaration jattach
-int jattach(int pid, int argc, char** argv, int print_output);
-*/
-import "C"
+///*
+//#cgo CFLAGS: -I include
+//#cgo amd64 LDFLAGS: ${SRCDIR}/lib/libjattach_amd64.a
+//#cgo arm64 LDFLAGS: ${SRCDIR}/lib/libjattach_arm64.a
+//#include <stdlib.h>
+//// declaration jattach
+//int jattach(int pid, int argc, char** argv, int print_output);
+//*/
+//import "C"
+
 import (
 	"fmt"
-	"unsafe"
+	"github.com/coroot/coroot-node-agent/utils"
+	"github.com/coroot/coroot-node-agent/utils/enums"
+	"os"
+	"strings"
 )
 
 type JvmJattacher struct {
@@ -21,17 +25,34 @@ type JvmJattacher struct {
 }
 
 func (j *JvmJattacher) JAttach() (int, error) {
-	cArgs := make([]*C.char, len(j.Args))
-	for i, arg := range j.Args {
-		cArgs[i] = C.CString(arg)
-		defer C.free(unsafe.Pointer(cArgs[i])) // free mem
-	}
+	// cmd方式
+	cwJattachCmdPath := utils.GetDefaultScriptsPath("cwjattach")
+	// 执行升级
+	args := []string{fmt.Sprintf("%d", j.Pid)}
+	args = append(args, j.Args...)
+	result, err := utils.AuthoritativeCMD(enums.RootUser, enums.DefaultTimeOut, os.Environ(), cwJattachCmdPath, args...)
 
-	// call C func jattach
-	// cArgs to **C.char
-	result := C.jattach(C.int(j.Pid), C.int(len(j.Args)), (**C.char)(unsafe.Pointer(&cArgs[0])), C.int(j.PrintOutput))
-	if int(result) != 0 {
-		return int(result), fmt.Errorf("[JAttach] jattacher failed")
+	if err != nil {
+		return -1, err
 	}
-	return int(result), nil
+	if strings.Contains(result, "JVM response code = 0") {
+		return 0, nil
+	} else {
+		return -1, fmt.Errorf("JVM returned %s", result)
+	}
+
+	//
+	//cArgs := make([]*C.char, len(j.Args))
+	//for i, arg := range j.Args {
+	//	cArgs[i] = C.CString(arg)
+	//	defer C.free(unsafe.Pointer(cArgs[i])) // free mem
+	//}
+	//
+	//// call C func jattach
+	//// cArgs to **C.char
+	//result := C.jattach(C.int(j.Pid), C.int(len(j.Args)), (**C.char)(unsafe.Pointer(&cArgs[0])), C.int(j.PrintOutput))
+	//if int(result) != 0 {
+	//	return int(result), fmt.Errorf("[JAttach] jattacher failed")
+	//}
+	//return int(result), nil
 }

+ 42 - 21
ebpftracer/tracer/jattach/jattach_linux_arm64.go

@@ -1,17 +1,21 @@
 package jattach
 
-/*
-#cgo CFLAGS: -I include
-#cgo amd64 LDFLAGS: ${SRCDIR}/lib/libjattach_amd64.a
-#cgo arm64 LDFLAGS: ${SRCDIR}/lib/libjattach_arm64.a
-#include <stdlib.h>
-// declaration jattach
-int jattach(int pid, int argc, char** argv, int print_output);
-*/
-import "C"
+///*
+//#cgo CFLAGS: -I include
+//#cgo amd64 LDFLAGS: ${SRCDIR}/lib/libjattach_amd64.a
+//#cgo arm64 LDFLAGS: ${SRCDIR}/lib/libjattach_arm64.a
+//#include <stdlib.h>
+//// declaration jattach
+//int jattach(int pid, int argc, char** argv, int print_output);
+//*/
+//import "C"
+
 import (
 	"fmt"
-	"unsafe"
+	"github.com/coroot/coroot-node-agent/utils"
+	"github.com/coroot/coroot-node-agent/utils/enums"
+	"os"
+	"strings"
 )
 
 type JvmJattacher struct {
@@ -21,17 +25,34 @@ type JvmJattacher struct {
 }
 
 func (j *JvmJattacher) JAttach() (int, error) {
-	cArgs := make([]*C.char, len(j.Args))
-	for i, arg := range j.Args {
-		cArgs[i] = C.CString(arg)
-		defer C.free(unsafe.Pointer(cArgs[i])) // free mem
-	}
+	// cmd方式
+	cwJattachCmdPath := utils.GetDefaultScriptsPath("cwjattach")
+	// 执行升级
+	args := []string{fmt.Sprintf("%d", j.Pid)}
+	args = append(args, j.Args...)
+	result, err := utils.AuthoritativeCMD(enums.RootUser, enums.DefaultTimeOut, os.Environ(), cwJattachCmdPath, args...)
 
-	// call C func jattach
-	// cArgs to **C.char
-	result := C.jattach(C.int(j.Pid), C.int(len(j.Args)), (**C.char)(unsafe.Pointer(&cArgs[0])), C.int(j.PrintOutput))
-	if int(result) != 0 {
-		return int(result), fmt.Errorf("[JAttach] jattacher failed")
+	if err != nil {
+		return -1, err
 	}
-	return int(result), nil
+	if strings.Contains(result, "JVM response code = 0") {
+		return 0, nil
+	} else {
+		return -1, fmt.Errorf("JVM returned %s", result)
+	}
+
+	//
+	//cArgs := make([]*C.char, len(j.Args))
+	//for i, arg := range j.Args {
+	//	cArgs[i] = C.CString(arg)
+	//	defer C.free(unsafe.Pointer(cArgs[i])) // free mem
+	//}
+	//
+	//// call C func jattach
+	//// cArgs to **C.char
+	//result := C.jattach(C.int(j.Pid), C.int(len(j.Args)), (**C.char)(unsafe.Pointer(&cArgs[0])), C.int(j.PrintOutput))
+	//if int(result) != 0 {
+	//	return int(result), fmt.Errorf("[JAttach] jattacher failed")
+	//}
+	//return int(result), nil
 }

+ 1 - 1
flags/flags.go

@@ -131,7 +131,7 @@ func init() {
 }
 
 func DumpTableFeatures() {
-	dumpPath := path.Join(utils.GetDefaultLogPath(), "memdump")
+	dumpPath := path.Join(utils.GetDefaultRuntimePath(), "memdump")
 	fileName := path.Join(dumpPath, "app.snap")
 	content, err := os.ReadFile(fileName)
 	if err != nil {

+ 8 - 0
utils/util.go

@@ -486,6 +486,14 @@ func GetDefaultLogPath() string {
 	return GetDefaultPath(LogsPath)
 }
 
+func GetDefaultRuntimePath() string {
+	return GetDefaultPath(RuntimePath)
+}
+
+func GetDefaultScriptsPath(path_name ...string) string {
+	return GetDefaultPath(ScriptPath, filepath.Join(path_name...))
+}
+
 func GetDefaultLibsPath(path_name ...string) string {
 	return GetDefaultPath(LibsPath, runtime.GOARCH, filepath.Join(path_name...))
 }