Here are the list of changes we made in this pull request. Top 3 are the principle changes, others are following these principles. 1. New agent and mesh report protocol. 2. New agent header protocol. 3. Service register, instance register and network address register have been removed permanently. 4. Service traffic, instance traffic and network alias metrics are added to replace the service, instance and network address inventory. 5. Register process has been removed. 6. Metrics stream process supports insert only mode, especially for traffic entities. 7. Metrics stream process supports no-downsampling mode for traffic entities and network alias. 8. Remove all register mechanism and cache in the java agent. 9. Remove MONTH step in GraphQL query. 10. Update UI to remove MONTH step query, the max query range is 60 days now. 11. Simplify the TTL to metrics and record. And the unit has been formatted in Day unit. No specific TTL for ElasticSearch storage. 12. Buffer mechanism of trace receiver and mesh receiver has been removed due to no register. 13. New service id, instance id and endpoint id rules, including service relation, instance relation and endpoint relation id rules. 14. Java agent support `keep tracing` mode, meaning, agent generating tracing context even the backend is unconnected/unavailable. 15. Plugin test tool up to date, in order to support new protocol. 16. Plugin tests expected data files updated. 17. E2E tests updated. 18. Telemetry of Grafana config has been merged into one. 19. Documentation updates. 20. [TBD] InfluxDB storage implementation is not available, need @dmsolr to fix later, in order to reduce the master change block by this PR. |
||
|---|---|---|
| .. | ||
| HTTP-API-Protocol.md | ||
| JVM-Protocol.md | ||
| README.md | ||
| Skywalking-Cross-Process-Correlation-Headers-Protocol-v1.md | ||
| Skywalking-Cross-Process-Propagation-Headers-Protocol-v3.md | ||
| Trace-Data-Protocol-v3.md | ||
| query-protocol.md | ||
README.md
Protocols
There are two types of protocols list here.
-
Probe Protocol. Include the descriptions and definitions about how agent send collected metrics data and traces, also the formats of each entities.
-
Query Protocol. The backend provide query capability to SkyWalking own UI and others. These queries are based on GraphQL.
Probe Protocols
They also related to the probe group, for understand that, look Concepts and Designs document. These groups are Language based native agent protocol, Service Mesh protocol and 3rd-party instrument protocol.
Register Protocol
Register protocol is shared in Language based native agent protocol[Required] and Service Mesh probe protocol[Optional].
Service, Service Instance, Network address and Endpoint could do register to get an unique integer ID to replace the literal string name and attributes. The probe could use IDs to reduce the cost of memory and network bandwidth. Service and Instance register are required in the language agent. All other cases, register are optional.
Language based native agent protocol
There is two types of protocols to make language agents work in distributed environments.
- Cross Process Propagation Headers Protocol and Cross Process Correlation Headers Protocol are in wire data format, agent/SDK usually uses HTTP/MQ/HTTP2 headers to carry the data with rpc request. The remote agent will receive this in the request handler, and bind the context with this specific request.
- Trace Data Protocol is out of wire data, agent/SDK uses this to send traces and metrics to skywalking or other compatible backend.
Cross Process Propagation Headers Protocol v3 is the new protocol for in-wire context propagation, started in 8.0.0 release.
Cross Process Correlation Headers Protocol v1 is a new in-wire context propagation additional and optional protocols.
Please read SkyWalking language agents documentations to see whether it is supported.
This protocol defines the data format of transporting custom data with Cross Process Propagation Headers Protocol.
SkyWalking javaagent begins to support this since 8.0.0.
SkyWalking Trace Data Protocol v3 defines the communication way and format between agent and backend.
Service Mesh probe protocol
The probe in sidecar or proxy could use this protocol to send data to backendEnd. This service provided by gRPC, requires the following key info:
- Service Name or ID at both sides.
- Service Instance Name or ID at both sides.
- Endpoint. URI in HTTP, service method full signature in gRPC.
- Latency. In milliseconds.
- Response code in HTTP
- Status. Success or fail.
- Protocol. HTTP, gRPC
- DetectPoint. In Service Mesh sidecar,
clientorserver. In normal L7 proxy, value isproxy.
3rd-party instrument protocol
3rd-party instrument protocols are not defined by SkyWalking. They are just protocols/formats, which SkyWalking is compatible and could receive from their existed libraries. SkyWalking starts with supporting Zipkin v1, v2 data formats.
Backend is based on modularization principle, so very easy to extend a new receiver to support new protocol/format.
Query Protocol
Query protocol follows GraphQL grammar, provides data query capabilities, which depends on your analysis metrics. Read query protocol doc for more details.