skywalking-java/docs/cn/Trace-Data-Protocol-CN.md

102 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Trace Data Protocol 中文
Trace Data Protocol协议也就是探针与Collector间通讯协议
## 概述
此协议包含了Agent上行/下行数据的格式,可用于定制开发,或者探针的多语言扩展
### 协议版本
v1.1
### 协议类型
* 服务发现使用http服务
* 注册和数据上行服务同时支持gRPC和HTTP服务
#### gRPC协议定义文件
[gRPC proto files](../../apm-protocol/apm-network/src/main/proto)
## Collector服务发现协议
### 简介
**Collector服务发现协议是探针启动时第一个调用的服务。** 通过服务查找可用的gRPC服务地址列表并在由客户端选择其中任意一个作为服务端。
此服务建议周期性调用,确保探针本地的服务端口列表是准确有效的。
### 协议类型
HTTP GET
### 协议内容
- 请求
GET操作http://collectorIp:port/agent/grpc 。 其中`/agent/grpc`是默认值如需修改需要参考collector相关配置。
- 返回
JSON数组数组的每个元素为一个有效的gRPC服务地址。
```json
["ip address1:port1","ip address2:port2","ip address3:port3"]
```
## 应用注册服务
### 简介
应用注册服务是将applicationCode以及ip:port构成的服务地址转换成数字ID的服务。
此服务会在后续的传输过程中,有效降低网络带宽需求。
### 协议内容
[gRPC service define](../..apm-protocol/apm-network/src/main/proto/ApplicationRegisterService.proto)
- 首次调用时applicationCode为客户端设置的应用名显示在拓扑图和应用列表上的名字。之后随着追踪过程会上报此应用相关的周边服务的`ip:port`地址列表
- KeyWithIntegerValue 返回key为上报的applicationCode或ip:port地址value为对应的id。applicationCode对应的返回id,在后续协议中被称为applicationId。
- 此服务按需调用本地无法找到ip:port对应的id时可异步发起调用。
- 获取applicationId的操作是必选。后续追踪数据依赖此id
- 获取ip:port对应的id是可选使用id会有效提高collector处理效率降低网络消耗。
## 应用实例发现服务
### 简介
应用实例发现服务存在三个子服务,分别是实例注册服务,实例心跳服务,实例注册重连服务。这三个服务负责获取和保持应用实例在线的功能。
### 协议类型
gRPC服务
### 实例注册服务
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/DiscoveryService.proto#L11-L12)
- agentUUID 由探针生成需保持唯一性推荐使用UUID算法。并在应用重启前保持不变
- applicationId 由**应用注册服务**获取。
- 服务端返回应用实例idapplicationInstanceId 。后续上报服务使用实例id标识。
### 实例心跳服务
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/DiscoveryService.proto#L14-L15)
- 心跳服务每分钟上报一次。
- 如果一分钟内有segment数据上报则可不必上报心跳。
## 服务名注册发现服务
### 简介
服务名注册发现服务是将应用内的服务名operationName替换为id的服务。
### 协议内容
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/DiscoveryService.proto#L53-L74)
- 可选服务可有效降低网络消耗推荐实现。注意由于部分应用存在URI中夹带参数的情况请注意限制探针内的缓存容量防止内存溢出。
- ServiceNameElement中applicationId为当前applicationCode对应的id。serviceName一般为对应span的operationName
## JVM指标上报服务
### 简介
上报当前实例的JVM信息每秒上报一次。
### 协议内容
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/JVMMetricsService.proto)
## TraceSegment上报服务
### 简介
上报调用链信息
### 协议内容
[gRPC service define](../../apm-protocol/apm-network/src/main/proto/TraceSegmentService.proto)
- UniqueId为segment或者globalTraceId的数字表示。由3个long组成1applicationInstanceId2当前线程id3当前时间戳*10000 + seq(0-10000自循环)
- Span的数据请参考[插件开发规范](Plugin-Development-Guide-CN.md)
- 以下id和名称根据注册返回结果优先上报id无法获取id时再上传name。参考之前的应用和服务注册章节。
- operationNameId/operationName
- networkAddress/networkAddressId
- entryServiceName/entryServiceId
- parentServiceName/parentServiceId
- peerId/peer
- componentId为默认支持的插件id非官方支持需传输名称或修改服务端源代码。[官方组件列表](../../apm-protocol/apm-network/src/main/java/org/apache/skywalking/apm/network/trace/component/ComponentsDefine.java)