Bladeren bron

Fixed #TASK_QT-9810 [tp/jvm header支持4.18][去除暂时用不到的协议逻辑(4.x指令超限)][支持Jvm Header解析assume,优化Header解法][初始化NativeAgent目录结构][初始化debug so]

Carl 1 jaar geleden
bovenliggende
commit
ad52c7e52a
47 gewijzigde bestanden met toevoegingen van 885 en 407 verwijderingen
  1. 8 0
      Makefile
  2. 1 1
      containers/apm_register_app.go
  3. 5 5
      containers/registry.go
  4. 12 0
      containers/stack.go
  5. 76 0
      dist/package_dir/agents/NativeAgent/ReleaseNotes
  6. 0 0
      dist/package_dir/agents/NativeAgent/bin/.tmp
  7. 33 0
      dist/package_dir/agents/NativeAgent/conf/agent.properties
  8. 15 0
      dist/package_dir/agents/NativeAgent/conf/interceptors.xml
  9. BIN
      dist/package_dir/agents/NativeAgent/lib/apmAgent.jar
  10. 311 0
      dist/package_dir/agents/NativeAgent/lib/logs/20240925/server.log
  11. BIN
      dist/package_dir/agents/NativeAgent/libnativeAgent.so
  12. 0 0
      dist/package_dir/agents/NativeAgent/logs/.tmp
  13. 29 0
      dist/package_dir/agents/NativeAgent/logs/app
  14. 3 0
      dist/package_dir/agents/NativeAgent/logs/nativeagent.log
  15. 6 0
      dist/package_dir/agents/NativeAgent/plugin.properties
  16. BIN
      dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-apiurl.jar
  17. BIN
      dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-autotracebusinesspkg.jar
  18. BIN
      dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-httpclient.jar
  19. BIN
      dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-jedis.jar
  20. BIN
      dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-kafka.jar
  21. BIN
      dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-lettuce.jar
  22. BIN
      dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-mysql.jar
  23. BIN
      dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-tomcat.jar
  24. BIN
      dist/package_dir/libs/amd64/jvm/cwlibnet.so
  25. BIN
      dist/package_dir/libs/arm64/jvm/cwlibnet.so
  26. 0 0
      dist/package_dir/runtime/.gitkeep
  27. 0 0
      dist/package_dir/scripts/.gitkeep
  28. 24 5
      ebpftracer/Makefile
  29. 12 0
      ebpftracer/bindata_linux_amd64.go
  30. 2 0
      ebpftracer/ebpf/config.h
  31. 4 1
      ebpftracer/ebpf/ebpf.c
  32. 42 31
      ebpftracer/ebpf/l7/apm_trace.c
  33. 2 0
      ebpftracer/ebpf/l7/cassandra.c
  34. 4 3
      ebpftracer/ebpf/l7/l7.c
  35. 1 0
      ebpftracer/ebpf/l7/nats.c
  36. 2 0
      ebpftracer/ebpf/utrace/java/include/java_common.h
  37. 207 315
      ebpftracer/ebpf/utrace/java/net/client.probe.bpf.c
  38. 46 36
      ebpftracer/ebpf/utrace/java/net/server.probe.bpf.c
  39. 4 2
      ebpftracer/jvm.go
  40. 2 3
      ebpftracer/netcore.go
  41. 7 1
      ebpftracer/stack.go
  42. 2 2
      ebpftracer/tracer.go
  43. 4 0
      ebpftracer/tracer/inject/inject_linux_amd64.go
  44. 6 1
      ebpftracer/tracer/socket.go
  45. 2 1
      flags/flags.go
  46. 4 0
      utils/modelse/bpf_struct.go
  47. 9 0
      utils/util.go

+ 8 - 0
Makefile

@@ -1,9 +1,11 @@
 FILTER=
 PARAMS=
+# Set debug
 ifeq ($(debug),1)
 PARAMS+=debug=1
 endif
 
+# Set filter pid
 ifdef pid
 	ifneq ($(pid),0)
 		PARAMS+=pid=$(pid)
@@ -11,10 +13,16 @@ ifdef pid
 	endif
 endif
 
+# Set send data
 ifeq ($(send),1)
 FILTER+= SEND=1
 endif
 
+# Set eBPF build kernel
+ifdef kernel
+	PARAMS+= kernel=${kernel}
+endif
+
 all: c-build go-build
 
 build:

+ 1 - 1
containers/apm_register_app.go

