Java应用在不同场景下有不同的接入方式,本文介绍不同场景下Java应用的详细接入操作,接入后可以实现自动收集Trace信息、自动生成Metric指标、以及调用链检索、日志检索等功能。
OpenTelemetry是CNCF的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方vendor无关的服务。
如果您的应用已经接入了OpenTelemetry的SDK,APMPlus服务端可以接收OpenTelemetry上报的数据。接入APMPlus后,您将获得RED指标生成能力、Trace多维检索、单链路检索、拓扑生成等多项能力。
说明
如果您需要隔离生产和测试数据,请参见将生产和测试数据隔离。
可观测数据直接上报至 ApmPlus 服务端,支持用户通过 grpc、http/protobuf 等方式进行数据上报。
APMPlusOpenTelemetryCollector是APMPlus基于OpenTelemetryCollector二次开发的数据采集器。您可以在集群中安装 Opentelemetry Collector 做数据转发,有两种安装方式:
采用社区提供的 Opentelemetry Java SDK 手动埋点的方式上报数据,可以参考社区提供的java demo,完成java项目构建后,在启动命令指定数据上报后端以及鉴权等参数:
如果指定数据直接上报至 ApmPlus 后端:
java -jar myapp.jar \ -Dotel.exporter.otlp.endpoint=<Apmplus_endpoint> \ -Dotel.service.name=myapp \ -Dotel.exporter.otlp.protocol=<protocal> \ -Dotel.exporter.otlp.headers=X-ByteAPM-AppKey=<app_key>
如果指定数据上报至 Collector,则无需指定 otel.exporter.otlp.headers
java -jar myapp.jar \ -Dotel.exporter.otlp.endpoint=<collector_endpoint> \ -Dotel.service.name=myapp \ -Dotel.exporter.otlp.protocol=<protocal>
说明
<service_name> 填写应用服务名称
<app_key> 填写服务接入控制台提供的app_key
Opentelemetry javaagent 基于JVM字节码增强技术,实现各类流行的Java框架的otel数据的采集和自动上报。具体使用方式有两种:
手动下载Javaagent
服务接入页面提供了最新版本的Javaagent的下载方式,启动应用程序时修改启动命令完成Javaagent的注入:
如果指定数据直接上报至 ApmPlus 后端:
java -jar myapp.jar \ -Dotel.exporter.otlp.endpoint=<Apmplus_endpoint> \ -Dotel.service.name=myapp \ -Dotel.exporter.otlp.protocol=<protocal> \ -Dotel.exporter.otlp.headers=X-ByteAPM-AppKey=<app_key>
如果指定数据上报至 Collector,则无需指定 otel.exporter.otlp.headers
java -jar myapp.jar \ -Dotel.exporter.otlp.endpoint=<collector_endpoint> \ -Dotel.service.name=myapp \ -Dotel.exporter.otlp.protocol=<protocal>
通过 Opentelemetry Operator 自动注入
在 k8s 的场景下,提供了基于Operator实现对业务 POD 自动注入Javaagent至容器,您需要事先在集群组件中心完成组件 apmplus-opentelemetry-collector 的部署。
完成部署后,修改业务的workload(当前支持 deployment 和 statefulset)增加**instrumentation.apmplus.volcengine.com/inject-java
**注解,示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: simple-java labels: app: simple-java spec: replicas: 1 selector: matchLabels: app: simple-java template: metadata: labels: app: simple-java annotations: instrumentation.apmplus.volcengine.com/inject-java: 'true' spec: containers: - name: simple-java image: java_demo_simple imagePullPolicy: Always env: - name: CONTAINER_RUNTIME value: "k8s"
修改完成后,重启业务 POD。
Jaeger是一款由Uber研发的开源分布式链路追踪系统。
对于已经集成Jaeger的已有系统,可以将jaeger的Trace数据上报到APMPlus,完成整体的全链路监控能力。
接入APMPlus后,您将获得RED指标生成能力、Trace多维检索、单链路检索、拓扑生成等多项能力。
SDK将数据上报到Agent,Agent将数据上报到APMPlus服务端。
修改jaeger-agent启动参数,配置如下:
./jaeger-agent --reporter.grpc.host-port=apmplus-{region}.ivolces.com:4317 \ --reporter.grpc.tls.enabled=false \ --agent.tags=app_key={appkey}
说明
完整配置命令请到接入中心查看,详情请参见如何使用接入中心?。
SDK采集数据,直接上报到APMPlus服务端。
配置reporter。示例代码如下所示:
io.jaegertracing.Configuration.SenderConfiguration sender = new io.jaegertracing.Configuration.SenderConfiguration(); sender.withEndpoint("http://apmplus-{region}.ivolces.com/server_collect/third_party/jaeger/v2/{appkey}/api/trace")
说明
完整配置命令请到接入中心查看,详情请参见如何使用接入中心?。
Zipkin是一款由Twitter开源的分布式链路追踪系统,通过Zipkin可以帮助您收集Trace数据。
对于已经集成Zipkin的系统,可以将已有的Trace数据上报到APMPlus,完成整体的全链路监控能力。
接入APMPlus后,您将获得RED指标生成能力、Trace多维检索、单链路检索、拓扑生成等多项APMPlus能力。
SDK采集数据,直接上报到APMPlus服务端。
获取zipkin上报点。
http://apmplus-{region}.ivolces.com/server_collect/third_party/zipkin/v2/{appkey}/api/v2/spans
说明
完整配置命令请到接入中心查看,详情请参见如何使用接入中心?。
接入服务并配置上报点。具体请参见zipkin示例代码。
SkyWalking Agent采集数据,直接上报到APMPlus服务端。当前支持SkyWalking Trace、Meter、Log、JVM、CLR数据接入。
配置应用,开启数据上报。
java -javaagent:path/to/skywalking-agent.jar -Dskywalking.collector.backend_service=apmplus-{region}.ivolces.com:4317 -Dskywalking.agent.authentication={appkey} -Dskywalking.agent.service_name={YOUR_SERVICE_NAME} -jar YOUR_SERVICE.jar
重新启动应用。
验证数据上报。