Я создал расширение для добавления комментариев в запрос sql. Для этого я создал класс MySQLAddCommentInstrumentation.java для внесения изменений в запрос в классе Statement.java.
Также есть один класс MySQLAddCommentInstrumentationModule.java, который добавляет этот инструментарий (MySQLAddCommentInstrumentation) в его список.
Когда я создаю это расширение и запускаю свое приложение, я не вижу комментарий в запросе под журналом zipkin db.statement.
Класс инструментирования — MySQLAddCommentInstrumentation.java
Путь — example/extension/src/main/java/com/example/javaagent/mysqlinstrumentation/MySQLAddCommentInstrumentation.java
package com.example.javaagent.mysqlinstrumentation;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
import net.bytebuddy.matcher.ElementMatchers;
public class MySQLAddCommentInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher typeMatcher() {
System.out.println("Inside MYSQL- 1.1");
return implementsInterface(named("java.sql.Statement"));
}
public void transform(TypeTransformer transformer) {
System.out.println("Inside MYSQL- 1.2");
transformer.applyAdviceToMethod(
namedOneOf("executeQuery")
.and(ElementMatchers.takesArgument(0, String.class))
.and(ElementMatchers.isPublic()),
MySQLAddCommentInstrumentation.class.getName() + "$StatementAddCommentAdvice");
System.out.println("Inside MYSQL- 1.3");
}
@SuppressWarnings("unused")
public static class StatementAddCommentAdvice {
@Advice.OnMethodEnter(suppress = Throwable.class)
public static void onEnter(@Advice.Argument(value = 0, readOnly = false) String sql) {
System.out.println("Inside MYSQL- 1.4");
sql = sql + " -- some comment";
System.out.println("Inside MYSQL- 1.5");
}
}
InstrumentationModule - MySQLAddCommentInstrumentationModule.java
Путь - example/extension/src/main/java/com/example/javaagent/mysqlinstrumentation/MySQLAddCommentInstrumentationModule.java
package com.example.javaagent.mysqlinstrumentation;
import static java.util.Collections.singletonList;
import com.google.auto.service.AutoService;
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers;
import java.util.List;
import net.bytebuddy.matcher.ElementMatcher;
@AutoService(InstrumentationModule.class)
public final class MySQLAddCommentInstrumentationModule extends InstrumentationModule {
public MySQLAddCommentInstrumentationModule() {
super("jdbc");
}
@Override
public int order() {
return 1;
}
@Override
public ElementMatcher.Junction classLoaderMatcher() {
return AgentElementMatchers.hasClassesNamed("java.sql.Statement");
}
@Override
public List typeInstrumentations() {
return singletonList(new MySQLAddCommentInstrumentation());
}
}
Код, в котором ожидается запуск этого инструментария:
try {
Connection con = DriverManager.getConnection(url, uname, password);
Statement statement = con.createStatement();
System.out.println(query);
ResultSet result = statement.executeQuery(query);
System.out.println(query);
} catch (SQLException e) {
e.printStackTrace();
}
Я запустил сборку ./gradlew внутри примеров/расширения и использовал этот jar-файл расширения для запуска своего приложения
java -javaagent:/Users/vaibhavpaharia/Downloads/opentelemetry-javaagent.jar \
-Dotel.javaagent.extensions=/Users/vaibhavpaharia/ok/opentelemetry-java-instrumentation/examples/extension/build/libs/opentelemetry-java-instrumentation-extension-demo-1.0-all.jar \
-Dotel.service.name=simpleapplication \
-Dotel.traces.exporter=zipkin \
-Dserver.port=8080 \
-jar /Users/vaibhavpaharia/Downloads/simpleproject/target/simpleproject-0.0.1-SNAPSHOT.jar
После запуска приложения с агентом и расширением я вижу, что другие расширения, присутствующие в папке примера, работают нормально.
Кроме того, я попытался изменить метод заказа в MySQLAddCommentInstrumentationModule. java и вернул оттуда 0, в этом случае Inside MYSQL- 1.1, Inside MYSQL- 1.2 и Inside MYSQL- 1.3 были напечатаны, так что кажется новое расширение распознается при запуске приложения. Он никогда не печатает Inside MYSQL- 1.4 и Inside MYSQL- 1.5. Также следы перестают поступать на zipkin.
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
[otel.javaagent 2023-01-05 14:50:31:010 +0530] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 1.20.2
Inside MYSQL- 1.1
Inside MYSQL- 1.2
Inside MYSQL- 1.3
[otel.javaagent 2023-01-05 14:50:34:068 +0530] [main] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.JmxMetricInsight - Empty JMX configuration, no metrics will be collected for InstrumentationScope io.opentelemetry.jmx
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.1)
2023-01-05T14:50:35.687+05:30 INFO 85143 --- [ main] c.e.s.SimpleprojectApplication : Starting SimpleprojectApplication v0.0.1-SNAPSHOT using Java 18.0.2 with PID 85143 (/Users/vaibhavpaharia/Downloads/simpleproject/target/simpleproject-0.0.1-SNAPSHOT.jar started by vaibhavpaharia in /Users/vaibhavpaharia)
2023-01-05T14:50:35.700+05:30 INFO 85143 --- [ main] c.e.s.SimpleprojectApplication : No active profile set, falling back to 1 default profile: "default"
2023-01-05T14:50:37.451+05:30 INFO 85143 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-01-05T14:50:37.531+05:30 INFO 85143 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-01-05T14:50:37.531+05:30 INFO 85143 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.4]
2023-01-05T14:50:37.643+05:30 INFO 85143 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-01-05T14:50:37.645+05:30 INFO 85143 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1859 ms
2023-01-05T14:50:38.254+05:30 INFO 85143 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-01-05T14:50:38.266+05:30 INFO 85143 --- [ main] c.e.s.SimpleprojectApplication : Started SimpleprojectApplication in 3.409 seconds (process running for 7.566)
Подробнее здесь: https://stackoverflow.com/questions/750 ... ot-working
Почему мое Java-расширение OpenTelemetry не работает ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1736274835
Anonymous
Я создал расширение для добавления комментариев в запрос sql. Для этого я создал класс MySQLAddCommentInstrumentation.java для внесения изменений в запрос в классе Statement.java.
Также есть один класс MySQLAddCommentInstrumentationModule.java, который добавляет этот инструментарий (MySQLAddCommentInstrumentation) в его список.
Когда я создаю это расширение и запускаю свое приложение, я не вижу комментарий в запросе под журналом zipkin db.statement.
Класс инструментирования — MySQLAddCommentInstrumentation.java
Путь — example/extension/src/main/java/com/example/javaagent/mysqlinstrumentation/MySQLAddCommentInstrumentation.java
package com.example.javaagent.mysqlinstrumentation;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
import net.bytebuddy.matcher.ElementMatchers;
public class MySQLAddCommentInstrumentation implements TypeInstrumentation {
@Override
public ElementMatcher typeMatcher() {
System.out.println("Inside MYSQL- 1.1");
return implementsInterface(named("java.sql.Statement"));
}
public void transform(TypeTransformer transformer) {
System.out.println("Inside MYSQL- 1.2");
transformer.applyAdviceToMethod(
namedOneOf("executeQuery")
.and(ElementMatchers.takesArgument(0, String.class))
.and(ElementMatchers.isPublic()),
MySQLAddCommentInstrumentation.class.getName() + "$StatementAddCommentAdvice");
System.out.println("Inside MYSQL- 1.3");
}
@SuppressWarnings("unused")
public static class StatementAddCommentAdvice {
@Advice.OnMethodEnter(suppress = Throwable.class)
public static void onEnter(@Advice.Argument(value = 0, readOnly = false) String sql) {
System.out.println("Inside MYSQL- 1.4");
sql = sql + " -- some comment";
System.out.println("Inside MYSQL- 1.5");
}
}
InstrumentationModule - MySQLAddCommentInstrumentationModule.java
Путь - example/extension/src/main/java/com/example/javaagent/mysqlinstrumentation/MySQLAddCommentInstrumentationModule.java
package com.example.javaagent.mysqlinstrumentation;
import static java.util.Collections.singletonList;
import com.google.auto.service.AutoService;
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers;
import java.util.List;
import net.bytebuddy.matcher.ElementMatcher;
@AutoService(InstrumentationModule.class)
public final class MySQLAddCommentInstrumentationModule extends InstrumentationModule {
public MySQLAddCommentInstrumentationModule() {
super("jdbc");
}
@Override
public int order() {
return 1;
}
@Override
public ElementMatcher.Junction classLoaderMatcher() {
return AgentElementMatchers.hasClassesNamed("java.sql.Statement");
}
@Override
public List typeInstrumentations() {
return singletonList(new MySQLAddCommentInstrumentation());
}
}
Код, в котором ожидается запуск этого инструментария:
try {
Connection con = DriverManager.getConnection(url, uname, password);
Statement statement = con.createStatement();
System.out.println(query);
ResultSet result = statement.executeQuery(query);
System.out.println(query);
} catch (SQLException e) {
e.printStackTrace();
}
Я запустил сборку ./gradlew внутри примеров/расширения и использовал этот jar-файл расширения для запуска своего приложения
java -javaagent:/Users/vaibhavpaharia/Downloads/opentelemetry-javaagent.jar \
-Dotel.javaagent.extensions=/Users/vaibhavpaharia/ok/opentelemetry-java-instrumentation/examples/extension/build/libs/opentelemetry-java-instrumentation-extension-demo-1.0-all.jar \
-Dotel.service.name=simpleapplication \
-Dotel.traces.exporter=zipkin \
-Dserver.port=8080 \
-jar /Users/vaibhavpaharia/Downloads/simpleproject/target/simpleproject-0.0.1-SNAPSHOT.jar
После запуска приложения с агентом и расширением я вижу, что другие расширения, присутствующие в папке примера, работают нормально.
Кроме того, я попытался изменить метод заказа в MySQLAddCommentInstrumentationModule. java и вернул оттуда 0, в этом случае Inside MYSQL- 1.1, Inside MYSQL- 1.2 и Inside MYSQL- 1.3 были напечатаны, так что кажется новое расширение распознается при запуске приложения. Он никогда не печатает Inside MYSQL- 1.4 и Inside MYSQL- 1.5. Также следы перестают поступать на zipkin.
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
[otel.javaagent 2023-01-05 14:50:31:010 +0530] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 1.20.2
Inside MYSQL- 1.1
Inside MYSQL- 1.2
Inside MYSQL- 1.3
[otel.javaagent 2023-01-05 14:50:34:068 +0530] [main] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.JmxMetricInsight - Empty JMX configuration, no metrics will be collected for InstrumentationScope io.opentelemetry.jmx
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.1)
2023-01-05T14:50:35.687+05:30 INFO 85143 --- [ main] c.e.s.SimpleprojectApplication : Starting SimpleprojectApplication v0.0.1-SNAPSHOT using Java 18.0.2 with PID 85143 (/Users/vaibhavpaharia/Downloads/simpleproject/target/simpleproject-0.0.1-SNAPSHOT.jar started by vaibhavpaharia in /Users/vaibhavpaharia)
2023-01-05T14:50:35.700+05:30 INFO 85143 --- [ main] c.e.s.SimpleprojectApplication : No active profile set, falling back to 1 default profile: "default"
2023-01-05T14:50:37.451+05:30 INFO 85143 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-01-05T14:50:37.531+05:30 INFO 85143 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-01-05T14:50:37.531+05:30 INFO 85143 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.4]
2023-01-05T14:50:37.643+05:30 INFO 85143 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-01-05T14:50:37.645+05:30 INFO 85143 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1859 ms
2023-01-05T14:50:38.254+05:30 INFO 85143 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-01-05T14:50:38.266+05:30 INFO 85143 --- [ main] c.e.s.SimpleprojectApplication : Started SimpleprojectApplication in 3.409 seconds (process running for 7.566)
Подробнее здесь: [url]https://stackoverflow.com/questions/75016256/why-is-my-opentelemetry-java-extension-not-working[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия