This is a potential tracer interop chance, provided by Google( @bogdandrutu ), Zipkin ( @adriancole ). It provided a new way to be portable across backends, don't like OpenTracing to provide an APIs layer, but have not to tell what are really happening.
The two major things make the portable possible.
So we always want to do some interop works with other tracers, now, we have two choices:
After all, this is only a discussion proposal (TBD), feel free to discuss.
Hi @apache/skywalking-committers , since OpenCensus supports Zipkin data format, I am working on the transformation in this repo: https://github.com/OpenSkywalking/zipkin-skywalking , by taking helps from @adriancole .
Welcome to join us.
I am interested in this feature am I'm glad to help to complete if I can.Does it mean when a user use zipkin in their library.the can also choose to send their trace data to skywaking by use zipkin-skywalking libraray?
If so ,maybe we can also provide jaeger-skywalking library, haha ,they are so similar and I used to build our tracing system by jaeger.
yes, for zipkin, I and @adriancole finished the document, https://github.com/OpenSkywalking/zipkin-skywalking
I am glad to work with you about both of these two.
We should start our discussions about the process flow and architecture. Could provide a draft? Then I and @peng-yongsheng could join you.
And for zipkin and jaeger, I prefer zipkin first. They have more end users and better community support.
One thing need to correct, library is not enough. We will need a cluster to support that, if ypu compare SkyWalking and zipkin format, the major and most important different is about ref in across thread scenario. You need buffer and match spans in zipkin, that definitely requires server side process. This clustet should be between zipkin lib and SkyWalking collector.
I'm planning to do this during beta2 release, welcome, discuss how to generate reference node in entry span first. The key question: the reference information are from caller trace, so callee trace must waiting caller trace, but we don't know how long should it take. In most cases, it should be take several seconds, but in extreme cases, it should be take a lot of times.
For achieve high performance, the callee trace should put into memory db such as redis, but if so many caller traces not received for a long times, the memory db will be leaked. Perhaps Mongo DB or ElasticSearch is suitable.
Perhaps Mongo DB or ElasticSearch is suitable
I have a proposal that, use redis with traceid as key, and an expired time(lets say 2 min), the value should a redis queue, push all spans into. Then the bridge could trigger the pull by receiving the entry span.
Although this may be not the best way, need more suggestions. Building trace segment is the most important part, which zipkin didn't have.
@adriancole I think we need some sample data about zipkin, which represents a RPC call like grpc or dubbo, and a MQ trace(maybe a batch process trace, too, if exist in zipkin.)
wow, it seems that it's more complex than i first thought, cross-thread scenario is missing in my thought.I'm trying to understand zipkin tracing desgin deeply.
If huge callee traces received without caller traces in 2 minutes, memory db will leak. So expired time setting js not enough
@candyleer Yes, that is the complex part.
@peng-yongsheng Agree, but as a new part of our ecosystem, if cache implementor is plugable, that willbe good enough for first release.
@candyleer cross-thread scenario is not so important, as a manual instrument, it could deal with it bettet than SkyWalking. Across processes in RPC and MQ are the real difficult parts.
OK,just do it.
@candyleer @peng-yongsheng Also I am considering whether we should use collector core for implementing modulization, module dependency, startup sequence, etc.. What do you think?
Agree, which repository did we choose? apache/skywalking or openskywalking?
Who would like to start the basic codes framework? @peng-yongsheng or @candyleer ? It is your decision. I am OK with either, they all will be treated as an important part of SkyWalking ecosystem.
@liuhaoyang shows me his interests too. Also @candyleer mentioned jaeger. Maybe we could consider to support it , at least in theory, or do them both by two of you.
I will wait you two finish your suggestions.
And exciting about pushing this to implement.
I have limited time and a large ecosystem to help, so will only be working
on zipkin side of things. I think jaeger have a large staff so don't need
volunteer help as much.
For Jaeger, @yurishkuro @pavolloffay @jpkrohling . Do any of you, or Jaeger team member/contributor have time to help to build this integration, or provide us some sample data of trace/span, which represents a RPC call like grpc or dubbo, and a MQ trace(maybe a batch process trace, too.
@wu-sheng This is a adapter, not too complex. If @candyleer and @liuhaoyang are interest of this. 2 contributors are enough. I think I could be a supporter for help them to integrate with collector. So, let's discuss the process flow. Who can show the example trace of ZipKin or Jaeger? RPC first.
@adriancole goes to Euro for the next tracing work shop. I assume he is busy, maybe we need to find these data.
Here you can find the zipkin API documentation. I am up to give a hand.
>
José Carlos
@wu-sheng sorry, I am not sure I understand the objective here. Can you outline the architecture of this integration test?
@yurishkuro This proposal is about provding a transform server, which transfers data from jaeger SDKs, to SkyWalking collector. Because our community has someone is using zipkin or jaeger instrument sdk, but require SkyWalking backend and visualization.
This is the current data model https://github.com/jaegertracing/jaeger-idl/blob/master/thrift/jaeger.thrift
@candyleer Are you working on this? If so, could you provide some sample data from Zipkin(or Jaeger if you want to do that), I and @peng-yongsheng could provide you some suggestion about how to implement this feature.
@wu-sheng yes, I am pending to start.maybe tonight I can provide some sample data
Great to know, I suggest two types of sample data.
These two type could help me to work with you.
this app is 2 stage but has both patterns
https://github.com/openzipkin/sleuth-webmvc-example
On Thu, 3 May 2018, 05:11 吴晟 Wu Sheng, notifications@github.com wrote:
Great to know, I suggest two types of sample data.
- A -(http)->B-(http)->C
- A -(http)->B-(mq)->C
These two type could help me to work with you.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/apache/incubator-skywalking/issues/665#issuecomment-386181340,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAD613Qx_Rsm4KrNTT91Z9KeP2iqWQEpks5tunV4gaJpZM4Q_Ayz
.
for Zipkin,this case A(http)->B(http)->C(http) sample span data:
{
"traceId": "152057c40ecb8c68",
"id": "152057c40ecb8c68",
"kind": "SERVER",
"name": "get /",
"timestamp": 1525402389314992,
"duration": 597915,
"localEndpoint": {
"serviceName": "test_7070",
"ipv4": "10.12.194.200"
},
"remoteEndpoint": {
"ipv4": "127.0.0.1",
"port": 54221
},
"tags": {
"http.method": "GET",
"http.path": "/",
"mvc.controller.class": "Frontend",
"mvc.controller.method": "callBackend"
}
}
{
"traceId": "152057c40ecb8c68",
"parentId": "152057c40ecb8c68",
"id": "5225a2741bfda4d2",
"kind": "SERVER",
"name": "get /api",
"timestamp": 1525402389445178,
"duration": 386003,
"localEndpoint": {
"serviceName": "test_8080",
"ipv4": "10.12.194.200"
},
"remoteEndpoint": {
"ipv4": "127.0.0.1",
"port": 54222
},
"tags": {
"http.method": "GET",
"http.path": "/api",
"mvc.controller.class": "Backend",
"mvc.controller.method": "printDate"
},
"shared": true
}
{
"traceId": "152057c40ecb8c68",
"parentId": "5225a2741bfda4d2",
"id": "b252016ba06bbbf8",
"kind": "SERVER",
"name": "get /last",
"timestamp": 1525402389670882,
"duration": 75574,
"localEndpoint": {
"serviceName": "test_9000",
"ipv4": "10.12.194.200"
},
"remoteEndpoint": {
"ipv4": "127.0.0.1",
"port": 54223
},
"tags": {
"http.method": "GET",
"http.path": "/last",
"mvc.controller.class": "Backend",
"mvc.controller.method": "last"
},
"shared": true
}
@candyleer Thanks for providing this sample data. I suggest we could work on this first with a prototype.
zipkin-data-receiver. @peng-yongsheng Do you agree or object? parentId. In finish process, make all spans in a list, based on zipkin module.For these steps, I suggest you submit pull request for each one, for making review easier.
For the concerns you may have:
And for @adriancole , do zipkin have provided grpc or protobuf format already(released)?
apm-collector-thirdparty-receiver
receiver-zipkin
receiver-jaeger
apm-collector-thirdparty-agent
I didn't like the agent part, even we are using this in existed collector module. It should be considered as a receiver, agent is for monitored application only. And for Zipkin and Jaeger, it is SDK libs, not an agent.
Is Zipkin has service discovery feature? How to make ZipKin agents balance send traces?
This could be discussed, but please not put this in high priority. I hope the prototype should only run in standalone mode.
Suggest use Json stream reader to parse traces.
Agree. I asked Adrian, just because I want to know more.
@candyleer Can you provide me your zipkin demo? I will do this in these days.
origin/zipkin/receiver-v1 branch has been created. I am going to build the skeleton for Zipkin data, started with json format.
See SkyWalking supports Zipkin formats in https://github.com/apache/incubator-skywalking/pull/1273 . Only tested in a single case. I hope the community can start in that way. FYI @candyleer
Move to #2044 . A more reliable and high-performance way to do this, and make them production ready.
Most helpful comment
Here you can find the zipkin API documentation. I am up to give a hand.
>
https://zipkin.io/zipkin-api/
José Carlos