I have a situation where:
[Apache http proxy] -> [micro-service structure**(created traceId/spanId)**].
I need to start tracing requests from Apache server to bind logs from Apache to logs from micro-servces.
So, when request is authorized in Apache proxy, and log is created, i need to have traceId correlated to this request,:
[Apache http proxy**(created traceId/spanId)**] -> [micro-service structure**(passed tracedId from Apache)**]
Is there any possibility to force Zipkin to trace incoming requests, starting from Apache http server proxy?
I've not heard of anyone making an apache module as yet. right now, linkerd might be the only known reverse proxy that has builtin zipkin support.
We use nginx but same situation, it would be great if we could use trace_ids. Maybe this issue should be moved somewhere else thought as it is not related to the ruby client.
BTW @kmalecki maybe you would be interested on this https://github.com/JordiPolo/lorekeeper
We have a middleware which takes the trace Ids and put it in here so we have nice json formatted log messages with trace_ids. It may be too much depending on how much are you building around querying your logs but it can be a life-saver.
I am also interested in an Apache module to properly start a Zipkin trace. We currently generate Apache spans quite hackily by having Apache log certain Zipkin headers and generating the spans entirely out-of-band. It is very difficult to maintain, though probably has lower in-band overhead.
I think that the only solution is to generate trace id by a module for apache and add header to request. Unfortunately there is no available module, that can generate such thing.
Thank You All for tips.
I will not close this issue yet, maybe I or someone else will find something else.
If it helps anyone, I achieved the above using mod_unique_id and mod_headers:
RequestHeader setifempty X-B3-TraceId "expr=%{md5:%{reqenv:UNIQUE_ID}}"
RequestHeader edit X-B3-TraceId "^(.{0,16}).*$" "$1"
%{reqenv:UNIQUE_ID} is a unique string generated by mod_unique_id. Then, it gets MD5-hashed and assigned to the X-B3-TraceId header. This gives a 32-character hex string = 128 bit traceId. Since my downstream libraries require the traceIds to be 64-bit, the RequestHeader edit extracts the first 16 characters (64 bit) from the value and reassigns it back to the X-B3-TraceId header which is sent downstream.
awesome thanks for sharing @adammichalik!
Does this warrant a small README.md blurb in https://github.com/openzipkin/brave/tree/master/instrumentation/apache-httpd or possibly https://github.com/openzipkin-contrib/apache-httpd ?
maybe in b3 propagation repo, I guess, as it isn't java specific?
Most helpful comment
If it helps anyone, I achieved the above using
mod_unique_idandmod_headers:%{reqenv:UNIQUE_ID}is a unique string generated by mod_unique_id. Then, it gets MD5-hashed and assigned to theX-B3-TraceIdheader. This gives a 32-character hex string = 128 bit traceId. Since my downstream libraries require the traceIds to be 64-bit, theRequestHeader editextracts the first 16 characters (64 bit) from the value and reassigns it back to theX-B3-TraceIdheader which is sent downstream.