scouter-project / scouter

Scouter is an open source APM (Application Performance Management) tool.
Other
2.09k stars 565 forks source link

java.agent plugin 이용 시 hook 안되는 이슈 #692

Open mspark7233 opened 4 years ago

mspark7233 commented 4 years ago

spring resttemplate을 이용하여 통신하는데 tls 버전 이슈가 있어, sun.security.ssl.SSLSocketImpl를 capture.plug 이용하여 profile를 남기려고 하는데 hook 이 안되는 거 같네요

설정은 아래와 같이 하였습니다.

[args] // void capArgs(WrContext $ctx, HookArgs $hook) { $ctx.profile("[capArgs] class name : " + $hook.getThis().getClass().getName()); ... hook_args_patterns=sun.security.ssl.SSLSocketImpl.* 참고로 sun.security.ssl.SSLSocketImpl 클래스에 메소드 호출은 profile_socket_open_fullstack_enable=true로 확인 하였습니다. scouter.util.ThreadUtil.getThreadStack(ThreadUtil.java:109) scouter.agent.trace.TraceApiCall.endSocket(TraceApiCall.java:259) java.net.Socket.connect(Socket.java:621) **sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666)** sun.net.NetworkClient.doConnect(NetworkClient.java:175) sun.net.www.http.HttpClient.openServer(HttpClient.java:463) sun.net.www.http.HttpClient.openServer(HttpClient.java:558) sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:264) sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367) sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162) sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056) sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:167) org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76) org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:46) org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:49) org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:488) org.springframework.web.client.RestTemplate.execute(RestTemplate.java:452) org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:400)
gunlee01 commented 4 years ago

hook_ 로 시작하는 설정 변경시에 재기동 필요합니다. agent가 설정된 jvm 재기동 후에 한번 확인해 보세요. 그게 원인이 아니라면 Socket 클래스가 bci 작동 이전에 preload 되어서 그럴 수 있습니다. 이 이슈라면 해결이 쉽지 않을 수 있으니 sun.net.NetworkClient.doConnect 나 더 하위 stack의 method에 걸어보세요.