基于OpenTelemetry实现Play Framework应用gRPC端点指标无代码埋点
问题描述
- 技术栈:基于Play Framework构建的Scala应用,暴露gRPC端点
- 当前配置:
- 已通过
opentelemetry-javaagent实现自动埋点 - OpenTelemetry数据发送至New Relic的OTLP端点
- 已通过
- 问题:能看到基础JVM指标(如
process.runtime.jvm.*),但无gRPC端点的特定遥测数据(请求数、响应时间、错误率等) - 需求:无需修改应用代码,通过OpenTelemetry收集并上报gRPC特定指标到New Relic
解决方案
完全可以通过opentelemetry-javaagent的配置实现,无需修改业务代码,具体步骤如下:
1. 确认opentelemetry-javaagent版本
确保使用的agent版本不低于1.10.0(更早版本对gRPC的支持有限),建议使用最新稳定版——gRPC的自动埋点模块是agent内置的,无需额外依赖。
2. 确保gRPC自动埋点模块启用
opentelemetry-javaagent默认启用gRPC的服务端/客户端埋点,若之前有手动排除过相关模块,需通过环境变量恢复:
OTEL_INSTRUMENTATION_GRPC_ENABLED=true
同时检查是否存在OTEL_INSTRUMENTATION_EXCLUDE_LIST配置,确保没有包含grpc相关条目。
3. 完善OTLP导出配置
确保同时导出追踪数据和指标数据到New Relic,启动应用时传入以下环境变量:
# 指定导出器类型为OTLP OTEL_METRICS_EXPORTER=otlp OTEL_TRACES_EXPORTER=otlp # New Relic的OTLP端点(全球通用) OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp.nr-data.net:4317 # 传入New Relic许可证密钥作为请求头 OTEL_EXPORTER_OTLP_HEADERS="api-key=你的New Relic许可证密钥" # 可选:设置服务名称,方便在New Relic中识别 OTEL_SERVICE_NAME=你的应用服务名
4. 验证埋点生效
启动应用时添加日志级别配置,查看agent是否加载了gRPC模块:
OTEL_LOG_LEVEL=debug
在启动日志中搜索grpc,若看到类似Loaded instrumentation grpc的条目,说明gRPC埋点模块已成功加载。
5. 在New Relic中查看gRPC数据
- 指标:在New Relic查询界面搜索
grpc.server.*前缀的指标,比如grpc.server.requests.total(请求数)、grpc.server.duration(响应时间分布)、grpc.server.errors.total(错误数) - 追踪:在New Relic分布式追踪界面,筛选你的服务,可查看单个gRPC请求的完整调用链
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

