-
Notifications
You must be signed in to change notification settings - Fork 3.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implementation of span2 format #1644
Comments
here's the first work on the java binding and codec #1651 |
There were tests accidentally assuming merge semantics when testing unrelated things. This scrubs some of the tests to focus on what they are testing, and in doing so help pave forward single-host span storage. See #1644
Update: all conversion tests work. I'm going to do a POC on elasticsearch to make sure it works. Once it does, I'll chop up #1651 into several smaller works |
@xeraa quick question. Is there an option besides spark to do a data migration? Ex. I'd like to walk through documents grouped by traceID then write them back modified to a different index. |
@adriancole multiple options:
|
thx for the help @xeraa |
This adds Elasticsearch 6.x support via single-type indexes: * zipkin:span-2017-08-05 - span2 (single endpoint) format * zipkin:dependency-2017-08-05 - dependency links in existing format This indexing model will be available in the next minor release of Zipkin, particularly for Elasticsearch 2.4+. If you aren't running Elasticsearch 2.4+, yet. Please upgrade. Those wishing to experiment with this format before the next minor release can set `ES_EXPERIMENTAL_SPAN2=true` to use this style now. When set, writes will use the above scheme, but both the former and new indexes will be read. Fixes #1676 See #1644 for the new span2 model See #1679 for the dual-read approach, which this is similar to
This accepts the json format from #1499 on current transports. It does so by generalizing format detection from the two Kafka libraries, and a new `SpanDecoder` interface. Types are still internal, but this allows us to proceed with other work in #1644, including implementing reporters in any language. Concretely, you can send a json list of span2 format as a Kafka or Http message. If using http, use the /api/v2/spans endpoint like so: ```bash $ curl -X POST -s localhost:9411/api/v2/spans -H'Content-Type: application/json' -d'[{ "timestamp_millis": 1502101460678, "traceId": "9032b04972e475c5", "id": "9032b04972e475c5", "kind": "SERVER", "name": "get", "timestamp": 1502101460678880, "duration": 612898, "localEndpoint": { "serviceName": "brave-webmvc-example", "ipv4": "192.168.1.113" }, "remoteEndpoint": { "serviceName": "", "ipv4": "127.0.0.1", "port": 60149 }, "tags": { "error": "500 Internal Server Error", "http.path": "/a" } }]' ```
This accepts the json format from #1499 on current transports. It does so by generalizing format detection from the two Kafka libraries, and a new `SpanDecoder` interface. Types are still internal, but this allows us to proceed with other work in #1644, including implementing reporters in any language. Concretely, you can send a json list of span2 format as a Kafka or Http message. If using http, use the /api/v2/spans endpoint like so: ```bash $ curl -X POST -s localhost:9411/api/v2/spans -H'Content-Type: application/json' -d'[{ "timestamp_millis": 1502101460678, "traceId": "9032b04972e475c5", "id": "9032b04972e475c5", "kind": "SERVER", "name": "get", "timestamp": 1502101460678880, "duration": 612898, "localEndpoint": { "serviceName": "brave-webmvc-example", "ipv4": "192.168.1.113" }, "remoteEndpoint": { "serviceName": "", "ipv4": "127.0.0.1", "port": 60149 }, "tags": { "error": "500 Internal Server Error", "http.path": "/a" } }]' ```
This accepts the json format from #1499 on current transports. It does so by generalizing format detection from the two Kafka libraries, and a new `SpanDecoder` interface. Types are still internal, but this allows us to proceed with other work in #1644, including implementing reporters in any language. Concretely, you can send a json list of span2 format as a Kafka or Http message. If using http, use the /api/v2/spans endpoint like so: ```bash $ curl -X POST -s localhost:9411/api/v2/spans -H'Content-Type: application/json' -d'[{ "timestamp_millis": 1502101460678, "traceId": "9032b04972e475c5", "id": "9032b04972e475c5", "kind": "SERVER", "name": "get", "timestamp": 1502101460678880, "duration": 612898, "localEndpoint": { "serviceName": "brave-webmvc-example", "ipv4": "192.168.1.113" }, "remoteEndpoint": { "serviceName": "", "ipv4": "127.0.0.1", "port": 60149 }, "tags": { "error": "500 Internal Server Error", "http.path": "/a" } }]' ```
This accepts the json format from #1499 on current transports. It does so by generalizing format detection from the two Kafka libraries, and a new `SpanDecoder` interface. Types are still internal, but this allows us to proceed with other work in #1644, including implementing reporters in any language. Concretely, you can send a json list of span2 format as a Kafka or Http message. If using http, use the /api/v2/spans endpoint like so: ```bash $ curl -X POST -s localhost:9411/api/v2/spans -H'Content-Type: application/json' -d'[{ "timestamp_millis": 1502101460678, "traceId": "9032b04972e475c5", "id": "9032b04972e475c5", "kind": "SERVER", "name": "get", "timestamp": 1502101460678880, "duration": 612898, "localEndpoint": { "serviceName": "brave-webmvc-example", "ipv4": "192.168.1.113" }, "remoteEndpoint": { "serviceName": "", "ipv4": "127.0.0.1", "port": 60149 }, "tags": { "error": "500 Internal Server Error", "http.path": "/a" } }]' ```
#1700 makes the write api span2 native. I'll make a later pull request for the read side. Notably, I'm not going to carry over the merging/clock skew adjustment logic currently copy-pasted into every impl. This simplifies the storage contract which is raw by default now. The merging/clock-skew can be done in an api decorator and/or javascript. |
#1705 hones the way we'll address callbacks (ex span consumption) and synchronous calls (ex span name lists). This will reduce the effort in implementing v2 interfaces |
draft of the v2 java read api #1709 |
#1726 << finishes the v2 model (and codec ops required). This doesn't make a v2 "storage component" type, yet, as this can be done later |
#1729 << adds the v2 storage component |
openzipkin/zipkin-api#47 starts on the proto3 encoding |
think we're all done |
) This accepts the json format from openzipkin#1499 on current transports. It does so by generalizing format detection from the two Kafka libraries, and a new `SpanDecoder` interface. Types are still internal, but this allows us to proceed with other work in openzipkin#1644, including implementing reporters in any language. Concretely, you can send a json list of span2 format as a Kafka or Http message. If using http, use the /api/v2/spans endpoint like so: ```bash $ curl -X POST -s localhost:9411/api/v2/spans -H'Content-Type: application/json' -d'[{ "timestamp_millis": 1502101460678, "traceId": "9032b04972e475c5", "id": "9032b04972e475c5", "kind": "SERVER", "name": "get", "timestamp": 1502101460678880, "duration": 612898, "localEndpoint": { "serviceName": "brave-webmvc-example", "ipv4": "192.168.1.113" }, "remoteEndpoint": { "serviceName": "", "ipv4": "127.0.0.1", "port": 60149 }, "tags": { "error": "500 Internal Server Error", "http.path": "/a" } }]' ```
This is the implementation of #1499 Not all steps are sequential
Overview
This work supports a new data type which represents a single-host view of an operation. It will be represented in json w/ optional proto3 mapping.
Full description is in #1499, but the format is below:
Implementation overview
As we are working in the brown field, various phases can work at their own pace. Tracer libraries should be able to opt-into this without a breaking change to user apis. Any storage or transport work should anticipate mixed formats, but allow the ability to strictly accept the new one. The UI is completely decoupled from this, as all read apis still use the old format. We may revisit such later.
Basic library support
Since the server code is written in java, a first step could be to write the java library
Upload Api Definition
While new servers can detect based on content, we should make it possible for new sites to strictly use the new type.
application/vnd.zipkin.span2s+json
Accepts Zipkin v2 Span format in all current transports #1684Storage integration
Once the type + codec library is in, we can start using it on the backend even if the incoming data is in the old format.
Transport integration
Once the type + codec library is in, we can start using it for transport even if the storage layer uses the old model.
Dependency linking integration
The Span2 type is a better fit for dependency links and can replace the internal type currently used.
The text was updated successfully, but these errors were encountered: