OpenTelemetry 是工具、API 和 SDK 的集合。使用它来检测、生成、收集和导出遥测数据(指标、日志和跟踪),以帮助您分析软件的性能和行为。本文将介绍如何使用 OpenTelemetry 上报 Java 应用数据。
步骤一:获取接入点和 Token
进入 应用性能监控控制台 应用监控 > 应用列表页面,单击接入应用,在接入应用时选择 Java 语言与 OpenTelemetry 的数据采集方式。
在选择接入方式步骤获取您的接入点和 Token,如下图所示:
上报方式说明
内网上报:使用此上报方式,您的服务需运行在腾讯云 VPC 。通过 VPC 直接联通,在避免外网通信的安全风险同时,可以节省上报流量开销。
外网上报:当您的服务部署在本地或非腾讯云 VPC 内,可以通过此方式上报数据。请注意外网通信存在安全风险,同时也会造成一定上报流量费用。
OpenTelemetry Java SDK 是 OpenTelemetry Java Agent 实现的基础,提供了丰富的自定义能力。当 OpenTelemetry Java Agent 的埋点不满足您的场景或者需要增加一些自定义业务埋点时,可以使用以下方式接入。
步骤二:下载 opentelemetry-javaagent.jar
步骤三:修改上报参数
修改 Java 启动的 JVM 参数上报链路数据。
-javaagent:/path/to/opentelemetry-javaagent.jar //请将路径修改为您文件下载的实际地址。-Dotel.resource.attributes=service.name=<appName>,token=<token>-Dotel.exporter.otlp.endpoint=<接入点>
说明
如果您选择使用 OpenTelemetry Collector 转发,则需删除 -Dotel.exporter.otlp.headers=Authentication=<token> 并修改<接入点>为您本地部署的服务地址。
步骤四:引入 Maven POM 依赖
<dependencies><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-api</artifactId></dependency><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-sdk-trace</artifactId></dependency><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-exporter-otlp</artifactId></dependency><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-sdk</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-bom</artifactId><version>1.9.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
步骤五:获取 OpenTelemetry Trace
SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder().addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder().setEndpoint("<接入点>").addHeader("Authentication", "<token>").build()).build()).build();OpenTelemetry openTelemetry = OpenTelemetrySdk.builder().setTracerProvider(sdkTracerProvider).setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance())).buildAndRegisterGlobal();Tracer tracer = openTelemetry.getTracer("instrumentation-library-name", "1.0.0");