Quarkus微服务监控:New Relic Java Agent与OpenTelemetry选型咨询
关于Quarkus应用在New Relic上的监控方案选择:OpenTelemetry vs Java Agent
1. 如何通过OpenTelemetry获取JVM指标
完全可以通过Quarkus的OpenTelemetry扩展采集JVM指标,只需简单配置:
- 添加Quarkus OpenTelemetry Metrics依赖(Maven示例):
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-opentelemetry-metrics</artifactId> </dependency> - 在
application.properties中开启JVM指标采集:quarkus.opentelemetry.metrics.jvm.enabled=true quarkus.opentelemetry.metrics.jvm.gc.enabled=true quarkus.opentelemetry.metrics.jvm.memory.enabled=true quarkus.opentelemetry.metrics.jvm.thread.enabled=true - 确保OpenTelemetry导出配置指向New Relic:
quarkus.opentelemetry.exporter.otlp.endpoint=https://otlp.nr-data.net:4317 quarkus.opentelemetry.exporter.otlp.headers=api-key=<你的New Relic许可证密钥>
配置完成后,JVM的GC、内存、线程等指标会通过OTel自动导出到New Relic。关于SLO创建:导出到New Relic的OTel指标可直接在平台上用于创建SLO,你可以检查是否是指标筛选或配置问题导致无法操作。
2. 迁移至New Relic Java Agent是否可行
完全可行,Quarkus应用对New Relic Java Agent有良好支持,迁移步骤如下:
- 移除项目中Quarkus OpenTelemetry相关依赖(若无需共存)。
- 在Kubernetes的Pod配置中添加Agent启动参数:
在容器环境变量或启动命令中设置:
注意:需将New Relic Agent的jar包挂载到Pod中,或使用预包含Agent的基础镜像。JAVA_OPTS="-javaagent:/path/to/newrelic.jar -Dnewrelic.config.license_key=<你的许可证密钥> -Dnewrelic.config.app_name=<你的应用名称>" - 若为Quarkus原生镜像部署,New Relic提供了对应的适配方案,无需额外复杂改造。
迁移后,Agent会自动采集JVM指标、Kafka链路追踪、数据库调用等数据,无需修改业务代码。
3. 方案选择建议
优先选New Relic OpenTelemetry的场景
- 希望保持监控方案标准化,未来可能切换到其他OTel兼容平台。
- 已基于OTel搭建统一可观测性链路(如其他服务也采用OTel)。
- 不需要New Relic专属高级功能(如特定代码级性能分析、定制化仪表板模板等)。
- 偏好轻量集成,不愿引入字节码增强类Agent。
优先选New Relic Java Agent的场景
- 需要使用New Relic专属功能(即你提到的OTel不支持的功能)。
- 追求开箱即用的全链路监控,不想手动配置JVM、数据库等指标。
- 希望直接通过New Relic服务快速创建SLO(Agent数据源更贴合平台SLO模板)。
- 应用以Quarkus JVM模式运行,原生镜像适配成本可忽略。
折中方案
若需兼顾OTel标准化和New Relic专属功能,可两者共存:保留Quarkus OTel的分布式追踪配置,同时启用Java Agent采集JVM及专属指标,注意关闭Agent的分布式追踪功能以避免数据重复。
内容的提问来源于stack exchange,提问作者APK
相关产品推荐
相关产品推荐

