45 lines
2.3 KiB
Markdown
45 lines
2.3 KiB
Markdown
# Trace Data Protocol v3
|
|
Trace Data Protocol describes the data format between SkyWalking agent/sniffer and backend.
|
|
|
|
## Overview
|
|
Trace data protocol is defined and provided in [gRPC format](https://github.com/apache/skywalking-data-collect-protocol),
|
|
also implemented in [HTTP 1.1](HTTP-API-Protocol.md)
|
|
|
|
### Report service instance status
|
|
1. Service Instance Properties
|
|
Service instance has more information than a name, once the agent wants to report this, use `ManagementService#reportInstanceProperties` service
|
|
providing a string-key/string-value pair list as the parameter. `language` of target instance is expected at least.
|
|
|
|
2. Service Ping
|
|
Service instance should keep alive with the backend. The agent should set a scheduler using `ManagementService#keepAlive` service in every minute.
|
|
|
|
### Send trace and metrics
|
|
After you have service id and service instance id, you could send traces and metrics. Now we
|
|
have
|
|
1. `TraceSegmentReportService#collect` for skywalking native trace format
|
|
1. `JVMMetricReportService#collect` for skywalking native jvm format
|
|
|
|
For trace format, there are some notices
|
|
1. Segment is a concept in SkyWalking, it should include all span for per request in a single OS process, usually single thread based on language.
|
|
2. Span has 3 different groups.
|
|
|
|
* EntrySpan
|
|
EntrySpan represents a service provider, also the endpoint of server side. As an APM system, we are targeting the
|
|
application servers. So almost all the services and MQ-consumer are EntrySpan(s).
|
|
|
|
* LocalSpan
|
|
LocalSpan represents a normal Java method, which don't relate with remote service, neither a MQ producer/consumer
|
|
nor a service(e.g. HTTP service) provider/consumer.
|
|
|
|
* ExitSpan
|
|
ExitSpan represents a client of service or MQ-producer, as named as `LeafSpan` at early age of SkyWalking.
|
|
e.g. accessing DB by JDBC, reading Redis/Memcached are cataloged an ExitSpan.
|
|
|
|
3. Span across thread or process parent info is called Reference. Reference carries trace id,
|
|
segment id, span id, service name, service instance name, endpoint name and target address used at client side(not required in across thread)
|
|
of this request in the parent.
|
|
Follow [Cross Process Propagation Headers Protocol v3](Skywalking-Cross-Process-Propagation-Headers-Protocol-v3.md) to get more details.
|
|
|
|
4. `Span#skipAnalysis` could be TRUE, if this span doesn't require backend analysis.
|
|
|