最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

java - How to inject dynamically otel-agent - Stack Overflow

programmeradmin3浏览0评论

I am trying to use the JDK's own "com. Sun. View the attach the VirtualMachine" to dynamically inject OpenTelemetry - Agent:

import com.sun.tools.attach.*;
VirtualMachine vm = VirtualMachine.attach(String.valueOf(PID));
vm.loadAgent(agentName)

I found that I did successfully inject it from the jvm into my application and was able to successfully read the parameters configured on the application.Also, in Tomcat's catalina.out, the log information at the time of injection is printed:

[otel.javaagent 2025-02-18 17:45:07:954 +0800] [Attach Listener] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 2.11.0

But all kinds of errors followed, and it seemed that all classes could not be retransformed,like:

[otel.javaagent 2025-02-18 18:29:50:182 +0800] [Attach Listener] DEBUG io.opentelemetry.javaagent.tooling.AgentInstaller$TransformLoggingListener - Transformed ioty.channel.DefaultChannelPipeline -- ParallelWebappClassLoader
  context: czcb_security_service
  delegate: false
----------> Parent Classloader:
java.URLClassLoader@4eec7777

[otel.javaagent 2025-02-18 18:29:50:189 +0800] [Attach Listener] DEBUG io.opentelemetry.javaagent.tooling.AgentInstaller$RedefinitionLoggingListener - Exception while retransforming 262 classes: [class filters.ExampleFilter, class compressionFilters.CompressionFilter, class async.Stockticker, class com.alibaba.csp.sentinel.transportmand.http.HttpEventTask, class com.ifp.core.session.IFPSessionManager$1, class ioty.channel.AbstractChannelHandlerContext$WriteTask, class com.alibaba.csp.sentinel.transportmand.SimpleHttpCommandCenter$ServerThread, class com.alibaba.csp.sentinel.slots.system.SystemStatusListener, class com.alibaba.csp.sentinel.transport.init.HeartbeatSenderInitFunc$1, class com.alibaba.csp.sentinel.transportmand.SimpleHttpCommandCenter$2, class .apache.dubbomon.threadlocal.InternalRunnable, class .apache.dubbo.remoting.transport.dispatcher.ChannelEventRunnable, class ioty.handler.timeout.IdleStateHandler$AllIdleTimeoutTask, class ioty.handler.timeout.IdleStateHandler$AbstractIdleTask, class ioty.channel.nio.AbstractNioByteChannel$1, class .apache.dubbo.metadata.report.support.AbstractMetadataReport$SaveProperties, class .apache.curator.framework.imps.DeleteBuilderImpl$5, class .apache.curator.framework.imps.GetChildrenBuilderImpl$3, class .apache.curator.framework.imps.CreateBuilderImpl$11, class .apache.dubbomon.threadlocal.InternalThread, class ioty.channel.AbstractChannel$AbstractUnsafe$2, class ioty.bootstrap.ServerBootstrap$ServerBootstrapAcceptor$1, class ioty.bootstrap.AbstractBootstrap$2, class ioty.bootstrap.ServerBootstrap$1$1, class ioty.bootstrap.AbstractBootstrap$PendingRegistrationPromise, class ioty.util.concurrent.FastThreadLocalRunnable, class ioty.util.internal.ThreadExecutorMap$2, class ioty.util.concurrent.SingleThreadEventExecutor$4, interface ioty.util.concurrent.AbstractEventExecutor$LazyRunnable, class ioty.channel.AbstractChannel$AbstractUnsafe$1, class ioty.buffer.PooledByteBufAllocator$1, class ioty.channel.nio.AbstractNioChannel$1, class ioty.channel.SucceededChannelFuture, class ioty.channel.CompleteChannelFuture, class ioty.channel.AbstractChannelHandlerContext, class ioty.channel.DefaultChannelPipeline$PendingHandlerRemovedTask, class ioty.channel.DefaultChannelPipeline$PendingHandlerAddedTask, class ioty.channel.DefaultChannelPipeline$PendingHandlerCallback, interface ioty.channel.ChannelProgressivePromise, interface ioty.channel.ChannelProgressiveFuture, class ioty.channel.DefaultChannelPipeline, class ioty.channel.AbstractChannel$CloseFuture, class ioty.channel.DefaultChannelPromise, class ioty.channel.VoidChannelPromise, interface ioty.channel.ChannelPipeline, class ioty.util.concurrent.SingleThreadEventExecutor$1, class ioty.channel.nio.NioEventLoop, class ioty.channel.SingleThreadEventLoop, class ioty.util.concurrent.SingleThreadEventExecutor, class ioty.util.concurrent.FailedFuture, class ioty.util.concurrent.CompleteFuture, class ioty.util.concurrent.GlobalEventExecutor$TaskRunner, class ioty.util.concurrent.GlobalEventExecutor$1, class ioty.util.concurrent.PromiseTask$SentinelRunnable, class ioty.util.concurrent.ScheduledFutureTask, class ioty.util.concurrent.PromiseTask, class ioty.util.concurrent.AbstractScheduledEventExecutor$2, interface ioty.util.concurrent.ScheduledFuture, interface ioty.util.concurrent.ProgressivePromise, interface ioty.util.concurrent.ProgressiveFuture, class ioty.util.concurrent.GlobalEventExecutor, class ioty.util.concurrent.AbstractScheduledEventExecutor, class ioty.util.concurrent.AbstractEventExecutor, class ioty.util.concurrent.DefaultPromise, class ioty.util.concurrent.AbstractFuture, class ioty.channel.nio.NioEventLoopGroup, class ioty.channel.MultithreadEventLoopGroup, class ioty.util.concurrent.MultithreadEventExecutorGroup, class ioty.util.concurrent.AbstractEventExecutorGroup, class ioty.util.concurrent.FastThreadLocalThread, class .apache.dubbomon.timer.HashedWheelTimer$Worker, class .apache.curator.framework.imps.ExistsBuilderImpl$3, class .apache.curator.framework.listen.ListenerContainer$1, class .apache.curator.framework.imps.CuratorFrameworkImpl$4, class .apache.zookeeper.ClientCnxn$EventThread, class .apache.zookeeper.ClientCnxn$SendThread, class .apache.zookeeper.server.ZooKeeperThread, class .apache.curator.framework.state.ConnectionStateManager$1, class com.googlemon.util.concurrent.AbstractListeningExecutorService, interface ioty.channel.ChannelPromise, interface ioty.util.concurrent.Promise, interface ioty.channel.ChannelFuture, interface ioty.util.concurrent.Future, class com.ifp.adapterty.http.NettyResponse, class com.ifp.adapterty.http.NettyRequest, class cfca.ch.qos.logback.classic.joran.ReconfigureOnChangeTask, class com.cfca.ra.cs.generated.CSProcessorSoapBindingStub, class .apachemons.discovery.jdk.PsuedoSystemClassLoader, interface com.cfca.ra.cs.generated.CSProcessor, class com.alibaba.druid.pool.DruidPooledCallableStatement, class com.alibaba.druid.pool.DruidPooledPreparedStatement, class com.alibaba.druid.pool.DruidPooledStatement, class com.alibaba.druid.stat.DruidDataSourceStatManager, class oracle.jdbc.driver.OracleTimeoutPollingThread, interface com.alibaba.druid.proxy.jdbc.ConnectionProxy, class oracle.jdbc.driver.T4CConnection, class oracle.jdbc.driver.PhysicalConnection, class oracle.jdbc.driver.OracleConnection, class oracle.jdbc.OracleConnectionWrapper, interface oracle.jdbc.internal.OracleConnection, interface oracle.jdbc.OracleConnection, class oracle.jdbc.driver.T4CCallableStatement, class oracle.jdbc.driver.OracleCallableStatement, interface oracle.jdbc.internal.OracleCallableStatement, interface oracle.jdbc.OracleCallableStatement, class oracle.jdbc.driver.T4CPreparedStatement, class oracle.jdbc.driver.OraclePreparedStatement, interface oracle.jdbc.internal.OraclePreparedStatement, interface oracle.jdbc.OraclePreparedStatement, class oracle.jdbc.driver.T4CStatement, class oracle.jdbc.driver.OracleStatement, interface oracle.jdbc.internal.OracleStatement, interface oracle.jdbc.OracleStatement, class oracle.jdbc.driver.OracleDriver, class com.alibaba.druid.mock.MockDriver, class com.alibaba.druid.proxy.DruidDriver, class com.alibaba.csp.sentinel.util.TimeUtil, class com.jcraft.jsch.ChannelSftp, class com.jcraft.jsch.ChannelSession, class com.jcraft.jsch.Channel, class com.alibaba.csp.sentinel.node.metric.MetricTimerListener, class com.alibaba.fastjson.util.ASMClassLoader, class .apache.ibatis.ognl.enhance.ContextClassLoader, class com.alibaba.druid.pool.DruidDataSource$LogStatsThread, class com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread, class com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread, class com.alibaba.druid.pool.DruidDataSource$DestroyTask, class com.alibaba.druid.pool.DruidPooledConnection, class .apachemons.pool2.impl.BaseGenericObjectPool$Evictor, class redis.clients.jedis.Connection, class redis.clients.jedis.Jedis, class redis.clients.jedis.BinaryJedis, class com.ctrip.framework.apollo.internals.RemoteConfigRepository$2, class .apache.dubbo.config.DubboShutdownHook, interface .apache.http.client.HttpClient, class .apache.dubbomon.extension.ExtensionLoader, class .apache.ibatis.logging.LogFactory$6, class .apache.ibatis.logging.LogFactory$5, class .apache.ibatis.logging.LogFactory$4, class .apache.ibatis.logging.LogFactory$3, class .apache.ibatis.logging.LogFactory$2, class .apache.ibatis.logging.LogFactory$1, class com.ctrip.framework.apollo.spring.property.SpringValueRegistry$1, class com.ifp.core.base.IFPClassLoader, class com.ctrip.framework.apollo.internals.RemoteConfigLongPollService$2, class com.ctrip.framework.apollo.internals.RemoteConfigRepository$1, class com.ctrip.framework.apollo.internals.ConfigServiceLocator$2, class com.dianping.cat.message.io.ChannelManager, class com.dianping.cat.message.io.TcpSocketSender, interface .unidal.helper.Threads$Task, class .unidal.helper.Threads$RunnableThread, class .unidal.helper.Threads$Manager$1, class .springframework.cglib.core.internal.LoadingCache$2, class com.google.inject.internal.BytecodeGen$BridgeClassLoader, class com.google.inject.internal.AbstractBindingProcessor$Processor$1, class com.googlemon.util.concurrent.SettableFuture, class com.googlemon.util.concurrent.AbstractFuture, class .springframework.beans.factory.support.DisposableBeanAdapter, class .apache.log4j.PropertyWatchdog, class .apache.log4j.helpers.FileWatchdog, class .apache.log4j.Category, class .springframework.context.support.AbstractApplicationContext$2, class .springframework.context.support.ContextTypeMatchClassLoader, class .springframework.core.DecoratingClassLoader, class .springframework.web.context.support.XmlWebApplicationContext, class .springframework.web.context.support.AbstractRefreshableWebApplicationContext, class .springframework.context.support.AbstractApplicationContext, class io.opentelemetry.api.trace.PropagatedSpan, class io.opentelemetry.context.ArrayBasedContext, class io.opentelemetry.context.ContextStorageWrappers, class .apache.logging.log4j.core.LoggerContext$1, class .apache.logging.log4j.core.appender.AsyncAppenderEventDispatcher, class com.lmax.disruptor.BatchEventProcessor, interface com.lmax.disruptor.EventProcessor, class .apache.logging.log4j.core.util.Log4jThread, class .apache.logging.log4j.core.Logger, class .apache.logging.log4j.core.LoggerContext$ThreadContextDataTask, class .apache.logging.log4j.core.appender.rolling.action.PosixViewAttributeAction, class .apache.logging.log4j.core.appender.routing.IdlePurgePolicy, class .apache.logging.log4j.core.appender.rolling.action.DeleteAction, class .apache.logging.log4j.core.appender.rolling.action.AbstractPathAction, class .apache.logging.log4j.core.appender.rolling.action.AbstractAction, interface .apache.logging.log4j.core.appender.rolling.action.Action, class .apache.logging.log4j.core.impl.ContextDataInjectorFactory, interface .apache.logging.log4j.core.util.Cancellable, class .apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry, class .apache.logging.log4j.simple.SimpleLogger, class .apache.logging.log4j.status.StatusLogger, class .apache.logging.log4j.spi.AbstractLogger, class com.ifp.web.servlet.CenterServiceRequestServlet, class com.ifp.web.servlet.IFPRequestServlet, class .springframework.web.servlet.FrameworkServlet, class .springframework.web.servlet.HttpServletBean, class com.ifp.web.filter.SetCharacterEncodingFilter, class .apache.tomcat.util.threads.TaskThread$WrappingRunnable, class .apache.tomcat.util.threads.ThreadPoolExecutor, class .apache.tomcat.util.threads.TaskThread, class .apache.catalina.core.ContainerBase$ContainerBackgroundProcessor, class .apache.catalina.filters.RequestDumperFilter, class .apache.catalina.filters.CsrfPreventionFilter, class .apache.catalina.filters.CsrfPreventionFilterBase, class .apache.catalina.filters.SetCharacterEncodingFilter, class .apache.catalina.filters.FilterBase, class .apache.catalina.startup.HostConfig$DeployDirectory, class .apache.tomcat.websocket.server.WsFilter, class .apache.jasper.servlet.JspServlet, class javax.servlet.ServletOutputStream, class .apache.catalina.servlets.DefaultServlet, class javax.servlet.http.HttpServlet, class javax.servlet.GenericServlet, interface javax.servlet.Filter, class .apache.catalina.loader.ParallelWebappClassLoader, class .apache.catalina.loader.WebappClassLoaderBase, interface javax.servlet.Servlet, class .apache.catalina.startup.HostConfig$DeployWar, class .apache.catalina.core.ContainerBase$StartChild, class .apache.tomcat.util.NioBlockingSelector$BlockPoller, class .apache.catalina.connector.CoyoteAdapter, class .apache.tomcat.util.NioEndpoint$Poller, class .apache.coyote.AbstractProtocol$AsyncTimeout, class .apache.catalina.connector.Response, interface javax.servlet.http.HttpServletResponse, class .apache.catalina.connector.Request, interface .apache.catalina.servlet4preview.http.HttpServletRequest, interface javax.servlet.http.HttpServletRequest, interface javax.servlet.ServletRequest, class .apache.tomcat.util.NioEndpoint$Acceptor, class .apache.tomcat.util.AbstractEndpoint$Acceptor, class .apache.tomcat.util.NioEndpoint$SocketProcessor, class .apache.tomcat.util.SocketProcessorBase, class .apache.catalina.startup.Catalina$CatalinaShutdownHook, class .apache.catalina.startup.SafeForkJoinWorkerThreadFactory$SafeForkJoinWorkerThread, class .apache.juli.AsyncFileHandler$LoggerThread, class .apache.juli.ClassLoaderLogManager$Cleaner, class .apache.juli.ClassLoaderLogManager$RootLogger, class java.util.concurrent.CompletableFuture$Completion, class java.util.concurrent.ForkJoinWorkerThread, class java.util.concurrent.ForkJoinTask, class java.util.concurrent.ForkJoinPool, interface java.rmi.Remote, class java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask, class sun.www.protocol.http.HttpURLConnection, class java.HttpURLConnection, interface java.util.concurrent.RunnableScheduledFuture, class java.util.concurrent.ScheduledThreadPoolExecutor, class java.lang.invoke.InnerClassLambdaMetafactory, class java.util.concurrent.Executors$RunnableAdapter, class java.util.concurrent.ThreadPoolExecutor$Worker, class java.util.concurrent.FutureTask, interface java.util.concurrent.RunnableFuture, interface java.util.concurrent.Callable, class java.util.logging.LogManager$RootLogger, class java.util.concurrent.ThreadPoolExecutor, class java.util.concurrent.Executors$FinalizableDelegatedExecutorService, class java.util.concurrent.Executors$DelegatedExecutorService, class java.util.concurrent.AbstractExecutorService, class java.util.logging.Logger, class sun.reflect.Reflection, class sun.misc.Launcher$AppClassLoader, class java.URLClassLoader, class java.lang.ClassLoader, class java.lang.Class]
java.lang.VerifyError
    at sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
    at sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:144)
    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:497)
    at net.bytebuddy.utility.Invoker$Dispatcher.invoke(Unknown Source)
    at net.bytebuddy.utility.dispatcher.JavaDispatcher$Dispatcher$ForNonStaticMethod.invoke(JavaDispatcher.java:1033)
    at net.bytebuddy.utility.dispatcher.JavaDispatcher$ProxiedInvocationHandler.invoke(JavaDispatcher.java:1163)
    at net.bytebuddy.agent.builder.$Proxy93.retransformClasses(Unknown Source)
    at net.bytebuddy.agent.builder.AgentBuilder$RedefinitionStrategy$Collector$ForRetransformation.doApply(AgentBuilder.java:8611)
    at net.bytebuddy.agent.builder.AgentBuilder$RedefinitionStrategy$Collector.apply(AgentBuilder.java:8426)
    at net.bytebuddy.agent.builder.AgentBuilder$RedefinitionStrategy.apply(AgentBuilder.java:6123)
    at net.bytebuddy.agent.builder.AgentBuilder$Default.doInstall(AgentBuilder.java:11737)
    at net.bytebuddy.agent.builder.AgentBuilder$Default.installOn(AgentBuilder.java:11637)
    at io.opentelemetry.javaagent.tooling.AgentInstaller.installBytebuddyAgent(AgentInstaller.java:202)
    at io.opentelemetry.javaagent.tooling.AgentInstaller.installBytebuddyAgent(AgentInstaller.java:109)
    at io.opentelemetry.javaagent.tooling.AgentStarterImpl.start(AgentStarterImpl.java:101)
    at io.opentelemetry.javaagent.bootstrap.AgentInitializer$1.run(AgentInitializer.java:54)
    at io.opentelemetry.javaagent.bootstrap.AgentInitializer$1.run(AgentInitializer.java:48)
    at io.opentelemetry.javaagent.bootstrap.AgentInitializer.execute(AgentInitializer.java:70)
    at io.opentelemetry.javaagent.bootstrap.AgentInitializer.initialize(AgentInitializer.java:47)
    at io.opentelemetry.javaagent.OpenTelemetryAgent.startAgent(OpenTelemetryAgent.java:57)
    at io.opentelemetry.javaagent.OpenTelemetryAgent.agentmain(OpenTelemetryAgent.java:49)
    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:497)
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
    at sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:411)
[otel.javaagent 2025-02-18 18:29:50:211 +0800] [Attach Listener] DEBUG io.opentelemetry.javaagent.tooling.AgentInstaller - Detected custom LogManager configuration: java.util.logging.manager=.apache.juli.ClassLoaderLogManager
[otel.javaagent 2025-02-18 18:29:50:211 +0800] [Attach Listener] DEBUG io.opentelemetry.javaagent.tooling.AgentInstaller - Class .apache.juli.ClassLoaderLogManager is on system classpath: not delaying AgentInstaller#afterAgent()
[otel.javaagent 2025-02-18 18:29:50:213 +0800] [Attach Listener] DEBUG io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.JmxMetricInsight - Empty JMX configuration, no metrics will be collected for InstrumentationScope io.opentelemetry.jmx

I want to be able to inject the Agent dynamically to make it easier to plug and unplug

发布评论

评论列表(0)

  1. 暂无评论