문제 상황
기존 서비스 : 하나의 서버 안에 tomcat과 DB가 한 군데에 있어서 정상적으로 추적할 수 있었다.
현재 상황 : A 서버 안에 agent와 tomcat을 심었고, B 서버(물리적으로 다른 서버)를 DB 서버로 두어 현재 B 서버 내부의 postgreSQL을 탐색하지 못하는 것 같다.
01-30 15:34:10.010 [nfoSender-Timer] INFO c.n.p.p.AgentInfoSender -- AgentInfo sent.
01-30 15:34:10.010 [ main] ERROR c.n.p.p.t.BaseClassFileTransformer -- Transformer:com.navercorp.pinpoint.profiler.plugin.MatchableClassFileTransformerDelegate threw an exception. codeLocation:jar:file:/경로.jar!/ cl:org.springframework.boot.loader.LaunchedURLClassLoader@27df0f3d ctxCl:TomcatEmbeddedWebappClassLoader
context: ROOT
delegate: true
----------> Parent Classloader:
org.springframework.boot.loader.LaunchedURLClassLoader@27df0f3d
agentCl:ParallelClassLoader@401625763{name='pinpoint.agent'} Cause:com.navercorp.pinpoint.bootstrap.instrument.NotFoundInstrumentException: Cannot find constructor with parameter types: [org.postgresql.util.HostSpec[], java.lang.String, java.lang.String, java.util.Properties, java.lang.String]
com.navercorp.pinpoint.exception.PinpointException: com.navercorp.pinpoint.bootstrap.instrument.NotFoundInstrumentException: Cannot find constructor with parameter types: [org.postgresql.util.HostSpec[], java.lang.String, java.lang.String, java.util.Properties, java.lang.String]
at com.navercorp.pinpoint.profiler.plugin.MatchableClassFileTransformerDelegate.transform(MatchableClassFileTransformerDelegate.java:66) ~[pinpoint-profiler-2.3.3.jar:2.3.3]
at com.navercorp.pinpoint.profiler.transformer.BaseClassFileTransformer.transform(BaseClassFileTransformer.java:56) ~[pinpoint-profiler-2.3.3.jar:2.3.3]
at com.navercorp.pinpoint.profiler.transformer.DefaultClassFileTransformerDispatcher.transform(DefaultClassFileTransformerDispatcher.java:90) ~[pinpoint-profiler-2.3.3.jar:2.3.3]
at sun.instrument.TransformerManager.transform(TransformerManager.java:188) ~[?:1.8.0_352]
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428) ~[?:1.8.0_352]
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_352]
at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[?:1.8.0_352]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_352]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) ~[?:1.8.0_352]
at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_352]
at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_352]
at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_352]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_352]
at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_352]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_352]
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151) ~[file
-0.0.1.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_352]
at org.postgresql.Driver.makeConnection(Driver.java:402) ~[postgresql-42.4.0.jar!/:42.4.0]
at org.postgresql.Driver.connect(Driver.java:261) ~[postgresql-42.4.0.jar!/:42.4.0]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar!/:?]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar!/:?]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar!/:?]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar!/:?]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar!/:?]
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-4.0.3.jar!/:?]
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar!/:?]
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) ~[spring-jdbc-5.3.16.jar!/:5.3.16]
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) ~[spring-jdbc-5.3.16.jar!/:5.3.16]
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) ~[spring-jdbc-5.3.16.jar!/:5.3.16]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:330) ~[spring-jdbc-5.3.16.jar!/:5.3.16]
at org.springframework.boot.jdbc.EmbeddedDatabaseConnection.isEmbedded(EmbeddedDatabaseConnection.java:162) ~[spring-boot-2.6.4.jar!/:2.6.4]
at org.springframework.boot.autoconfigure.orm.jpa.HibernateDefaultDdlAutoProvider.getDefaultDdlAuto(HibernateDefaultDdlAutoProvider.java:42) ~[spring-boot-autoconfigure-2.6.4.jar!/:2.6.4]
at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.lambda$getVendorProperties$1(HibernateJpaConfiguration.java:130) ~[spring-boot-autoconfigure-2.6.4.jar!/:2.6.4]
at org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings.getDdlAuto(HibernateSettings.java:41) ~[spring-boot-autoconfigure-2.6.4.jar!/:2.6.4]
at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineDdlAuto(HibernateProperties.java:143) ~[spring-boot-autoconfigure-2.6.4.jar!/:2.6.4]
at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.getAdditionalProperties(HibernateProperties.java:103) ~[spring-boot-autoconfigure-2.6.4.jar!/:2.6.4]
at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineHibernateProperties(HibernateProperties.java:95) ~[spring-boot-autoconfigure-2.6.4.jar!/:2.6.4]
at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.getVendorProperties(HibernateJpaConfiguration.java:132) ~[spring-boot-autoconfigure-2.6.4.jar!/:2.6.4]
at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:132) ~[spring-boot-autoconfigure-2.6.4.jar!/:2.6.4]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_352]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_352]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_352]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_352]
GPT의 도움을 조금 받았다.
에러 원인 분석 결과 다음과 같은 가능성이 있었다.
에러 로그 분석 결과, NotFoundInstrumentException 예외가 발생한 것으로 보입니다.
이 예외는 Pinpoint 에이전트가
org.postgresql.util.HostSpec[], java.lang.String, java.lang.String, java.util.Properties,
java.lang.String 매개변수를 가진 생성자를 찾을 수 없을 때 발생합니다.
이는 주로 PostgreSQL 드라이버의 버전이 Pinpoint 에이전트와 호환되지 않을 때
나타날 수 있는 문제입니다.
에러 로그
com.navercorp.pinpoint.profiler.plugin.MatchableClassFileTransformerDelegate에서 에러가 발생. 이 클래스 내에서 transform 메서드가 호출되는 도중에 NotFoundInstrumentException 예외가 발생했음.
해결 방안
postgreSQL 버전 확인

https://github.com/pinpoint-apm/pinpoint/issues/6750
Cannot start pinpoint agent v2.0.1 normally · Issue #6750 · pinpoint-apm/pinpoint
What version of pinpoint are you using? v2.0.1 Describe your problem** When starting the application with pinpoint agent configured I'm getting an NotFoundInstrumentException. What have you done? S...
github.com
https://github.com/pinpoint-apm/pinpoint/tree/master/plugins/postgresql-jdbc
플러그인을 확인하자. 내가 문제되는 Postgresql JDBC Driver를 확인해보았다.
pinpoint.config 파일에서 설정을 변경할 수 있다.
내부 config 중 이 부분을 변경하자. jdbc에 따라 내용을 변경할 것.
profiler.jdbc.url=jdbc:postgresql://[해당 서버의 IP 주소]:[포트]/[데이터베이스명]