【发布时间】:2021-10-19 08:24:58
【问题描述】:
我正在尝试使用 OpenTelemetry 收集数据源指标。根据the OpenTelemetry documentation,必须将DataSource 实例包装到OpenTelemetryDataSource 数据源中,如下所示:
new OpenTelemetryDataSource(dataSource);
我浏览了the Quarkus documentation,但没有找到以编程方式覆盖数据源的方法。
如何在 Quarkus 中以编程方式覆盖数据源?或者一般我如何将 OpenTelemetry 连接到 Quarkus 中的数据源?
更新:
当我使用配置属性 (quarkus.datasource.jdbc.url=jdbc:otel:postgresql://localhost:5432/my_db) 设置 JDBC URL 时,应用程序在启动时出现 NPE 失败:
ERROR: Failed to start application (with profile dev)
java.lang.NullPointerException
at io.quarkus.opentelemetry.runtime.QuarkusContextStorage.getVertxContext(QuarkusContextStorage.java:62)
at io.quarkus.opentelemetry.runtime.QuarkusContextStorage.current(QuarkusContextStorage.java:54)
at io.opentelemetry.context.Context.current(Context.java:86)
at io.opentelemetry.instrumentation.jdbc.internal.OpenTelemetryStatement.wrapCall(OpenTelemetryStatement.java:277)
at io.opentelemetry.instrumentation.jdbc.internal.OpenTelemetryPreparedStatement.executeQuery(OpenTelemetryPreparedStatement.java:53)
at io.agroal.pool.wrapper.PreparedStatementWrapper.executeQuery(PreparedStatementWrapper.java:78)
at org.flywaydb.core.internal.database.base.BaseDatabaseType.getSelectVersionOutput(BaseDatabaseType.java:195)
at org.flywaydb.core.internal.database.cockroachdb.CockroachDBDatabaseType.handlesDatabaseProductNameAndVersion(CockroachDBDatabaseType.java:81)
at org.flywaydb.core.internal.database.DatabaseTypeRegister.getDatabaseTypeForConnection(DatabaseTypeRegister.java:136)
at org.flywaydb.core.internal.jdbc.JdbcConnectionFactory.<init>(JdbcConnectionFactory.java:69)
at org.flywaydb.core.Flyway.execute(Flyway.java:510)
at org.flywaydb.core.Flyway.migrate(Flyway.java:170)
at io.quarkus.flyway.runtime.FlywayRecorder.doStartActions(FlywayRecorder.java:75)
at io.quarkus.deployment.steps.FlywayProcessor$createBeansAndStartActions-1520831253.deploy_0(FlywayProcessor$createBeansAndStartActions-1520831253.zig:84)
at io.quarkus.deployment.steps.FlywayProcessor$createBeansAndStartActions-1520831253.deploy(FlywayProcessor$createBeansAndStartActions-1520831253.zig:40)
at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:754)
at io.quarkus.runtime.Application.start(Application.java:101)
at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:101)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:66)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:42)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:119)
at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:29)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:98)
at java.base/java.lang.Thread.run(Thread.java:829)
【问题讨论】:
-
您要使用什么数据源?文档为什么不适合您?
-
@AndersLindgren 我正在尝试将 quarkus 提供的数据源变形为
OpenTelemetryDataSource。我没有找到如何在 Quarkus 中实现这一点。如果我遗漏了什么,请您指出。 -
您链接到的 opentelemetry 站点上的文档似乎没问题。我不是 quarkus 或 opentelemetry 方面的专家,但你看过quarkus.io/guides/opentelemetry
-
@AndersLindgren 谢谢。 Opentelemetry 已经连接到应用程序,只是它不包括 JDBC 连接(需要额外配置)。
标签: java jdbc datasource quarkus open-telemetry