@@ -17,7 +17,7 @@ func (c *Container) RegisterAppInfo(r *Registry, pid uint32) error {
 	whiteAppName := c.WhiteSettingInfo.AppName
 	if originAppName != whiteAppName {
 		if c.AppInfo.CodeType.IsUnknownCode() || c.AppInfo.CodeType.IsWaitCheck() {
-			return fmt.Errorf("unknown app code")
+			return fmt.Errorf("[Register] Unknown app code,Wait buildIDs.")
 		}
 		//c.AppInfo.AppId, err = utils.BuildInt64ID(whiteAppName).ToInt64()
 		c.AppInfo.AppIdHash.IntVal, err = utils.BuildInt64ID(whiteAppName).ToInt64()

+ 5 - 5
containers/registry.go

@@ -204,8 +204,6 @@ func (r *Registry) handleEvents(ch <-chan ebpftracer.Event) {
 							err = c.StackTrace(r.tracer, pid)
 							if err != nil {
 								klog.WithField("pid", pid).WithError(err).Errorf("[registry][end] Failed attach stack trace!")
-							} else {
-								klog.WithField("pid", pid).Infoln("[registry] Attach Stack success!")
 							}
 						} else {
 							klog.WithError(err).Errorf("[registry] Failed registerAppInfo.")
@@ -343,7 +341,7 @@ func (r *Registry) handleEvents(ch <-chan ebpftracer.Event) {
 						c.attachUprobes(r.tracer, e.Pid)
 						err = c.StackTrace(r.tracer, e.Pid)
 						if err != nil {
-							klog.Errorf("Stack trace error", err)
+							klog.WithField("pid", e.Pid).WithError(err).Errorf("[registry][end] Failed attach stack trace!")
 						}
 					}
 				} else {
@@ -353,7 +351,9 @@ func (r *Registry) handleEvents(ch <-chan ebpftracer.Event) {
 				//fmt.Println("ebpftracer.EventTypeConnectionOpen==================", e.Pid)
 				if c := r.getOrCreateContainer(e.Pid); c != nil {
 					c.onConnectionOpen(e.Pid, e.Fd, e.SrcAddr, e.DstAddr, e.Timestamp, false)
-					c.eventReady()
+					if !c.checkEventReady() && c.buildIDs(e.Pid) {
+						c.eventReady()
+					}
 					if common.IsOpenFilter() && common.IsFilterPid(e.Pid) {
 						c.WhiteSettingInfo.AppName = enums.TestApp
 						err := c.RegisterAppInfo(r, e.Pid)
@@ -364,7 +364,7 @@ func (r *Registry) handleEvents(ch <-chan ebpftracer.Event) {
 						c.attachUprobes(r.tracer, e.Pid)
 						err = c.StackTrace(r.tracer, e.Pid)
 						if err != nil {
-							klog.Errorf("Stack trace error", err)
+							klog.WithField("pid", e.Pid).WithError(err).Errorf("[registry][end] Failed attach stack trace!")
 						}
 					}
 				} else {

+ 12 - 0
containers/stack.go

@@ -31,15 +31,27 @@ type uprobesDef struct {
 func (c *Container) StackTrace(tracer *ebpftracer.Tracer, pid uint32) error {
 	// 禁用stack
 	if tracer.DisableStackTracing() {
+		klog.Warnf("StackTrace tracing is disabled")
 		return nil
 	}
 
 	if common.IsOpenFilter() && !common.IsFilterPid(pid) {
+		klog.Warnf("StackTrace %d tracing is filter", pid)
 		return nil
 	}
 
 	codeType := c.GetCodeTypeFromCache(pid)
 	if codeType.IsUnknownCode() {
+		klog.Warnf("StackTrace %d tracing is IsUnknownCode", pid)
+		return nil
+	}
+
+	p := c.processes[pid]
+	if p == nil {
+		return fmt.Errorf("unknown process %d", pid)
+	}
+
+	if p.stackUprobesChecked {
 		return nil
 	}
 

+ 76 - 0
dist/package_dir/agents/NativeAgent/ReleaseNotes

@@ -0,0 +1,76 @@
+-----2021-09-30-----
+JavaAgentVersion: 2.10.0 Release
+PackageTime: 2021-09-29
+
+新增功能:
+1.Solr采集支持
+2.Neo4j采集支持
+3.Hessian-RPC采集支持
+4.CUBRID数据库采集支持
+5.Glassfish&Jersey兼容性扩展
+6.Websphere-Liberty采集支持
+7.Couchdb文档数据库采集支持
+8.Google-Httpclient采集支持
+9.Motan-RPC采集支持
+10.JS自动注入支持Jetty7,Jetty8,Jetty9,tomcat6,tomcat9
+11.NoSQL-cassandra-datastax采集支持
+12.JavaAgent支持热集成,热卸载
+13.支持异步调用堆栈采集
+
+优化:
+1.CPU与内存熔断兼容Windows操作系统
+2.兼容6.x版本APM平台
+
+修复:
+1.堆栈采集层数较多时TPS抖动剧烈问题修复
+2.MQ消费者采集默认端口内置8080端口问题修复
+
+-----2021-11-05-----
+JavaAgentVersion: 2.10.1 Release
+PackageTime: 2021-11-04
+
+新增功能:
+1.完善应用日志注入APM TraceID功能,支持Log4j,Log4j2,Logback,JUL共4种日志框架类型
+
+优化:
+1.Spring Cloud Gateway采集兼容更多版本,去掉开关"agent.gateway",提升易用性
+2.Spring Webflux 链路调用追踪监控优化
+
+修复:
+1.修复JavaAgent采集东方通(TongWeb)产生重复请求问题
+
+
+-----2021-11-05-----
+JavaAgentVersion: 2.11.0 Release
+PackageTime: 2021-12-30
+
+新增功能:
+1.新增GRPC +Protobuff数据发送模式
+2.新增HSF-RPC采集支持
+
+-----2022-01-19-----
+JavaAgentVersion: 2.11.1 Release
+PackageTime: 2022-01-26
+
+修复:
+1.feign插件重构优化
+2.适配webflux中有过滤器的方式
+3.包含中文uri数据时,pattern_uri和uri的值不一致问题解决
+
+-----2022-03-17-----
+JavaAgentVersion: 2.12.0 Release
+PackageTime: 2022-03-17
+
+修复:
+1、fastjson冲突报错-高低版本复现
+2、去除Eureka开关
+3、熔断后日志级别强制至ERROR
+4、mysql-connector-6.0.2进行适配版本适配修正
+5、license校验优化
+
+新增:
+1、Jedis 3.3.0+适配
+2、宝兰德9.5适配
+3、GRPC后续接口改造
+4、tongweb5、6、7-js自动注入
+5、Lettuce,Jedis集群采集--农行迁移

+ 0 - 0
dist/package_dir/agents/NativeAgent/bin/.tmp


+ 33 - 0
dist/package_dir/agents/NativeAgent/conf/agent.properties

@@ -0,0 +1,33 @@
+#APM Server url.
+ConfigDomain=http://10.0.12.192:18080
+SendDomain=http://10.0.12.192:18080
+
+# License Key.
+LicenseKey = J45Engw88NeHUZ4Q7qNsK8L47FTH**QvgW113IEnsNaBNMR5zZ**oj/g!!!!
+
+# Logging level.
+# Optional: DEBUG, INFO, WARN, ERROR
+agent.log.level=ERROR
+
+# Web container that supports automatic injection of js.
+# Optional:
+# tomcat6,tomcat7,tomcat8,tomcat9
+# jetty7,jetty8,jetty9
+# weblogic10,weblogic12
+# jboss7,resin3
+js=
+
+# js file location
+jsEnvAdd=http://data.toushibao.com/api/browser/settings/v70/js
+
+# js Inject positon, Optional: html(Default),body,head
+#js.inject.position=html
+
+# Chinese is not supported!
+appName=javaApplication
+
+# Compression mode, Optional: gzip(Default), disable
+send.compression.mode=gzip
+
+# Asynchronous stack collection, Optional: true, false(Default)
+#tracer.asynchronous=false

+ 15 - 0
dist/package_dir/agents/NativeAgent/conf/interceptors.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<interceptors>
+    <interceptor id="define-interceptor_id">
+        <definition>
+            <class_name>define-class</class_name>
+            <method_name>define-method</method_name>
+            <paramters>
+            </paramters>
+        </definition>
+        <info>
+            <uri>$this.name</uri>
+        </info>
+    </interceptor>
+
+</interceptors>

BIN
dist/package_dir/agents/NativeAgent/lib/apmAgent.jar


+ 311 - 0
dist/package_dir/agents/NativeAgent/lib/logs/20240925/server.log

@@ -0,0 +1,311 @@
+2024-09-25 09:26:19.712 [main] INFO  org.example.demoA.DemoAApplication - Starting DemoAApplication v1.0-SNAPSHOT on ubuntu2204 with PID 98387 (/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar started by root in /opt/cloudwise/smartagent/agent/NativeAgent/lib)
+2024-09-25 09:26:19.718 [main] INFO  org.example.demoA.DemoAApplication - No active profile set, falling back to default profiles: default
+2024-09-25 09:26:21.008 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode!
+2024-09-25 09:26:21.015 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2024-09-25 09:26:21.103 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 34ms. Found 0 Redis repository interfaces.
+2024-09-25 09:26:22.015 [main] INFO  org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 38081 (http)
+2024-09-25 09:26:22.036 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-38081"]
+2024-09-25 09:26:22.037 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
+2024-09-25 09:26:22.038 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.37]
+2024-09-25 09:26:22.169 [main] INFO  org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2024-09-25 09:26:22.170 [main] INFO  org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2318 ms
+2024-09-25 09:26:23.132 [main] WARN  org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoController': Unsatisfied dependency expressed through field 'demoAMySQLService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoAMySQLService' defined in URL [jar:file:/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/example/demoA/service/DemoAMySQLService.class]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: com/cloudwise/agent/core/config/AgentConfig
+2024-09-25 09:26:23.200 [main] INFO  org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener - 
+
+Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
+2024-09-25 09:26:23.207 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
+org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoController': Unsatisfied dependency expressed through field 'demoAMySQLService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoAMySQLService' defined in URL [jar:file:/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/example/demoA/service/DemoAMySQLService.class]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: com/cloudwise/agent/core/config/AgentConfig
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.example.demoA.DemoAApplication.main(DemoAApplication.java:15)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
+	at org.springframework.boot.loader.Launcher.launch(Launcher.java:109)
+	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
+	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoAMySQLService' defined in URL [jar:file:/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/example/demoA/service/DemoAMySQLService.class]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: com/cloudwise/agent/core/config/AgentConfig
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1318)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1213)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
+	... 28 common frames omitted
+Caused by: java.lang.NoClassDefFoundError: com/cloudwise/agent/core/config/AgentConfig
+	at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java)
+	at java.util.concurrent.Executors$DelegatedExecutorService.execute(Executors.java:668)
+	at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.<clinit>(AbandonedConnectionCleanupThread.java:80)
+	at java.lang.Class.forName0(Native Method)
+	at java.lang.Class.forName(Class.java:264)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.<clinit>(NonRegisteringDriver.java:98)
+	at java.lang.Class.forName0(Native Method)
+	at java.lang.Class.forName(Class.java:264)
+	at org.example.demoA.service.DemoAMySQLService.<clinit>(DemoAMySQLService.java:31)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
+	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204)
+	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1310)
+	... 39 common frames omitted
+2024-09-25 09:32:42.067 [main] INFO  org.example.demoA.DemoAApplication - Starting DemoAApplication v1.0-SNAPSHOT on ubuntu2204 with PID 98461 (/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar started by root in /opt/cloudwise/smartagent/agent/NativeAgent/lib)
+2024-09-25 09:32:42.076 [main] INFO  org.example.demoA.DemoAApplication - No active profile set, falling back to default profiles: default
+2024-09-25 09:32:43.374 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode!
+2024-09-25 09:32:43.383 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2024-09-25 09:32:43.475 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 37ms. Found 0 Redis repository interfaces.
+2024-09-25 09:32:44.521 [main] INFO  org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 38081 (http)
+2024-09-25 09:32:44.546 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-38081"]
+2024-09-25 09:32:44.547 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
+2024-09-25 09:32:44.548 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.37]
+2024-09-25 09:32:44.706 [main] INFO  org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2024-09-25 09:32:44.707 [main] INFO  org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2459 ms
+2024-09-25 09:32:45.739 [main] WARN  org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoController': Unsatisfied dependency expressed through field 'demoAMySQLService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoAMySQLService' defined in URL [jar:file:/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/example/demoA/service/DemoAMySQLService.class]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: com/cloudwise/agent/core/config/AgentConfig
+2024-09-25 09:32:45.810 [main] INFO  org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener - 
+
+Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
+2024-09-25 09:32:45.817 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
+org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoController': Unsatisfied dependency expressed through field 'demoAMySQLService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoAMySQLService' defined in URL [jar:file:/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/example/demoA/service/DemoAMySQLService.class]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: com/cloudwise/agent/core/config/AgentConfig
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)
+	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1420)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897)
+	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
+	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
+	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
+	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
+	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
+	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
+	at org.example.demoA.DemoAApplication.main(DemoAApplication.java:15)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.lang.reflect.Method.invoke(Method.java:498)
+	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
+	at org.springframework.boot.loader.Launcher.launch(Launcher.java:109)
+	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
+	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
+Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'demoAMySQLService' defined in URL [jar:file:/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/org/example/demoA/service/DemoAMySQLService.class]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: com/cloudwise/agent/core/config/AgentConfig
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1318)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1213)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
+	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
+	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
+	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1307)
+	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
+	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
+	... 28 common frames omitted
+Caused by: java.lang.NoClassDefFoundError: com/cloudwise/agent/core/config/AgentConfig
+	at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java)
+	at java.util.concurrent.Executors$DelegatedExecutorService.execute(Executors.java:668)
+	at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.<clinit>(AbandonedConnectionCleanupThread.java:80)
+	at java.lang.Class.forName0(Native Method)
+	at java.lang.Class.forName(Class.java:264)
+	at com.mysql.cj.jdbc.NonRegisteringDriver.<clinit>(NonRegisteringDriver.java:98)
+	at java.lang.Class.forName0(Native Method)
+	at java.lang.Class.forName(Class.java:264)
+	at org.example.demoA.service.DemoAMySQLService.<clinit>(DemoAMySQLService.java:31)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
+	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204)
+	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
+	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1310)
+	... 39 common frames omitted
+2024-09-25 10:17:36.410 [main] INFO  org.example.demoA.DemoAApplication - Starting DemoAApplication v1.0-SNAPSHOT on ubuntu2204 with PID 99049 (/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar started by root in /opt/cloudwise/smartagent/agent/NativeAgent/lib)
+2024-09-25 10:17:36.416 [main] INFO  org.example.demoA.DemoAApplication - No active profile set, falling back to default profiles: default
+2024-09-25 10:17:37.580 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode!
+2024-09-25 10:17:37.592 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2024-09-25 10:17:37.678 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 35ms. Found 0 Redis repository interfaces.
+2024-09-25 10:17:38.554 [main] INFO  org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 38081 (http)
+2024-09-25 10:17:38.578 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-38081"]
+2024-09-25 10:17:38.579 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
+2024-09-25 10:17:38.579 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.37]
+2024-09-25 10:17:38.713 [main] INFO  org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2024-09-25 10:17:38.713 [main] INFO  org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2171 ms
+2024-09-25 10:17:40.225 [main] INFO  org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
+2024-09-25 10:17:40.706 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-38081"]
+2024-09-25 10:17:40.752 [main] INFO  org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 38081 (http) with context path ''
+2024-09-25 10:17:40.775 [main] INFO  org.example.demoA.DemoAApplication - Started DemoAApplication in 5.613 seconds (JVM running for 8.686)
+2024-09-25 10:18:05.109 [http-nio-38081-exec-1] INFO  org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2024-09-25 10:18:05.110 [http-nio-38081-exec-1] INFO  org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
+2024-09-25 10:18:05.126 [http-nio-38081-exec-1] INFO  org.springframework.web.servlet.DispatcherServlet - Completed initialization in 15 ms
+2024-09-25 10:18:05.203 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:18:05.203 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - model :normal
+2024-09-25 10:18:06.092 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoAMySQLService - select count(*) from tb_user: 0
+2024-09-25 10:18:06.121 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoAMySQLService - i1 = 0
+2024-09-25 10:18:06.152 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoAMySQLService - i3 = 0
+2024-09-25 10:18:06.154 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - execute mysql success.....
+2024-09-25 10:18:06.988 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - execute redis success.....delete,set,get,get value is value2-string 
+2024-09-25 10:18:06.989 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoOutService - begin  out : http://127.0.0.1:38081/hello2
+2024-09-25 10:18:06.998 [http-nio-38081-exec-2] INFO  org.example.demoA.controller.ServerLogController - hello2 .....Wed Sep 25 10:18:06 UTC 2024
+2024-09-25 10:18:07.093 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoOutService - http://127.0.0.1:38081/hello2 response : hello2 success at Wed Sep 25 10:18:06 UTC 2024
+2024-09-25 10:18:07.093 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoOutService - out success : http://127.0.0.1:38081/hello2
+2024-09-25 10:18:07.094 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - 应用「demoA」测试简单LogBack--Info级别日志--normalTest
+2024-09-25 10:18:07.195 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:19:56.903 [http-nio-38081-exec-4] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:19:56.903 [http-nio-38081-exec-4] INFO  org.example.demoA.controller.ServerLogController - model :normal
+2024-09-25 10:19:57.206 [http-nio-38081-exec-4] INFO  org.example.demoA.service.DemoAMySQLService - select count(*) from tb_user: 0
+2024-09-25 10:19:57.232 [http-nio-38081-exec-4] INFO  org.example.demoA.service.DemoAMySQLService - i1 = 0
+2024-09-25 10:19:57.258 [http-nio-38081-exec-4] INFO  org.example.demoA.service.DemoAMySQLService - i3 = 0
+2024-09-25 10:19:57.259 [http-nio-38081-exec-4] INFO  org.example.demoA.controller.ServerLogController - execute mysql success.....
+2024-09-25 10:19:57.340 [http-nio-38081-exec-4] INFO  org.example.demoA.controller.ServerLogController - execute redis success.....delete,set,get,get value is value2-string 
+2024-09-25 10:19:57.341 [http-nio-38081-exec-4] INFO  org.example.demoA.service.DemoOutService - begin  out : http://127.0.0.1:38081/hello2
+2024-09-25 10:19:57.345 [http-nio-38081-exec-5] INFO  org.example.demoA.controller.ServerLogController - hello2 .....Wed Sep 25 10:19:57 UTC 2024
+2024-09-25 10:19:57.351 [http-nio-38081-exec-4] INFO  org.example.demoA.service.DemoOutService - http://127.0.0.1:38081/hello2 response : hello2 success at Wed Sep 25 10:19:57 UTC 2024
+2024-09-25 10:19:57.355 [http-nio-38081-exec-4] INFO  org.example.demoA.service.DemoOutService - out success : http://127.0.0.1:38081/hello2
+2024-09-25 10:19:57.355 [http-nio-38081-exec-4] INFO  org.example.demoA.controller.ServerLogController - 应用「demoA」测试简单LogBack--Info级别日志--normalTest
+2024-09-25 10:19:57.456 [http-nio-38081-exec-4] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:25:33.563 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:25:33.564 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - model :normal
+2024-09-25 10:25:33.850 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoAMySQLService - select count(*) from tb_user: 0
+2024-09-25 10:25:33.884 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoAMySQLService - i1 = 0
+2024-09-25 10:25:33.919 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoAMySQLService - i3 = 0
+2024-09-25 10:25:33.920 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - execute mysql success.....
+2024-09-25 10:25:34.041 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - execute redis success.....delete,set,get,get value is value2-string 
+2024-09-25 10:25:34.041 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoOutService - begin  out : http://127.0.0.1:38081/hello2
+2024-09-25 10:25:34.048 [http-nio-38081-exec-9] INFO  org.example.demoA.controller.ServerLogController - hello2 .....Wed Sep 25 10:25:34 UTC 2024
+2024-09-25 10:25:34.052 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoOutService - http://127.0.0.1:38081/hello2 response : hello2 success at Wed Sep 25 10:25:34 UTC 2024
+2024-09-25 10:25:34.052 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoOutService - out success : http://127.0.0.1:38081/hello2
+2024-09-25 10:25:34.053 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - 应用「demoA」测试简单LogBack--Info级别日志--normalTest
+2024-09-25 10:25:34.153 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:28:34.303 [SpringContextShutdownHook] INFO  org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Shutting down ExecutorService 'applicationTaskExecutor'
+2024-09-25 10:28:47.629 [main] INFO  org.example.demoA.DemoAApplication - Starting DemoAApplication v1.0-SNAPSHOT on ubuntu2204 with PID 99355 (/opt/cloudwise/Demo-A-1.0-SNAPSHOT.jar started by root in /opt/cloudwise/smartagent/agent/NativeAgent/lib)
+2024-09-25 10:28:47.635 [main] INFO  org.example.demoA.DemoAApplication - No active profile set, falling back to default profiles: default
+2024-09-25 10:28:48.993 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode!
+2024-09-25 10:28:48.999 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2024-09-25 10:28:49.067 [main] INFO  org.springframework.data.repository.config.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 33ms. Found 0 Redis repository interfaces.
+2024-09-25 10:28:49.955 [main] INFO  org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 38081 (http)
+2024-09-25 10:28:49.979 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-38081"]
+2024-09-25 10:28:49.981 [main] INFO  org.apache.catalina.core.StandardService - Starting service [Tomcat]
+2024-09-25 10:28:49.982 [main] INFO  org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.37]
+2024-09-25 10:28:50.110 [main] INFO  org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2024-09-25 10:28:50.111 [main] INFO  org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2362 ms
+2024-09-25 10:28:51.608 [main] INFO  org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
+2024-09-25 10:28:52.115 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-38081"]
+2024-09-25 10:28:52.195 [main] INFO  org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 38081 (http) with context path ''
+2024-09-25 10:28:52.215 [main] INFO  org.example.demoA.DemoAApplication - Started DemoAApplication in 6.108 seconds (JVM running for 10.423)
+2024-09-25 10:32:48.936 [http-nio-38081-exec-1] INFO  org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2024-09-25 10:32:48.937 [http-nio-38081-exec-1] INFO  org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
+2024-09-25 10:32:48.955 [http-nio-38081-exec-1] INFO  org.springframework.web.servlet.DispatcherServlet - Completed initialization in 17 ms
+2024-09-25 10:32:49.027 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:32:49.029 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - model :normal
+2024-09-25 10:32:49.883 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoAMySQLService - select count(*) from tb_user: 0
+2024-09-25 10:32:49.913 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoAMySQLService - i1 = 0
+2024-09-25 10:32:49.944 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoAMySQLService - i3 = 0
+2024-09-25 10:32:49.950 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - execute mysql success.....
+2024-09-25 10:32:50.723 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - execute redis success.....delete,set,get,get value is value2-string 
+2024-09-25 10:32:50.724 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoOutService - begin  out : http://127.0.0.1:38081/hello2
+2024-09-25 10:32:50.735 [http-nio-38081-exec-2] INFO  org.example.demoA.controller.ServerLogController - hello2 .....Wed Sep 25 10:32:50 UTC 2024
+2024-09-25 10:32:50.779 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoOutService - http://127.0.0.1:38081/hello2 response : hello2 success at Wed Sep 25 10:32:50 UTC 2024
+2024-09-25 10:32:50.779 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoOutService - out success : http://127.0.0.1:38081/hello2
+2024-09-25 10:32:50.780 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - 应用「demoA」测试简单LogBack--Info级别日志--normalTest
+2024-09-25 10:32:50.881 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:33:10.804 [http-nio-38081-exec-3] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:33:10.805 [http-nio-38081-exec-3] INFO  org.example.demoA.controller.ServerLogController - model :normal
+2024-09-25 10:33:11.103 [http-nio-38081-exec-3] INFO  org.example.demoA.service.DemoAMySQLService - select count(*) from tb_user: 0
+2024-09-25 10:33:11.131 [http-nio-38081-exec-3] INFO  org.example.demoA.service.DemoAMySQLService - i1 = 0
+2024-09-25 10:33:11.160 [http-nio-38081-exec-3] INFO  org.example.demoA.service.DemoAMySQLService - i3 = 0
+2024-09-25 10:33:11.161 [http-nio-38081-exec-3] INFO  org.example.demoA.controller.ServerLogController - execute mysql success.....
+2024-09-25 10:33:11.244 [http-nio-38081-exec-3] INFO  org.example.demoA.controller.ServerLogController - execute redis success.....delete,set,get,get value is value2-string 
+2024-09-25 10:33:11.245 [http-nio-38081-exec-3] INFO  org.example.demoA.service.DemoOutService - begin  out : http://127.0.0.1:38081/hello2
+2024-09-25 10:33:11.249 [http-nio-38081-exec-4] INFO  org.example.demoA.controller.ServerLogController - hello2 .....Wed Sep 25 10:33:11 UTC 2024
+2024-09-25 10:33:11.252 [http-nio-38081-exec-3] INFO  org.example.demoA.service.DemoOutService - http://127.0.0.1:38081/hello2 response : hello2 success at Wed Sep 25 10:33:11 UTC 2024
+2024-09-25 10:33:11.253 [http-nio-38081-exec-3] INFO  org.example.demoA.service.DemoOutService - out success : http://127.0.0.1:38081/hello2
+2024-09-25 10:33:11.253 [http-nio-38081-exec-3] INFO  org.example.demoA.controller.ServerLogController - 应用「demoA」测试简单LogBack--Info级别日志--normalTest
+2024-09-25 10:33:11.353 [http-nio-38081-exec-3] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:33:22.565 [http-nio-38081-exec-6] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:33:22.566 [http-nio-38081-exec-6] INFO  org.example.demoA.controller.ServerLogController - model :normal
+2024-09-25 10:33:22.835 [http-nio-38081-exec-6] INFO  org.example.demoA.service.DemoAMySQLService - select count(*) from tb_user: 0
+2024-09-25 10:33:22.861 [http-nio-38081-exec-6] INFO  org.example.demoA.service.DemoAMySQLService - i1 = 0
+2024-09-25 10:33:22.890 [http-nio-38081-exec-6] INFO  org.example.demoA.service.DemoAMySQLService - i3 = 0
+2024-09-25 10:33:22.890 [http-nio-38081-exec-6] INFO  org.example.demoA.controller.ServerLogController - execute mysql success.....
+2024-09-25 10:33:22.973 [http-nio-38081-exec-6] INFO  org.example.demoA.controller.ServerLogController - execute redis success.....delete,set,get,get value is value2-string 
+2024-09-25 10:33:22.973 [http-nio-38081-exec-6] INFO  org.example.demoA.service.DemoOutService - begin  out : http://127.0.0.1:38081/hello2
+2024-09-25 10:33:22.978 [http-nio-38081-exec-5] INFO  org.example.demoA.controller.ServerLogController - hello2 .....Wed Sep 25 10:33:22 UTC 2024
+2024-09-25 10:33:22.982 [http-nio-38081-exec-6] INFO  org.example.demoA.service.DemoOutService - http://127.0.0.1:38081/hello2 response : hello2 success at Wed Sep 25 10:33:22 UTC 2024
+2024-09-25 10:33:22.984 [http-nio-38081-exec-6] INFO  org.example.demoA.service.DemoOutService - out success : http://127.0.0.1:38081/hello2
+2024-09-25 10:33:22.984 [http-nio-38081-exec-6] INFO  org.example.demoA.controller.ServerLogController - 应用「demoA」测试简单LogBack--Info级别日志--normalTest
+2024-09-25 10:33:23.085 [http-nio-38081-exec-6] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:43:31.268 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:43:31.269 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - model :normal
+2024-09-25 10:43:31.544 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoAMySQLService - select count(*) from tb_user: 0
+2024-09-25 10:43:31.574 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoAMySQLService - i1 = 0
+2024-09-25 10:43:31.609 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoAMySQLService - i3 = 0
+2024-09-25 10:43:31.612 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - execute mysql success.....
+2024-09-25 10:43:31.693 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - execute redis success.....delete,set,get,get value is value2-string 
+2024-09-25 10:43:31.694 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoOutService - begin  out : http://127.0.0.1:38081/hello2
+2024-09-25 10:43:31.697 [http-nio-38081-exec-9] INFO  org.example.demoA.controller.ServerLogController - hello2 .....Wed Sep 25 10:43:31 UTC 2024
+2024-09-25 10:43:31.701 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoOutService - http://127.0.0.1:38081/hello2 response : hello2 success at Wed Sep 25 10:43:31 UTC 2024
+2024-09-25 10:43:31.702 [http-nio-38081-exec-8] INFO  org.example.demoA.service.DemoOutService - out success : http://127.0.0.1:38081/hello2
+2024-09-25 10:43:31.702 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - 应用「demoA」测试简单LogBack--Info级别日志--normalTest
+2024-09-25 10:43:31.803 [http-nio-38081-exec-8] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:43:33.460 [http-nio-38081-exec-10] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:43:33.460 [http-nio-38081-exec-10] INFO  org.example.demoA.controller.ServerLogController - model :normal
+2024-09-25 10:43:33.758 [http-nio-38081-exec-10] INFO  org.example.demoA.service.DemoAMySQLService - select count(*) from tb_user: 0
+2024-09-25 10:43:33.789 [http-nio-38081-exec-10] INFO  org.example.demoA.service.DemoAMySQLService - i1 = 0
+2024-09-25 10:43:33.813 [http-nio-38081-exec-10] INFO  org.example.demoA.service.DemoAMySQLService - i3 = 0
+2024-09-25 10:43:33.814 [http-nio-38081-exec-10] INFO  org.example.demoA.controller.ServerLogController - execute mysql success.....
+2024-09-25 10:43:33.905 [http-nio-38081-exec-10] INFO  org.example.demoA.controller.ServerLogController - execute redis success.....delete,set,get,get value is value2-string 
+2024-09-25 10:43:33.906 [http-nio-38081-exec-10] INFO  org.example.demoA.service.DemoOutService - begin  out : http://127.0.0.1:38081/hello2
+2024-09-25 10:43:33.909 [http-nio-38081-exec-2] INFO  org.example.demoA.controller.ServerLogController - hello2 .....Wed Sep 25 10:43:33 UTC 2024
+2024-09-25 10:43:33.912 [http-nio-38081-exec-10] INFO  org.example.demoA.service.DemoOutService - http://127.0.0.1:38081/hello2 response : hello2 success at Wed Sep 25 10:43:33 UTC 2024
+2024-09-25 10:43:33.912 [http-nio-38081-exec-10] INFO  org.example.demoA.service.DemoOutService - out success : http://127.0.0.1:38081/hello2
+2024-09-25 10:43:33.912 [http-nio-38081-exec-10] INFO  org.example.demoA.controller.ServerLogController - 应用「demoA」测试简单LogBack--Info级别日志--normalTest
+2024-09-25 10:43:34.012 [http-nio-38081-exec-10] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:43:38.463 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:43:38.463 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - model :normal
+2024-09-25 10:43:38.709 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoAMySQLService - select count(*) from tb_user: 0
+2024-09-25 10:43:38.740 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoAMySQLService - i1 = 0
+2024-09-25 10:43:38.768 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoAMySQLService - i3 = 0
+2024-09-25 10:43:38.770 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - execute mysql success.....
+2024-09-25 10:43:38.856 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - execute redis success.....delete,set,get,get value is value2-string 
+2024-09-25 10:43:38.856 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoOutService - begin  out : http://127.0.0.1:38081/hello2
+2024-09-25 10:43:38.858 [http-nio-38081-exec-4] INFO  org.example.demoA.controller.ServerLogController - hello2 .....Wed Sep 25 10:43:38 UTC 2024
+2024-09-25 10:43:38.862 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoOutService - http://127.0.0.1:38081/hello2 response : hello2 success at Wed Sep 25 10:43:38 UTC 2024
+2024-09-25 10:43:38.862 [http-nio-38081-exec-1] INFO  org.example.demoA.service.DemoOutService - out success : http://127.0.0.1:38081/hello2
+2024-09-25 10:43:38.862 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - 应用「demoA」测试简单LogBack--Info级别日志--normalTest
+2024-09-25 10:43:38.963 [http-nio-38081-exec-1] INFO  org.example.demoA.controller.ServerLogController - -------------------------------
+2024-09-25 10:44:13.430 [SpringContextShutdownHook] INFO  org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor - Shutting down ExecutorService 'applicationTaskExecutor'

BIN
dist/package_dir/agents/NativeAgent/libnativeAgent.so


+ 0 - 0
dist/package_dir/agents/NativeAgent/logs/.tmp


+ 29 - 0
dist/package_dir/agents/NativeAgent/logs/app

@@ -0,0 +1,29 @@
+**********************************************************************
+[1] 打印当前容器所有应用所引用的第三方jar信息;
+[2] 打印加载第三方jar的ClassLoader以及Parent-ClassLoader信息;
+[3] 以上信息可以用来排查JavaAgent兼容性问题。
+**********************************************************************
+Current Time = [2024-10-28 03:15:27]
+JavaAgent Version = [1.1.0]
+Jdk Version = [1.8.0_262]
+Application Jar Info : 
+======================================================================
+[File   Path] = [jar:file:/root/demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/httpclient-4.5.2.jar!/]
+[ClassLoader] = [org.springframework.boot.loader.LaunchedURLClassLoader@21b8d17c]
+[Class  Name] = [org/apache/http/impl/client/InternalHttpClient]
+
+======================================================================
+[File   Path] = [jar:file:/root/demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/tomcat-embed-core-9.0.68.jar!/]
+[ClassLoader] = [org.springframework.boot.loader.LaunchedURLClassLoader@21b8d17c]
+[Class  Name] = [org/apache/catalina/core/StandardEngineValve]
+
+======================================================================
+[File   Path] = [jar:file:/root/demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/spring-boot-2.6.13.jar!/]
+[ClassLoader] = [org.springframework.boot.loader.LaunchedURLClassLoader@21b8d17c]
+[Class  Name] = [org/springframework/boot/web/server/GracefulShutdownResult]
+
+======================================================================
+[File   Path] = [jar:file:/root/demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/DmJdbcDriver18-1.8.jar!/]
+[ClassLoader] = [org.springframework.boot.loader.LaunchedURLClassLoader@21b8d17c]
+[Class  Name] = [dm/jdbc/driver/DmDriver]
+

File diff suppressed because it is too large
+ 3 - 0
dist/package_dir/agents/NativeAgent/logs/nativeagent.log


+ 6 - 0
dist/package_dir/agents/NativeAgent/plugin.properties

@@ -0,0 +1,6 @@
+plugin.id=1002
+plugin.name=NativeAgent
+plugin.version=1.1.0
+plugin.author=NativeAgent
+plugin.description=Data structure reconstruction
+last_operation=-1

BIN
dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-apiurl.jar


BIN
dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-autotracebusinesspkg.jar


BIN
dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-httpclient.jar


BIN
dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-jedis.jar


BIN
dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-kafka.jar


BIN
dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-lettuce.jar


BIN
dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-mysql.jar


BIN
dist/package_dir/agents/NativeAgent/plugins/cloudwise-javacode-plugin-tomcat.jar


BIN
dist/package_dir/libs/amd64/jvm/cwlibnet.so


BIN
dist/package_dir/libs/arm64/jvm/cwlibnet.so


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


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


+ 24 - 5
ebpftracer/Makefile

@@ -1,3 +1,8 @@
+# Define kernel versions and corresponding object files
+#KERNEL_VERSIONS = 512 506 420 416
+KERNEL_VERSIONS = 512
+#KERNEL_VERSIONS = 416
+
 # Define compiler and options
 CC = /usr/bin/clang
 LLC = /usr/bin/llc
@@ -10,6 +15,13 @@ ifeq ($(debug),1)
 DEBUG_MODE=-D_DEBUG_MODE
 endif
 
+ifdef kernel
+	KERNEL_VERSIONS= ${kernel}
+ifeq ($(kernel),all)
+	KERNEL_VERSIONS = 512 506 420 416
+endif
+endif
+
 ARCH ?= $(shell uname -m | sed -e s/x86_64/x86_64/ \
 				  -e s/aarch64.\*/arm64/)
 MACHINE_ARCH := $(ARCH)
@@ -54,14 +66,11 @@ CFLAGS = -I. -Ivmlinux -Iinclude -Iebpf/include -Iebpf/utrace/go/include -Iebpf/
 	$(DEBUG_MODE) \
 	-fno-asynchronous-unwind-tables -g -O2 -emit-llvm
 
-# Define kernel versions and corresponding object files
-KERNEL_VERSIONS = 512
-#KERNEL_VERSIONS = 512 506 420 416
-
 define MAP_VERSION
 $(if $(filter $1,$(VERSION_512)),v5.12,$(if $(filter $1,$(VERSION_506)),v5.6,$(if $(filter $1,$(VERSION_420)),v4.20,$(if $(filter $1,$(VERSION_416)),v4.16,unknown))))
 endef
-# 定义版本值
+
+# Define version kv
 VERSION_512 = 512
 VERSION_506 = 506
 VERSION_420 = 420
@@ -71,11 +80,21 @@ VERSION_416 = 416
 $(OBJ_DIR):
 	mkdir -p $(OBJ_DIR)
 
+# Set logs
+$(info  -- Compiling target kernel ${KERNEL_VERSIONS})
+$(info  -- Compiling for ${ARCH})
+$(info  -- Compiling for ${ARCH_TAG} $(DEBUG_MODE))
+$(info  -- Compiling use ${CC})
+$(info  -- Compiling use ${LLC})
+$(info  -- Compiling use ${LLVM_STRIP})
+$(info  -- Compiling use ${SRC})
+
 all: $(KERNEL_VERSIONS:%=$(OBJ_DIR)/%_$(MACHINE_ARCH).o)
 # Rule to compile and process eBPF for each kernel version
 $(OBJ_DIR)/%_$(MACHINE_ARCH).o: $(OBJ_DIR)/%_$(MACHINE_ARCH).ll
 	$(LLC) -march=bpf -filetype=obj -mcpu=v2 -o $(OBJ_DIR)/$(call MAP_VERSION,$*)_$(MACHINE_ARCH).o $<
 	$(LLVM_STRIP) -g $(OBJ_DIR)/$(call MAP_VERSION,$*)_$(MACHINE_ARCH).o
+	@echo "Release $(call MAP_VERSION,$*)_$(MACHINE_ARCH) Build complete."
 
 # Rule to generate LLVM IR from eBPF source
 $(OBJ_DIR)/%_$(MACHINE_ARCH).ll: $(SRC) | $(OBJ_DIR)

+ 12 - 0
ebpftracer/bindata_linux_amd64.go

@@ -6,13 +6,25 @@ package ebpftracer
 import (
 	"embed"
 	"fmt"
+	"github.com/coroot/coroot-node-agent/flags"
 	"golang.org/x/mod/semver"
+	"os"
 )
 
 //go:embed ebpf/bin/amd64
 var binData embed.FS
 
 func EbpfCode(v string) (string, []byte, error) {
+	if *flags.EbpfFilePath != "" {
+		filePath := *flags.EbpfFilePath
+		// Construct the full path to the desired file
+		data, err := os.ReadFile(filePath)
+		if err != nil {
+			return "", nil, err
+		}
+		return filePath, data, nil
+	}
+
 	var filePath string
 	var err error
 	versions := []string{"v5.12", "v5.6", "v4.20", "v4.16"}

+ 2 - 0
ebpftracer/ebpf/config.h

@@ -60,6 +60,8 @@ enum {
 enum {
 	PROG_DATA_SAVE_UP_IDX,
 	PROG_DATA_JAVA_UPDATE_HEADER_UP_IDX,
+	PROG_DATA_JAVA_FIND_HOST_UP_IDX,
+	PROG_DATA_JAVA_BUILD_HEADER_UP_IDX,
 	PROG_DATA_GO_UPDATE_HEADER_UP_IDX,
 	PROG_UP_NUM
 };

+ 4 - 1
ebpftracer/ebpf/ebpf.c

@@ -59,10 +59,13 @@
 #include "utrace/java/net/server.probe.bpf.c"
 #include "utrace/java/net/client.probe.bpf.c"
 
-// 支持arm64后打开
+// TODO 支持arm64后打开
 #if defined(__x86_64__)
+//TODO 支持kernel-4.18+后打开
+#if __KERNEL_FROM >= 512
 #include "utrace/netcore/net/server.probe.bpf.c"
 #include "utrace/netcore/net/client.probe.bpf.c"
 #endif
+#endif
 
 char _license[] SEC("license") = "GPL";

+ 42 - 31
ebpftracer/ebpf/l7/apm_trace.c

@@ -76,25 +76,27 @@ struct apm_trace_key_t get_apm_trace_key(__u64 timeout, bool is_socket_io) {
 
 	key.tgid = (__u32) (pid_tgid >> 32);
 
-	struct ebpf_proc_info *info = bpf_map_lookup_elem(&proc_info_map, &key.tgid);
-	if (info && info->code_type == 1005) {
-		// dotnet 使用 connectid 作为 Key,该 key 维护在 pid_of_connection_ptr_maps 中
-		cw_bpf_debug("[Go] [uprobe/ent]: proc_info_map::%ld, %d, %d\n", info->code_type);
-		struct pid_of_connection_ptr_key_t *e = bpf_map_lookup_elem(&pid_of_connection_ptr_maps, &key.tgid);
-		if (e) {
-			cw_bpf_debug("[Go] [uprobeThread/get_apm_trace_key]getget: rdi_ptr::pid:%d, %llx\n", key.tgid, e->connection_ptr);
-			key.connectid = e->connection_ptr;
-		} else {
-			cw_bpf_debug("[Go] [uprobeThread/get_apm_trace_key]getget: rdi_ptr::pid:%d\n", key.tgid);
-		}
+//	struct ebpf_proc_info *info = bpf_map_lookup_elem(&proc_info_map, &key.tgid);
+//	if (info && info->code_type == 1005) {
+//		// dotnet 使用 connectid 作为 Key,该 key 维护在 pid_of_connection_ptr_maps 中
+//		cw_bpf_debug("[Go] [uprobe/ent]: proc_info_map::%ld, %d, %d\n", info->code_type);
+	// 解决4.x问题
+	struct pid_of_connection_ptr_key_t *e = bpf_map_lookup_elem(&pid_of_connection_ptr_maps, &key.tgid);
+	if (e) {
+		cw_bpf_debug("[Go] [uprobeThread/get_apm_trace_key]getget: rdi_ptr::pid:%d, %llx\n", key.tgid, e->connection_ptr);
+		key.connectid = e->connection_ptr;
+	}
+//		} else {
+//			cw_bpf_debug("[Go] [uprobeThread/get_apm_trace_key]getget: rdi_ptr::pid:%d\n", key.tgid);
+//		}
+//	} else {
+	// 其他语言使用 trace_id 作为 Key
+	if (goid) {
+		key.goid = goid;
 	} else {
-		// 其他语言使用 trace_id 作为 Key
-		if (goid) {
-			key.goid = goid;
-		} else {
-			key.pid = (__u32) pid_tgid;
-		}
+		key.pid = (__u32) pid_tgid;
 	}
+//	}
 
 //    debug("key.tgid:%llu|%llu",key.tgid,key.goid);
 //    debug("apm key.pid:%d",(__u32)pid_tgid);
@@ -127,15 +129,15 @@ __u64 get_apm_trace_id(__u32 pid, __u32 tid) {
 //	find by tgid_pid == 0
 //	find by tgid_goid == 0
 static __inline __attribute__((__always_inline__))
-struct apm_trace_info_t *get_apm_trace_info_v2(__u64 tgid_pid, __u32 tgid, __u32 pid) {
-	struct apm_trace_key_t trace_key = get_apm_trace_key(120 * NS_PER_SEC, true);
-	struct apm_trace_info_t *trace_info = bpf_map_lookup_elem(&trace_info_heap, &trace_key);
-	if (trace_info) {
-//		bpf_printk("info_trace_id:%llu", trace_info->trace_id);
-		return trace_info;
-	}
+struct apm_trace_info_t *get_apm_trace_info_v2(struct apm_trace_key_t trace_key, __u32 tgid, __u32 pid) {
+//	struct apm_trace_key_t trace_key = get_apm_trace_key(120 * NS_PER_SEC, true);
+//	struct apm_trace_info_t *trace_info = bpf_map_lookup_elem(&trace_info_heap, &trace_key);
+//	if (trace_info) {
+////		bpf_printk("info_trace_id:%llu", trace_info->trace_id);
+//		return trace_info;
+//	}
 
-	__u64 goid = get_current_goroutine();
+	__u64 goid = trace_key.goid;
 	struct go_key key = {.tgid = tgid, .goid = goid};
 
 	//	find Parent from go_ancerstor_by_runq_map and find in  go_ancerstor_map == 0
@@ -149,11 +151,11 @@ struct apm_trace_info_t *get_apm_trace_info_v2(__u64 tgid_pid, __u32 tgid, __u32
 		if (ancestor_goid) {
 //				bpf_printk("-----[Kernel Enter][HTTP]:has a newancestor  in go_ancerstor_map :%llu", *newancestor3);
 			struct apm_trace_key_t trace_key2 = {.tgid = tgid, .goid = *ancestor_goid};
-			trace_info = bpf_map_lookup_elem(&trace_info_heap, &trace_key2);
+			struct apm_trace_info_t *trace_info = bpf_map_lookup_elem(&trace_info_heap, &trace_key2);
 			if (trace_info) {
 //				bpf_printk("[get_apm_trace_info_v2] [find goid in go_ancerstor_map] [key:%d-%llu] -->%llu", tgid, goid,trace_info->trace_id);
 
-				struct goid_trace_key_t k = {.tgid = tgid, .goid = get_current_goroutine()};
+//				struct goid_trace_key_t k = {.tgid = tgid, .goid = get_current_goroutine()};
 				// 祖先协程被复用
 				if (trace_info->routine_reuse == true) {
 //					bpf_printk("[get_apm_trace_info_v2] [routine_reuse already set] [key:%d-%llu] -->%llu", tgid, goid,	trace_info->trace_id);
@@ -177,10 +179,10 @@ struct apm_trace_info_t *get_apm_trace_info_v2(__u64 tgid_pid, __u32 tgid, __u32
 }
 
 static __inline __attribute__((__always_inline__))
-struct apm_trace_info_t *get_apm_trace_info_v3(__u64 tgid_pid, __u32 tgid, __u32 pid) {
-	struct apm_trace_info_t *trace_info = get_apm_trace_info_v2(tgid_pid, tgid, pid);
-
-	struct goid_trace_key_t key_goid = {.tgid = tgid, .goid = get_current_goroutine()};
+struct apm_trace_info_t *
+get_apm_trace_info_v3(struct apm_trace_key_t trace_key, __u64 tgid_pid, __u32 tgid, __u32 pid) {
+	struct apm_trace_info_t *trace_info = get_apm_trace_info_v2(trace_key, tgid, pid);
+	struct goid_trace_key_t key_goid = {.tgid = tgid, .goid = trace_key.goid};
 
 	if (trace_info != NULL) {
 		trace_info->type = 1;
@@ -229,6 +231,15 @@ struct apm_trace_info_t *get_apm_trace_info_v3(__u64 tgid_pid, __u32 tgid, __u32
 	return trace_info;
 }
 
+static __inline __attribute__((__always_inline__))
+struct apm_trace_info_t *get_apm_trace_info_by_trace_key(struct apm_trace_key_t trace_key) {
+	struct apm_trace_info_t *trace_info = bpf_map_lookup_elem(&trace_info_heap, &trace_key);
+	if (trace_info) {
+		return trace_info;
+	}
+	return NULL;
+}
+
 static __inline __attribute__((__always_inline__))
 struct apm_trace_info_t *get_apm_trace_info(__u32 pid, __u32 tid) {
 	struct apm_trace_key_t trace_key = get_apm_trace_key(120 * NS_PER_SEC, true);

+ 2 - 0
ebpftracer/ebpf/l7/cassandra.c

@@ -18,6 +18,7 @@ struct cassandra_header {
 
 static __always_inline
 int is_cassandra_request(char *buf, __u64 buf_size, __s16 *stream_id) {
+	return 0;
     struct cassandra_header h = {};
     if (buf_size < sizeof(h)) {
         return 0;
@@ -35,6 +36,7 @@ int is_cassandra_request(char *buf, __u64 buf_size, __s16 *stream_id) {
 
 static __always_inline
 int is_cassandra_response(char *buf, __u64 buf_size, __s16 *stream_id, __u32 *status) {
+	return 0;
     struct cassandra_header h = {};
     if (buf_size < sizeof(h)) {
         return 0;

+ 4 - 3
ebpftracer/ebpf/l7/l7.c

@@ -457,10 +457,11 @@ int trace_enter_write(void *ctx, __u64 fd, __u16 is_tls, char *buf, __u64 size,
 	    cw_bpf_debug("-----[Kernel HTTP Enter]:pid:[%d]|CURRENT-GOID:[%llu]|FD:[%d]", tid, get_current_goroutine(), k.fd);
 	    __u8 type =  0;
 	    __u64 trace_id = 0;
-	    struct apm_trace_info_t * trace_info = get_apm_trace_info(pid, tid);
+	    struct apm_trace_key_t trace_key = get_apm_trace_key(120 * NS_PER_SEC, true);
+	    struct apm_trace_info_t * trace_info = get_apm_trace_info_by_trace_key(trace_key);
 
-	    if (trace_info== NULL) {
-		    trace_info = get_apm_trace_info_v3(id, pid, tid);
+	    if (trace_info == NULL) {
+		    trace_info = get_apm_trace_info_v3(trace_key,id, pid, tid);
 		}
 
         if (trace_info) {

+ 1 - 0
ebpftracer/ebpf/l7/nats.c

@@ -2,6 +2,7 @@
 
 static __always_inline
 int nats_method(char *buf, __u64 buf_size) {
+	return 0;
     if (buf_size < 7) {
         return 0;
     }

+ 2 - 0
ebpftracer/ebpf/utrace/java/include/java_common.h

@@ -51,6 +51,8 @@ struct sock_t {
 	void * payload_len_p;
 	char payload[MAX_LEN];
 	char header_stream[CW_STREAM_HEADER_LEN];
+	char host[30];
+	struct ebpf_proc_info* proc_info;
 };
 
 struct {

+ 207 - 315
ebpftracer/ebpf/utrace/java/net/client.probe.bpf.c

@@ -2,80 +2,17 @@
 
 
 #include "java_common.h"
-static __inline int updataSocket2(struct sock_t *map_data_res, char * payload,int len,void * jbytechar_ptr,void * len_from_rbp_ptr) {
 
-	long res = bpf_probe_write_user((void *) jbytechar_ptr,  &map_data_res->payload, sizeof(map_data_res->payload));
-	bpf_printk("sizeof(map_data_res->payload) %d\n", sizeof(map_data_res->payload));
-	bpf_printk("sizeof(payload) %d\n", sizeof(payload));
-	bpf_printk("&payload 0x%lx\n", &payload);
-
-	if (res == 0) {
-		bpf_printk("Successfully wrote value to user address: 0x%lx\n", jbytechar_ptr);
-	} else {
-		bpf_printk("Failed to write value to user address: %p, error: %ld\n", jbytechar_ptr, res);
-	}
-
-	unsigned long new_val;
-	new_val = len;
-	res = bpf_probe_write_user((void *) len_from_rbp_ptr, &new_val, sizeof(new_val));
-	if (res == 0) {
-		bpf_printk("Successfully wrote value to user address: 0x%lx\n", len_from_rbp_ptr);
-	} else {
-		bpf_printk("Failed to write value to user address: %p, error: %ld\n", len_from_rbp_ptr, res);
-	}
-
-	bpf_printk("len %d\n", len);
-
-//	bpf_printk("payload %s\n", payload);
-//	for (int i = 270; i < len; ++i) {
-//		bpf_printk("data[%d]=%c", i,payload[i]);
-//		if(payload[i]=='\0'){
-//			break;
-//		}
-//	}
-	return 0;
-}
-
-static __inline int updataSocket(struct sock_t *map_data_res,void * jbytechar_ptr,void * len_from_rbp_ptr) {
-
-	long res = bpf_probe_write_user((void *) jbytechar_ptr, &map_data_res->payload, sizeof(map_data_res->payload));
-	if (res == 0) {
-		bpf_printk("Successfully wrote value to user address: 0x%lx\n", jbytechar_ptr);
-	} else {
-		bpf_printk("Failed to write value to user address: %p, error: %ld\n", jbytechar_ptr, res);
-	}
-
-	unsigned long new_val;
-	new_val = map_data_res->size;
-	res = bpf_probe_write_user((void *) len_from_rbp_ptr, &new_val, sizeof(new_val));
-	if (res == 0) {
-		bpf_printk("Successfully wrote value to user address: 0x%lx\n", len_from_rbp_ptr);
-	} else {
-		bpf_printk("Failed to write value to user address: %p, error: %ld\n", len_from_rbp_ptr, res);
-	}
-
-	bpf_printk("Successfully %d\n", map_data_res->size);
-
-	bpf_printk("Successfully %s\n", map_data_res->payload);
-//	for (int i = 270; i < 290; ++i) {
-//		bpf_printk("data[%d]=%c", i,map_data_res->payload[i]);
-//		if(map_data_res->payload[i]=='\0'){
-//			break;
-//		}
-//	}
-	return 0;
-}
-
-static __inline struct apm_span_context *build_sc(struct ebpf_proc_info *proc_info, char *host) {
+static __inline struct apm_span_context *build_sc(struct ebpf_proc_info proc_info, char *host) {
 	u32 key = 0;
 	struct apm_span_context *cw_sc = bpf_map_lookup_elem(&apm_span_context_heap, &key);
 
-	if (cw_sc == NULL){
+	if (cw_sc == NULL) {
 		return NULL;
 	}
 
 	struct apm_span_context *cw_psc = cw_get_parent_tracking_span();
-	if(cw_psc){
+	if (cw_psc) {
 		copy_byte_arrays(cw_psc->trace_id, cw_sc->trace_id, APM_TRACE_ID_SIZE);
 	}
 	// new spanid
@@ -96,10 +33,10 @@ static __inline struct apm_span_context *build_sc(struct ebpf_proc_info *proc_in
 //	__u32 tgid = pid_tgid >> 32;
 //	struct ebpf_proc_info *proc_info =
 //			bpf_map_lookup_elem(&proc_info_map, &tgid);
-	if (proc_info) {
-		copy_byte_arrays(proc_info->instance_id, cw_sc->instance_id, APM_APP_ID_SIZE);
-		copy_byte_arrays(proc_info->app_id, cw_sc->app_id, APM_APP_ID_SIZE);
-	}
+//	if (proc_info) {
+	copy_byte_arrays(proc_info.instance_id, cw_sc->instance_id, APM_APP_ID_SIZE);
+	copy_byte_arrays(proc_info.app_id, cw_sc->app_id, APM_APP_ID_SIZE);
+//	}
 
 	// set assumed_app_id
 	set_assumed_app_id_arrays(host, cw_sc->assumed_app_id, APM_ASSUMED_APP_ID_STRING_SIZE);
@@ -107,137 +44,12 @@ static __inline struct apm_span_context *build_sc(struct ebpf_proc_info *proc_in
 	return cw_sc;
 //	char header[CW_STREAM_HEADER_LEN];
 //	span_context_to_cw_string_stream(cw_span_context, header, '1');
-//	bpf_printk("Successfully HEADER  %s\n", header);
+//	cw_bpf_debug("Successfully HEADER  %s\n", header);
 //	return header;
 }
 
-static __inline struct sock_t* buildHeader(struct sock_t *map_data) {
-
-	int key = 0;
-	struct sock_t *map_data_res = bpf_map_lookup_elem(&socket_res, &key);
-
-	if (!map_data_res) {
-		bpf_printk("Failed to lookup socket_heap");
-		return NULL;
-	}
-
-//	__builtin_memset(map_data_res, 0, sizeof(struct sock_t));
-//	char header[5] = "cwt\r\n";
-
-//	char header[CW_STREAM_HEADER_LEN] = "cwtrace: 00:00:1015481350055581:5450531005555981:5610250100539899:304775019cd3218a304775019cd3218a:1001025098564810:140acc88cde8773f\r\n";
-	struct apm_span_context *cw_span_context = bpf_map_lookup_elem(&apm_span_context_heap, &key);
-
-	if (cw_span_context == NULL){
-		return NULL;
-	}
-
-	struct apm_span_context *cw_psc = cw_get_parent_tracking_span();
-	if(cw_psc){
-		copy_byte_arrays(cw_psc->trace_id, cw_span_context->trace_id, APM_TRACE_ID_SIZE);
-		// new spanid
-		generate_random_bytes(cw_span_context->span_id, APM_SPAN_ID_SIZE);
-	}
-
-	// set host_id/appid
-	u32 k0 = 0;
-	struct trace_conf_t *trace_conf = trace_conf_map__lookup(&k0);
-	if (trace_conf) {
-		for (int i = 0; i < 8; ++i) {
-//			cw_bpf_debug("[Client] host_id:%02x", trace_conf->host_id[i]);
-		}
-		copy_byte_arrays(trace_conf->host_id, cw_span_context->host_id, APM_HOST_ID_SIZE);
-		copy_byte_arrays(trace_conf->app_id, cw_span_context->app_id, APM_APP_ID_SIZE);
-	}
-
-	__u64 pid_tgid = bpf_get_current_pid_tgid();
-	__u32 tgid = pid_tgid >> 32;
-	struct ebpf_proc_info *proc_info =
-			bpf_map_lookup_elem(&proc_info_map, &tgid);
-	if (proc_info) {
-		for (int i = 0; i < 8; ++i) {
-//			cw_bpf_debug("[Client] instance_id:%02x", proc_info->instance_id[i]);
-		}
-		copy_byte_arrays(proc_info->instance_id, cw_span_context->instance_id, APM_APP_ID_SIZE);
-	}
-
-	// set assumed_app_id
-	set_assumed_app_id_arrays("111", cw_span_context->assumed_app_id, APM_ASSUMED_APP_ID_STRING_SIZE);
-	cw_save_current_tracking_span(cw_span_context);
-
-	char header[CW_STREAM_HEADER_LEN];
-	span_context_to_cw_string_stream(cw_span_context, header, '1');
-	bpf_printk("Successfully HEADER  %s\n", header);
-
-//	bpf_probe_read(map_data_res->payload, map_data->header_offset_idx, map_data->payload);
-//	bpf_printk("Successfully %s\n", data);
-//	return 1;
-#pragma unroll
-	for (int i = 0; i < MAX_LEN; i++) {
-		if (i < map_data->header_offset_idx) {
-			map_data_res->payload[i] = map_data->payload[i];
-		} else {
-			if (i == map_data->header_offset_idx) {
-#pragma unroll
-				for (int k = 0; k < CW_STREAM_HEADER_LEN; k++) {
-					int tmp_len = i + k;
-					if (tmp_len < MAX_LEN) {
-						map_data_res->payload[tmp_len] = header[k];
-					}
-				}
-			}
-			int tmp_len = i + CW_STREAM_HEADER_LEN;
-			if (tmp_len < MAX_LEN) {
-				map_data_res->payload[tmp_len] = map_data->payload[i];
-				if (map_data->payload[i] == '\0')
-					break;
-//				bpf_printk("map_data->payload: %c->i=%d, offindex %d", map_data_res->payload[i], i, map_data->header_offset_idx);
-			}
-		}
-	}
-	map_data_res->size = map_data->size + CW_STREAM_HEADER_LEN;
-
-	return map_data_res;
-}
-
-static __inline int insertHeader(struct sock_t *map_data,void * jbytechar_ptr,void * len_from_rbp_ptr) {
-
-	struct sock_t *map_data_res= buildHeader(map_data);
-	if (map_data_res == NULL) {
-		bpf_printk("Failed to lookup socket_heap");
-		return -1;
-	}
-
-	/*修改部分*/
-	return updataSocket2(map_data_res, map_data_res->payload, map_data_res->size, jbytechar_ptr, len_from_rbp_ptr);
-}
-
-
 SEC("uprobe/Java_java_net_SocketOutputStream_socketWrite0")
 int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
-//	char subs2[HEADER_LEN +1];
-//	int a =0;
-//	struct apm_span_context *cw_sc2 = build_sc();
-////	struct apm_span_context *cw_sc2 = bpf_map_lookup_elem(&apm_span_context_heap, &a);
-//
-//	if (cw_sc2 == NULL){
-//		return 0;
-//	}
-///*111*/
-////	char subs[HEADER_LEN +1];
-//	span_context_to_cw_string_stream(cw_sc2, subs2, '1');
-//	bpf_printk("%s",subs2);
-//
-//	struct stream_header_t *stream_header1 = bpf_map_lookup_elem(&stream_header_heap, &a);
-//	if (!stream_header1) {
-//		bpf_printk("Failed to lookup socket_heap\n");
-//		return 1;
-//	}
-//	bpf_probe_read_user(stream_header1->header, sizeof(stream_header1->header), (void *) (subs2));
-//	bpf_printk("stream_header1->header------%s",stream_header1->header);
-//
-//	return 0;
-
-
 
 	// 捕获第六个参数 data_count
 	int data_count = PT_REGS_PARM6(ctx);
@@ -245,43 +57,45 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
 		return 0;
 	}
 
+	cw_bpf_debug("[java client] data_count:%d\n", data_count);
 
-//	void *len_from_rsp_ptr = (void *) PT_REGS_RSP(ctx) - 65640 +8 ;
-	void *len_from_rbp_ptr = (void *) PT_LEN_REGS(ctx) ;
-//	void *jbytearray_from_rbp_p_p_p = (void *) (PT_REGS_RBP(ctx)) - 0x10050;
+	void *len_from_rbp_ptr = (void *) PT_LEN_REGS(ctx);
 
-//	long res;
 	void *len_ptr = 0;
 	cw_bpf_debug("[java client] address: len_from_rbp_ptr<0x%lx>\n", len_from_rbp_ptr);
-//	bpf_printk("len_from_rsp_ptr address: 0x%lx\n", len_from_rsp_ptr);
 
 	bpf_probe_read(&len_ptr, sizeof(len_ptr), (void *) len_from_rbp_ptr);
 	cw_bpf_debug("[java client] [len_ptr] before addr<0x%lx>, %d \n", len_from_rbp_ptr, len_ptr);
 
-//	bpf_probe_read(&len_ptr, sizeof(len_ptr), (void *) len_from_rbp_ptr);
-//	cw_bpf_debug("[len_ptr]after  addr<0x%lx>, %d \n", len_from_rbp_ptr, len_ptr);
-
-	if ( (long) len_ptr != data_count ){
+	if ((long) len_ptr != data_count) {
 		cw_bpf_debug("[java client] [len_ptr] check error.");
 		return 0;
 	}
 
+	int key = 0;
+	struct sock_t *map_data = bpf_map_lookup_elem(&socket_heap, &key);
+	if (!map_data) {
+		cw_bpf_debug("[java client] Failed to lookup socket_heap\n");
+		return 1;
+	}
+
 	// 获取jbytearray
-	__u32 tgid = (__u32)(bpf_get_current_pid_tgid() >> 32);
-	struct ebpf_proc_info *proc_info = bpf_map_lookup_elem(&proc_info_map, &tgid);
-	if (!proc_info) {
+	__u32 tgid = (__u32) (bpf_get_current_pid_tgid() >> 32);
+	map_data->proc_info = bpf_map_lookup_elem(&proc_info_map, &tgid);
+	if (!map_data->proc_info) {
 		return 0;
 	}
 
-	cw_bpf_debug("[java client] code_type:%d\n", proc_info->code_type);
+	cw_bpf_debug("[java client] code_type:%d\n", map_data->proc_info->code_type);
 	void *jbytearray_ptr = NULL;
+
 	// 1003 是 javaAOT 的
-	if (proc_info->code_type == CodeTypeJavaAot) {
-		jbytearray_ptr = (void *) (PT_REGS_SP(ctx)) + 0x8 + 0x10060+0x20;
-	} else{
+	if (map_data->proc_info->code_type == CodeTypeJavaAot) {
+		jbytearray_ptr = (void *) (PT_REGS_SP(ctx)) + 0x8 + 0x10060 + 0x20;
+	} else {
 		jbytearray_ptr = (void *) PT_REGS_PARM4(ctx);
 	}
-	
+
 	cw_bpf_debug("[java client] jbytechar_ptr_from_rcx <0x%lx>", jbytearray_ptr);
 
 	unsigned long jbytechar_head_ptr;
@@ -300,14 +114,7 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
 		return 0;
 	}
 
-	// 定义 Map 键值和 Map 数据结构
-	int key = 0;
-	struct sock_t *map_data = bpf_map_lookup_elem(&socket_heap, &key);
-	if (!map_data) {
-		cw_bpf_debug("[java client] Failed to lookup socket_heap\n");
-		return 1;
-	}
-//	__builtin_memset(map_data, 0, sizeof(struct sock_t));
+
 	// 读取用户空间数据到 map_data->payload
 	void *jbytechar_ptr = (void *) (jbytechar_head_ptr + 16);
 	cw_bpf_debug("[java client] [jbytechar_ptr] <0x%lx>", jbytechar_ptr);
@@ -326,99 +133,99 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
 		return -1;
 	}
 
-	long host_native = 0x203a74736f480a0dLL; // 小端序下的 "\r\nHost:" ('0d' '0a' '48' '6f' '73' '74' '3a' '20')
 	// 查找 Header 开始位置
+	long header_start_native = 0x0a0d312e312f5054LL; // 小端序下的 "TP/1.1\r\n" (0x54 0x50 0x2f 0x31 0x2e 0x31 0x0d 0x0a)
 #pragma clang loop unroll(full)
-	for (int i = 0; i < 200 - 5; i++) {
-//		if (map_data->payload[i] == '1' &&
-//		    map_data->payload[i + 1] == '.' &&
-//		    map_data->payload[i + 2] == '1' &&
-//		    map_data->payload[i + 3] == '\r' &&
-//		    map_data->payload[i + 4] == '\n') {
-//			map_data->header_offset_idx = i + 5;
-//			break;
-//		}
-		long data = *(long long *)(map_data->payload + i);
-		if(data == host_native) {
-			map_data->host_offset_idx = i + 8;
-			map_data->header_offset_idx = i + 2;
+	for (u32 i = 0; i < 200 - 8; i++) {
+		long data = *(long long *) (map_data->payload + i);
+		if (data == header_start_native) {
+			map_data->header_offset_idx = i + 8;
 			break;
 		}
 	}
 
 	if (map_data->header_offset_idx == 0) {
-		return -1;
+		cw_bpf_debug("[java client] header_offset_idx error:\n");
+		return 1;
+	}
+
+	map_data->end_str_len = data_count - map_data->header_offset_idx + 1;
+	u32 copy_size = L7_IOVEC_BUF_SIZE;
+	if (map_data->end_str_len > copy_size) {
+		u32 chunk = (u32) map_data->end_str_len / copy_size;
+		if (chunk > MAX_CHUNK) {
+			cw_bpf_debug("[java client] Exceeding the max_chunk:%d need_chunk:%d\n", MAX_CHUNK, chunk);
+			return 1;
+		}
+	}
+	cw_bpf_debug("[java client] header_offset_idx:%d\n", map_data->header_offset_idx);
+
+	// tail payload保存
+	u32 tail_key = 1;
+	char *tail_payload = bpf_map_lookup_elem(&large_array_map, &tail_key);
+	if (!tail_payload) {
+		cw_bpf_debug("[java client ]header ->end %s\n", tail_payload);
+		return 1;
 	}
+	__builtin_memset(tail_payload, 0, sizeof(char *));
 
+	bpf_probe_read_user_str(tail_payload, JAVA_MAX_BUFFER_SIZE,
+	                        (void *) (jbytechar_ptr + map_data->header_offset_idx));
+	// host查询
+	bpf_tail_call(ctx, &NAME(progs_jmp_up_map), PROG_DATA_JAVA_FIND_HOST_UP_IDX);
+	return 0;
 
 /*设置初始值*/
+	/*
+	 * debug
 	char *full_payload= bpf_map_lookup_elem(&large_array_map, &key);
 	if (!full_payload)
 		return -1;
 	// 读取完整http
 	bpf_probe_read_user_str(full_payload, JAVA_MAX_BUFFER_SIZE, jbytechar_ptr);
 	cw_bpf_debug("[java client]origin full_payload %s\n", full_payload);
-
+*/
 
 	// 尾部payload
-	u32 key2 = 1;
-	char *tail_payload = bpf_map_lookup_elem(&large_array_map, &key2);
-	if (!tail_payload) {
-		cw_bpf_debug("[java client ]header ->end %s\n", tail_payload);
-		return -1;
-	}
-
-	u32 copy_size = L7_IOVEC_BUF_SIZE;
-	long end_str_len = bpf_probe_read_user_str(tail_payload, JAVA_MAX_BUFFER_SIZE,
-	                                           (void *) (jbytechar_ptr + map_data->header_offset_idx));
-	cw_bpf_debug("[java client] end_str_len %d\n", end_str_len);
-	map_data->end_str_len = end_str_len;
-	if (end_str_len > copy_size) {
-		u32 chunk = (u32) end_str_len / copy_size;
-		if (chunk > MAX_CHUNK) {
-			cw_bpf_debug("[java client] Exceeding the max_chunk:%d need_chunk:%d\n", MAX_CHUNK, chunk);
-			return -1;
-		}
-	}
-	u32 insert_pos = map_data->header_offset_idx;
-
-//	if (chunk > MAX_CHUNK) {
-//		cw_bpf_debug("Exceeding the max_chunk:%d need_chunk:%d\n", MAX_CHUNK, chunk);
+//	u32 key2 = 1;
+//	char *tail_payload = bpf_map_lookup_elem(&large_array_map, &key2);
+//	if (!tail_payload) {
+//		cw_bpf_debug("[java client ]header ->end %s\n", tail_payload);
 //		return -1;
 //	}
-
-	// 挪动数据以腾出空间插入子串
-	// 插入header后的结束位置
-//	int tail_offset_idx = map_data->header_offset_idx + CW_STREAM_HEADER_LEN -1;
-
-//	char subs[HEADER_LEN +1] = "cwtrace: 00:00:1015481350055581:5450531005555981:5610250100539899:304775019cd3218a304775019cd3218a:1001025098564810:140acc88cde8773f\r\n\0";
-
-//	char subs[HEADER_LEN +1];
-//	struct apm_span_context *cw_sc = build_sc();
-
-/*111*/
-//	char subs[HEADER_LEN +1];
-//	span_context_to_cw_string_stream(cw_sc, subs, '1');
-
-
-
+//
+//	u32 copy_size = L7_IOVEC_BUF_SIZE;
+//	long end_str_len = bpf_probe_read_user_str(tail_payload, JAVA_MAX_BUFFER_SIZE,
+//	                                           (void *) (jbytechar_ptr + map_data->header_offset_idx));
+//	cw_bpf_debug("[java client] end_str_len %d\n", end_str_len);
+//	map_data->end_str_len = end_str_len;
+
+//	u32 copy_size = L7_IOVEC_BUF_SIZE;
+//	if (end_str_len > copy_size) {
+//		u32 chunk = (u32) end_str_len / copy_size;
+//		if (chunk > MAX_CHUNK) {
+//			cw_bpf_debug("[java client] Exceeding the max_chunk:%d need_chunk:%d\n", MAX_CHUNK, chunk);
+//			return -1;
+//		}
+//	}
 
 
-	char host[30];
-	bpf_probe_read(&host,sizeof host,map_data->payload + map_data->host_offset_idx);
-	host[29]='\0';
-	cw_bpf_debug("[java client] http host %s\n", host);
 
-	char tmp_header[CW_STREAM_HEADER_LEN];
-	struct apm_span_context *cw_sc = build_sc(proc_info, host);
-	if (cw_sc == NULL){
-		return 0;
-	}
-	span_context_to_cw_string_stream(cw_sc, tmp_header, '1');
+//	char host[30];
+//	bpf_probe_read(&host, sizeof host, map_data->payload + map_data->host_offset_idx);
+//	host[29] = '\0';
+//	cw_bpf_debug("[java client] http host %s\n", host);
+//	char tmp_header[CW_STREAM_HEADER_LEN];
+//	struct apm_span_context *cw_sc = build_sc(proc_info, host);
+//	if (cw_sc == NULL){
+//		return 0;
+//	}
+//	span_context_to_cw_string_stream(cw_sc, map_data->header_stream, '1');
+//	return 1;
 //	cw_bpf_debug("header:[%s],sizeof %d ",map_data->header_stream,sizeof(map_data->header_stream));
 
 
-	bpf_probe_read(map_data->header_stream, sizeof(map_data->header_stream), (void *) (tmp_header));
+//	bpf_probe_read(map_data->header_stream, sizeof(map_data->header_stream), (void *) (tmp_header));
 //	cw_bpf_debug("stream_header1->header------%s",map_data->header_stream);
 
 //	if (insert_pos >= 0 && insert_pos <= JAVA_MAX_BUFFER_SIZE - sizeof(map_data->header_stream)) {
@@ -426,35 +233,104 @@ int uprobe_Java_java_net_SocketOutputStream_socketWrite0(struct pt_regs *ctx) {
 //	}
 
 
-	int tail_offset_idx = insert_pos + sizeof(map_data->header_stream) - 1;
-
 
 	// 修改长度
-	long new_val;
-	new_val = map_data->size + HEADER_LEN;
+//	long new_val = map_data->size + HEADER_LEN;
+//
+//	long res = bpf_probe_write_user((void *) len_from_rbp_ptr, &new_val, sizeof(new_val));
+//	if (res < 0) {
+//		cw_bpf_debug("[java client] Failed to write value to user address: %p, error: %ld\n", len_from_rbp_ptr, res);
+////		cw_bpf_debug("Failed to write len to user address: %p\n", len_from_rbp_ptr);
+//		return -1;
+//	}
 
-	long res = bpf_probe_write_user((void *) len_from_rbp_ptr, &new_val, sizeof(new_val));
-	if (res < 0) {
-		cw_bpf_debug("[java client] Failed to write value to user address: %p, error: %ld\n", len_from_rbp_ptr, res);
-//		cw_bpf_debug("Failed to write len to user address: %p\n", len_from_rbp_ptr);
-		return -1;
+//	u32 insert_pos = map_data->header_offset_idx;
+//	u32 tail_offset_idx = insert_pos + sizeof(map_data->header_stream) - 1;
+//
+//	// 单次
+//	if (end_str_len <= copy_size) {
+//		// 写头
+//		bpf_probe_write_user((void *) jbytechar_ptr + insert_pos, &map_data->header_stream, sizeof(map_data->header_stream));
+//		// 写尾
+//		bpf_probe_write_user((void *) jbytechar_ptr + tail_offset_idx, tail_payload, L7_IOVEC_BUF_SIZE);
+//	}
+//
+//	// 多批
+//	if (end_str_len > copy_size) {
+////		bpf_tail_call(ctx, &jmp_table1, 1);
+//		bpf_tail_call(ctx, &NAME(progs_jmp_up_map), PROG_DATA_JAVA_UPDATE_HEADER_UP_IDX);
+//	}
+
+	bpf_tail_call(ctx, &NAME(progs_jmp_up_map), PROG_DATA_JAVA_UPDATE_HEADER_UP_IDX);
+
+	return 0;
+}
+
+//bpf_prog_up_build_header
+PROGUP(java_find_host)(struct pt_regs *ctx) {
+	u32 k0 = 0;
+	struct sock_t *map_data = bpf_map_lookup_elem(&socket_heap, &k0);
+	if (!map_data) {
+		cw_bpf_debug("[java client] Failed to lookup socket_heap\n");
+		return 1;
 	}
 
+	// host查询
+	long host_native = 0x203a74736f480a0dLL; // 小端序下的 "\r\nHost: " ('0d' '0a' '48' '6f' '73' '74' '3a' '20')
+#pragma clang loop unroll(full)
+	for (u32 i = 0; i < 900 - 8; i++) {
+		long data = *(long long *) (map_data->payload + i);
+		if (data == host_native) {
+			map_data->host_offset_idx = i + 8;
+			break;
+		}
+	}
+	if (map_data->host_offset_idx == 0) {
+		cw_bpf_debug("[java client] host_offset_idx error:\n");
+		return 1;
+	}
 
-	// 单次
-	if (end_str_len <= copy_size) {
-		// 写头
-		bpf_probe_write_user((void *) jbytechar_ptr + insert_pos, &map_data->header_stream, sizeof(map_data->header_stream));
-		// 写尾
-		bpf_probe_write_user((void *) jbytechar_ptr + tail_offset_idx, tail_payload, L7_IOVEC_BUF_SIZE);
+
+	bpf_probe_read_user(&map_data->host, sizeof map_data->host, map_data->payload + map_data->host_offset_idx);
+	// Build Header
+	bpf_tail_call(ctx, &NAME(progs_jmp_up_map), PROG_DATA_JAVA_BUILD_HEADER_UP_IDX);
+	return 0;
+}
+
+// bpf_prog_up_build_header
+PROGUP(java_build_header)(struct pt_regs *ctx) {
+	u32 k0 = 0;
+	struct sock_t *map_data = bpf_map_lookup_elem(&socket_heap, &k0);
+	if (!map_data) {
+		cw_bpf_debug("[java client] Failed to lookup socket_heap\n");
+		return 1;
 	}
 
-	// 多批
-	if (end_str_len > copy_size) {
-//		bpf_tail_call(ctx, &jmp_table1, 1);
-		bpf_tail_call(ctx, &NAME(progs_jmp_up_map), PROG_DATA_JAVA_UPDATE_HEADER_UP_IDX);
+	if (!map_data->proc_info)
+		return 1;
+
+	struct ebpf_proc_info proc_info;
+	bpf_probe_read(&proc_info, sizeof(struct ebpf_proc_info), map_data->proc_info);
+
+	char host[30];
+	bpf_probe_read(&host, sizeof host, map_data->host);
+	host[29] = '\0';
+	for (u32 i = 0; i < 30; i++) {
+		if (host[i] == '\r') {
+			host[i] = '\0';
+			break;
+		}
 	}
+	cw_bpf_debug("[java client] http host %s\n", map_data->host);
 
+	struct apm_span_context *cw_sc = build_sc(proc_info, host);
+	if (cw_sc == NULL) {
+		return 0;
+	}
+	span_context_to_cw_string_stream(cw_sc, map_data->header_stream, '1');
+	cw_bpf_debug("[java client] header:[%s],sizeof %d ", map_data->header_stream, sizeof(map_data->header_stream));
+	// 更新Header
+	bpf_tail_call(ctx, &NAME(progs_jmp_up_map), PROG_DATA_JAVA_UPDATE_HEADER_UP_IDX);
 	return 0;
 }
 
@@ -479,27 +355,43 @@ PROGUP(java_update_header)(struct pt_regs *ctx) {
 	u32 insert_pos = map_data->header_offset_idx;
 	u32 tail_offset_idx = insert_pos + sizeof(map_data->header_stream) - 1;
 	u32 end_str_len = map_data->end_str_len;
-	void * jbytechar_ptr = map_data->payload_char_p;
+	void *jbytechar_ptr = map_data->payload_char_p;
+	void *len_from_rbp_ptr = map_data->payload_len_p;
 
 	if (!jbytechar_ptr) {
 		return -1;
 	}
 
+	long new_val = map_data->size + HEADER_LEN;
+
+	long res = bpf_probe_write_user((void *) len_from_rbp_ptr, &new_val, sizeof(new_val));
+	if (res < 0) {
+		cw_bpf_debug("[java client] Failed to write value to user address: %p, error: %ld\n", len_from_rbp_ptr, res);
+		return -1;
+	}
+
+	// 单次
+	if (end_str_len <= copy_size) {
+		// 写头
+		bpf_probe_write_user((void *) jbytechar_ptr + insert_pos, &map_data->header_stream,
+		                     sizeof(map_data->header_stream));
+		// 写尾
+		bpf_probe_write_user((void *) jbytechar_ptr + tail_offset_idx, tail_payload, L7_IOVEC_BUF_SIZE);
+		return 0;
+	}
+
+
 	// 多批
 	u32 chunk = end_str_len / copy_size;
-	bpf_probe_write_user((void *) jbytechar_ptr + insert_pos, &map_data->header_stream, sizeof(map_data->header_stream));
+	bpf_probe_write_user((void *) jbytechar_ptr + insert_pos, &map_data->header_stream,
+	                     sizeof(map_data->header_stream));
 	for (u32 i = 0; i < MAX_CHUNK; i++) {
 		if (i <= chunk) {
 			tail_offset_idx = insert_pos + sizeof(map_data->header_stream) - 1 + i * copy_size;
-			bpf_probe_write_user((void *) jbytechar_ptr + tail_offset_idx, tail_payload + i * copy_size, L7_IOVEC_BUF_SIZE);
+			bpf_probe_write_user((void *) jbytechar_ptr + tail_offset_idx, tail_payload + i * copy_size,
+			                     L7_IOVEC_BUF_SIZE);
 		}
 	}
-//
-//	long new_val;
-//	new_val = map_data->size + HEADER_LEN;
-//
-//	long res = bpf_probe_write_user((void *) len_from_rbp_ptr, &new_val, sizeof(new_val));
-//	if (res < 0) cw_bpf_debug("Failed to write value to user address: %p, error: %ld\n", len_from_rbp_ptr, res);
 
 	return 0;
 }

+ 46 - 36
ebpftracer/ebpf/utrace/java/net/server.probe.bpf.c

@@ -59,7 +59,7 @@ static __inline int check_partial_header(const char *data, u32 i) {
 
 static __inline u32 get_http_header_offset(const char *data, u32 offset, u32 len) {
 #pragma clang loop unroll(full)
-	for (u32 i = offset; i < len - 10; i++) {
+	for (u32 i = offset; i < len; i++) {
 		if (data[i] == '\r' && data[i + 1] == '\n' && check_partial_header(data, i)) {
 			return i + 11;
 		}
@@ -84,6 +84,17 @@ static __inline u32 get_http_header_offset(const char *data, u32 offset, u32 len
 
 static __inline u32 has_cw_header(const char *data)
 {
+	// cw header 查询
+	long cw_header_native = 0x6361727477630a0dLL; // 小端序下的 "\r\ncwtrac" {0x0d,0x0a,0x63,0x77,0x74,0x72,0x61,0x63}
+#pragma clang loop unroll(full)
+	for (u32 i = 0; i < 500 - 8; i++) {
+		long tmp_data = *(long long *) (data + i);
+		if (tmp_data == cw_header_native) {
+			return i+11;
+		}
+	}
+	return 0;
+
 //	u32 ii;
 //#pragma unroll
 //	for (int i = 0; i < 11; ++i) {
@@ -105,37 +116,37 @@ static __inline u32 has_cw_header(const char *data)
 
 //	u32 i = get_http_header_offset(data, 0, 275);
 
-	u32 i = get_http_header_offset(data, 0, 25);
-	if (i == 0) {
-		i = get_http_header_offset(data, 25, 50);
-	}
-	if (i == 0) {
-		i = get_http_header_offset(data, 50, 75);
-	}
-	if (i == 0) {
-		i = get_http_header_offset(data, 75, 100);
-	}
-	if (i == 0) {
-		i = get_http_header_offset(data, 100, 125);
-	}
-	if (i == 0) {
-		i = get_http_header_offset(data, 125, 150);
-	}
-	if (i == 0) {
-		i = get_http_header_offset(data, 150, 175);
-	}
-	if (i == 0) {
-		i = get_http_header_offset(data, 175, 200);
-	}
-	if (i == 0) {
-		i = get_http_header_offset(data, 200, 225);
-	}
-	if (i == 0) {
-		i = get_http_header_offset(data, 225, 250);
-	}
-	if (i == 0) {
-		i = get_http_header_offset(data, 250, 275);
-	}
+//	u32 i = get_http_header_offset(data, 0, 25);
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 25, 50);
+//	}
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 50, 75);
+//	}
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 75, 100);
+//	}
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 100, 125);
+//	}
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 125, 150);
+//	}
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 150, 175);
+//	}
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 175, 200);
+//	}
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 200, 225);
+//	}
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 225, 250);
+//	}
+//	if (i == 0) {
+//		i = get_http_header_offset(data, 250, 275);
+//	}
 //	if (i == 0) {
 //		i = get_http_header_offset(data, 275, 300);
 //	}
@@ -148,7 +159,7 @@ static __inline u32 has_cw_header(const char *data)
 //	if (i == 0) {
 //		i = get_http_header_offset(data, 350, 500);
 //	}
-	return i;
+//	return i;
 }
 
 SEC("uprobe/Java_sun_nio_ch_FileDispatcherImpl_read0")
@@ -186,12 +197,11 @@ int uprobe_ret_Java_sun_nio_ch_FileDispatcherImpl_read0(struct pt_regs *ctx) {
 		return -1;
 	}
 
-//	cw_bpf_debug("read data is : %s\n", map_data->payload);
+	cw_bpf_debug("read data is : %s\n", map_data->payload);
 
 	u32 offset = has_cw_header(map_data->payload);
 	map_data->header_offset_idx = offset;
-
-
+	cw_bpf_debug("[Jvm service] Header offset: [%d]\n", offset);
 //	bpf_tail_call(ctx, &jmp_table1, 0);
 	bpf_tail_call(ctx, &NAME(progs_jmp_up_map), PROG_DATA_SAVE_UP_IDX);
 	return 0;

+ 4 - 2
ebpftracer/jvm.go

@@ -3,6 +3,7 @@ package ebpftracer
 import (
 	"errors"
 	"github.com/coroot/coroot-node-agent/ebpftracer/tracer/inject"
+	"github.com/coroot/coroot-node-agent/utils"
 	. "github.com/coroot/coroot-node-agent/utils/modelse"
 	klog "github.com/sirupsen/logrus"
 	"io/ioutil"
@@ -139,20 +140,21 @@ func (t *Tracer) AttachJavaNetWriteUprobes(pid uint32) ([]link.Link, error) {
 	if t.DisableE2ETracing() {
 		return nil, nil
 	}
+	cwJvmLibPath := utils.GetDefaultLibsPath("jvm", "cwlibnet.so")
 	//inject
 	originFunc := "Java_java_net_SocketOutputStream_socketWrite0"
 
 	uProbeData := inject.UprobeData{
 		Offset:  53,
 		Func:    originFunc,
-		ELFPath: "/root/cwlibnet.so",
+		ELFPath: cwJvmLibPath,
 	}
 
 	if runtime.GOARCH == "arm64" {
 		uProbeData = inject.UprobeData{
 			Offset:  8,
 			Func:    "CW_" + originFunc,
-			ELFPath: "/root/cwlibnet.so",
+			ELFPath: cwJvmLibPath,
 		}
 	}
 

+ 2 - 3
ebpftracer/netcore.go

@@ -21,7 +21,6 @@ import (
 const (
 	// goServeHTTP           = "net/http.serverHandler.ServeHTTP"
 	// binPath           = "/root/code/jdk8u/build/linux-x86_64-normal-server-release/jdk/lib/amd64/libnio.so"
-	libPath                  = "/data/NET8/CoreAoT/bin/Debug/net8.0/linux-x64/publish/CoreAoT"
 	netcoresymbolsocketRead0 = "SystemNative_Receive"
 )
 
@@ -168,7 +167,7 @@ func (t *Tracer) AttachNetCoreNetReadUprobes(pid uint32) ([]link.Link, error) {
 	if t.DisableL7Tracing() {
 		return nil, nil
 	}
-
+	libPath := "/data/NET8/CoreAoT/bin/Debug/net8.0/linux-x64/publish/CoreAoT"
 	var links []link.Link
 	ex, err := link.OpenExecutable(libPath)
 
@@ -264,7 +263,7 @@ func SplitByteByDelimiter(data []byte) []byte {
 
 func (t *Tracer) AttachNetCoreNetThreadUprobes(pid uint32) []link.Link {
 	// uprobes := []tracer.Uprobe{}
-
+	libPath := "/data/NET8/CoreAoT/bin/Debug/net8.0/linux-x64/publish/CoreAoT"
 	binFile, err := os.Open(libPath + ".dbg")
 	binFile2, err := os.Open(libPath)
 	if err != nil {

+ 7 - 1
ebpftracer/stack.go

@@ -4,6 +4,7 @@ import (
 	"github.com/cilium/ebpf"
 	"github.com/cilium/ebpf/link"
 	"github.com/coroot/coroot-node-agent/ebpftracer/tracer"
+	"github.com/coroot/coroot-node-agent/utils"
 	klog "github.com/sirupsen/logrus"
 )
 
@@ -39,7 +40,11 @@ func (t *Tracer) AttachStackUprobes(path string, uprobes []tracer.Uprobe) []link
 }
 
 func (t *Tracer) AttachJVMStackUprobes(path string, uprobes []tracer.Uprobe) []link.Link {
-	path = "/opt/cloudwise/smartagent/agent/NativeAgent/libnativeAgent.so"
+	// TODO copy至目标进程读取
+	//utils.GetDefaultAgentsPath("NativeAgent","libnativeAgent.so")
+	//path = utils.GetDefaultAgentsPath("NativeAgent", "libnativeAgent.so")
+	//path = "/tmp/NativeAgentSo2378900480034120722.tmp"
+	path = utils.GetDefaultAgentsPath("NativeAgent", "libnativeAgent.so")
 
 	setNodeEnter := "Java_com_cloudwise_agent_common_natives_TraceNative_setNodeEnter"
 	setNodeReturn := "Java_com_cloudwise_agent_common_natives_TraceNative_setNodeReturn"
@@ -49,6 +54,7 @@ func (t *Tracer) AttachJVMStackUprobes(path string, uprobes []tracer.Uprobe) []l
 	var links []link.Link
 	ex, err := link.OpenExecutable(path)
 	if err != nil {
+		klog.Error(err)
 		return nil
 	}
 

+ 2 - 2
ebpftracer/tracer.go

@@ -230,9 +230,9 @@ type perfMap struct {
 func (t *Tracer) ebpf(ch chan<- Event) error {
 	kv := "v" + common.KernelMajorMinor(t.kernelVersion)
 	path, prg, err := EbpfCode(kv)
-	klog.Infof("kv is %s, kernel version: %s path: %s", kv, t.kernelVersion, path)
+	klog.Infof("kv is [%s], kernel version: [%s] path: [%s]", kv, t.kernelVersion, path)
 	if len(prg) == 0 || err != nil {
-		return fmt.Errorf("kv is %s, unsupported kernel version: %s path: %s err:<%v>", kv, t.kernelVersion, path, err)
+		return fmt.Errorf("kv is %s, unsupported kernel version: [%s] path: [%s] err:<%v>", kv, t.kernelVersion, path, err)
 	}
 	_, debugFsErr := os.Stat("/sys/kernel/debug/tracing")
 	_, traceFsErr := os.Stat("/sys/kernel/tracing")

+ 4 - 0
ebpftracer/tracer/inject/inject_linux_amd64.go

@@ -107,6 +107,7 @@ func (j *JvmInjector) findReleaseAddressInfoFromMem() error {
 		if pc == 0 && inst.Op == x86asm.JMP {
 			// 已经被修改过的首指令
 			j.PreCheck.EbpfCanInjection = true
+			j.Uprobe.ELFPath = j.DebugLibNetInfo.LibPath
 			klog.Infof("[inject] Inst already modified. <%s>", x86asm.IntelSyntax(inst, 0, nil))
 			return nil
 		}
@@ -122,8 +123,11 @@ func (j *JvmInjector) findReleaseAddressInfoFromMem() error {
 					if src, okSrc := inst.Args[1].(x86asm.Reg); okSrc {
 						if src == x86asm.R9L {
 							// debug so
+							klog.Infof("[inject] release.so is debug.so. <%s>", x86asm.IntelSyntax(inst, 0, nil))
 							j.PreCheck.EbpfCanInjection = true
+							j.Uprobe.ELFPath = j.ReleaseLibNetInfo.LibPath
 							return fmt.Errorf("MOV from register %v to memory %v\n", src, dst)
+							//return nil
 						}
 					}
 				}

+ 6 - 1
ebpftracer/tracer/socket.go

@@ -66,6 +66,8 @@ func insert_output_prog_to_map(collection *ebpf.Collection) {
 
 	__insert_output_prog_to_map(collection, MAP_PROGS_JMP_UP_NAME, PROG_SAVE_SC_DATA_FOR_UP, PROG_DATA_SAVE_UP_IDX)
 	__insert_output_prog_to_map(collection, MAP_PROGS_JMP_UP_NAME, PROG_JAVA_UPDATE_HEADER_FOR_UP, PROG_DATA_JAVA_UPDATE_HEADER_UP_IDX)
+	__insert_output_prog_to_map(collection, MAP_PROGS_JMP_UP_NAME, PROG_JAVA_FIND_HOST_FOR_UP, PROG_DATA_JAVA_FIND_HOST_UP_IDX)
+	__insert_output_prog_to_map(collection, MAP_PROGS_JMP_UP_NAME, PROG_JAVA_BUILD_HEADER_FOR_UP, PROG_DATA_JAVA_BUILD_HEADER_UP_IDX)
 	__insert_output_prog_to_map(collection, MAP_PROGS_JMP_UP_NAME, PROG_GO_UPDATE_HEADER_FOR_UP, PROG_DATA_GO_UPDATE_HEADER_UP_IDX)
 }
 
@@ -137,7 +139,9 @@ func set_offset_map(collectionSpec *ebpf.CollectionSpec, opts *ebpf.CollectionOp
 	if update_offset_map_from_btf_vmlinux(collectionSpec, opts) != ETR_OK {
 		klog.Infof("[eBPF Kernel Adapt] Set offsets map from btf_vmlinux, not support.")
 		if update_offset_map_default(collectionSpec, opts) != ETR_OK {
-			klog.Infof("Fatal error, failed to update default offset")
+			klog.Infof("[eBPF Kernel Adapt] Set offsets error, failed to update default offse.t")
+		} else {
+			klog.Infof("[eBPF Kernel Adapt] Set offsets map use default.")
 		}
 	} else {
 		klog.Infof("[eBPF Kernel Adapt] Set offsets map from btf_vmlinux, success.")
@@ -186,6 +190,7 @@ func set_conf_map_default(collectionSpec *ebpf.CollectionSpec, opts *ebpf.Collec
 func update_offset_map_from_btf_vmlinux(collectionSpec *ebpf.CollectionSpec, opts *ebpf.CollectionOptions) int {
 	btfSpec, err := btf.LoadKernelSpec()
 	if err != nil || btfSpec == nil {
+		klog.WithError(err).Warning("[eBPF Kernel Adapt] Failed to get btf.LoadKernelSpec")
 		return ETR_NOTSUPP
 	}
 

+ 2 - 1
flags/flags.go

@@ -22,7 +22,7 @@ var (
 	DisableE2ETracing   = kingpin.Flag("disable-e2e-tracing", "Disable e2e tracing").Default("false").Envar("DISABLE_E2E_TRACING").Bool()
 
 	ExternalNetworksWhitelist = kingpin.Flag("track-public-network", "Allow track connections to the specified IP networks, all private networks are allowed by default (e.g., Y.Y.Y.Y/mask)").Envar("TRACK_PUBLIC_NETWORK").Strings()
-	EphemeralPortRange        = kingpin.Flag("ephemeral-port-range", "Destination and Listen TCP ports from this range will be skipped").Default("32768-60999").Envar("EPHEMERAL_PORT_RANGE").String()
+	EphemeralPortRange        = kingpin.Flag("ephemeral-port-range", "Destination and Listen TCP ports from this range will be skipped").Default("").Envar("EPHEMERAL_PORT_RANGE").String()
 
 	Provider          = kingpin.Flag("provider", "`provider` label for `node_cloud_info` metric").Envar("PROVIDER").String()
 	Region            = kingpin.Flag("region", "`region` label for `node_cloud_info` metric").Envar("REGION").String()
@@ -44,6 +44,7 @@ var (
 	WalDir         = kingpin.Flag("wal-dir", "Path to where the agent stores data (e.g. the metrics Write-Ahead Log)").Default("/tmp/coroot-node-agent").Envar("WAL_DIR").String()
 	DumpApps       = kingpin.Flag("dump", "Dump app snap").Default("false").Bool()
 	LogLevel       = kingpin.Flag("log-level", "Log level").Envar("LOG_LEVEL").Default("info").String()
+	EbpfFilePath   = kingpin.Flag("ebpf-path", "Set ebpf file path").Envar("EBPF_FILE").Default("").String()
 )
 
 func GetString(fl *string) string {

+ 4 - 0
utils/modelse/bpf_struct.go

@@ -36,6 +36,8 @@ const (
 	PROG_IO_EVENT_NAME_FOR_TP      = PROGTP + "io_event"
 	PROG_SAVE_SC_DATA_FOR_UP       = PROGUP + "java_save_sc"
 	PROG_JAVA_UPDATE_HEADER_FOR_UP = PROGUP + "java_update_header"
+	PROG_JAVA_FIND_HOST_FOR_UP     = PROGUP + "java_find_host"
+	PROG_JAVA_BUILD_HEADER_FOR_UP  = PROGUP + "java_build_header"
 	PROG_GO_UPDATE_HEADER_FOR_UP   = PROGUP + "go_update_header"
 )
 
@@ -55,6 +57,8 @@ const (
 const (
 	PROG_DATA_SAVE_UP_IDX = iota
 	PROG_DATA_JAVA_UPDATE_HEADER_UP_IDX
+	PROG_DATA_JAVA_FIND_HOST_UP_IDX
+	PROG_DATA_JAVA_BUILD_HEADER_UP_IDX
 	PROG_DATA_GO_UPDATE_HEADER_UP_IDX
 	PROG_UPROBE_NUM
 )

+ 9 - 0
utils/util.go

@@ -36,6 +36,7 @@ var (
 	BinPath          = "bin"
 	ConfPath         = "conf"
 	LogsPath         = "logs"
+	LibsPath         = "libs"
 	ConfName         = "daemon.conf"
 	ComIniFile       = "common.ini"
 	LogName          = "daemon.log"
@@ -485,6 +486,14 @@ func GetDefaultLogPath() string {
 	return GetDefaultPath(LogsPath)
 }
 
+func GetDefaultLibsPath(path_name ...string) string {
+	return GetDefaultPath(LibsPath, runtime.GOARCH, filepath.Join(path_name...))
+}
+
+func GetDefaultAgentsPath(path_name ...string) string {
+	return GetDefaultPath(AgentsPath, filepath.Join(path_name...))
+}
+
 func GetDefaultBasePath() string {
 	return filepath.Join(GetDefaultPath(ScriptPath), "base")
 }

Some files were not shown because too many files changed in this diff