From 3fcb370dc11598f2f6c4764e86264c3a58978bb8 Mon Sep 17 00:00:00 2001 From: WenMing Date: Wed, 24 Jul 2019 14:52:14 +0800 Subject: [PATCH 1/9] feature: supported zipkin plugin. --- conf/config.yaml | 3 +- lua/apisix/core/request.lua | 20 +++ lua/apisix/core/response.lua | 6 +- lua/apisix/plugins/zipkin.lua | 149 +++++++++++++++++++ lua/apisix/plugins/zipkin/codec.lua | 101 +++++++++++++ lua/apisix/plugins/zipkin/random_sampler.lua | 17 +++ lua/apisix/plugins/zipkin/reporter.lua | 120 +++++++++++++++ rockspec/apisix-0.5-0.rockspec | 4 + rockspec/apisix-dev-1.0-0.rockspec | 1 + 9 files changed, 419 insertions(+), 2 deletions(-) create mode 100644 lua/apisix/plugins/zipkin.lua create mode 100644 lua/apisix/plugins/zipkin/codec.lua create mode 100644 lua/apisix/plugins/zipkin/random_sampler.lua create mode 100644 lua/apisix/plugins/zipkin/reporter.lua diff --git a/conf/config.yaml b/conf/config.yaml index 8821017a918e..c860d9347b12 100644 --- a/conf/config.yaml +++ b/conf/config.yaml @@ -19,8 +19,9 @@ plugins: # plugin list - example-plugin - limit-req - limit-count + - limit-conn - key-auth - prometheus - - limit-conn - node-status - jwt-auth + - zipkin diff --git a/lua/apisix/core/request.lua b/lua/apisix/core/request.lua index cfaac65e5784..0071bda607cf 100644 --- a/lua/apisix/core/request.lua +++ b/lua/apisix/core/request.lua @@ -8,6 +8,9 @@ local _M = {version = 0.1} local function _headers(ctx) + if not ctx then + ctx = ngx.ctx.api_ctx + end local headers = ctx.headers if not headers then headers = get_headers() @@ -20,6 +23,9 @@ _M.headers = _headers function _M.header(ctx, name) + if not ctx then + ctx = ngx.ctx.api_ctx + end return _headers(ctx)[name] end @@ -28,6 +34,9 @@ end -- so if there is a load balancer between downstream client and APISIX, -- this function will return the ip of load balancer. function _M.get_ip(ctx) + if not ctx then + ctx = ngx.ctx.api_ctx + end return ctx.var.realip_remote_addr or ctx.var.remote_addr or '' end @@ -35,8 +44,19 @@ end -- get remote address of downstream client, -- in cases there is a load balancer between downstream client and APISIX. function _M.get_remote_client_ip(ctx) + if not ctx then + ctx = ngx.ctx.api_ctx + end return ctx.var.remote_addr or '' end +function _M.get_remote_client_port(ctx) + if not ctx then + ctx = ngx.ctx.api_ctx + end + return tonumber(ctx.var.remote_port) + end + + return _M diff --git a/lua/apisix/core/response.lua b/lua/apisix/core/response.lua index 24db61781ca8..2e23096c9649 100644 --- a/lua/apisix/core/response.lua +++ b/lua/apisix/core/response.lua @@ -10,7 +10,7 @@ local type = type local ngx_exit = ngx.exit local insert_tab = table.insert local concat_tab = table.concat - +local str_sub = string.sub local _M = {version = 0.1} @@ -78,4 +78,8 @@ function _M.set_header(...) end +function _M.get_upstream_status(ctx) + return tonumber(str_sub(ctx.var.upstream_status or "", -3)) +end + return _M diff --git a/lua/apisix/plugins/zipkin.lua b/lua/apisix/plugins/zipkin.lua new file mode 100644 index 000000000000..4d20cffc7956 --- /dev/null +++ b/lua/apisix/plugins/zipkin.lua @@ -0,0 +1,149 @@ +local core = require("apisix.core") +local new_tracer = require("opentracing.tracer").new +local zipkin_codec = require("apisix.plugins.zipkin.codec") +local new_random_sampler = require("apisix.plugins.zipkin.random_sampler").new +local new_reporter = require("apisix.plugins.zipkin.reporter").new + +local plugin_name = "zipkin" + + +-- You can follow this document to write schema: +-- https://github.com/Tencent/rapidjson/blob/master/bin/draft-04/schema +-- rapidjson not supported `format` in draft-04 yet +local schema = { + type = "object", + properties = { + endpoint = {type = "string"}, + sample_ratio = {type = "number", + default = 0.001, minimum = 0.00001, maximum = 1} + }, + required = {"endpoint"} +} + + +local _M = { + version = 0.1, + priority = -1000, -- last running plugin + name = plugin_name, + schema = schema, +} + + +function _M.check_schema(conf) + local ok, err = core.schema.check(schema, conf) + + if not ok then + return false, err + end + + return true +end + + +local function create_tracer(conf) + local tracer = new_tracer(new_reporter(conf), new_random_sampler(conf)) + tracer:register_injector("http_headers", zipkin_codec.new_injector()) + tracer:register_extractor("http_headers", zipkin_codec.new_extractor()) + return tracer +end + +local function report2endpoint(premature, reporter) + if premature then + return + end + + local ok, err = reporter:flush() + if not ok then + core.log.error("reporter flush ", err) + return + end +end + + +function _M.rewrite(conf, ctx) + local tracer = core.lrucache.plugin_ctx(plugin_name, ctx, + create_tracer, conf) + + local wire_context = tracer:extract("http_headers", core.request.headers(ctx)) + + local start_timestamp = ngx.req.start_time() + local request_span = tracer:start_span("apisix.request", { + child_of = wire_context, + start_timestamp = start_timestamp, + tags = { + component = "apisix", + ["span.kind"] = "server", + ["http.method"] = ctx.var.method, + ["http.url"] = ctx.var.request_uri, + ["peer.ipv4"] = core.request.get_remote_client_ip(ctx), -- TODO: support ipv6 + ["peer.port"] = core.request.get_remote_client_port(ctx), + } + }) + + local rewrite_span = ctx.opentracing.request_span:start_child_span( + "apisix.rewrite", start_timestamp) + + ctx.opentracing = { + tracer = tracer, + wire_context = wire_context, + request_span = request_span, + rewrite_span = rewrite_span, + access_span = nil, + proxy_span = nil, + } + + ctx.REWRITE_END_TIME = tracer:time() + ctx.opentracing.rewrite_span:finish(ctx.REWRITE_END_TIME) +end + +function _M.access(conf, ctx) + local opentracing = ctx.opentracing + + opentracing.access_span = opentracing.request_span:start_child_span( + "apisix.access", ctx.REWRITE_END_TIME) + + -- send headers to upstream + local outgoing_headers = {} + opentracing.tracer:inject(opentracing.proxy_span, "http_headers", outgoing_headers) + for k, v in pairs(outgoing_headers) do + core.response.set_header(k, v) + end + + ctx.ACCESS_END_TIME = opentracing.tracer:time() + opentracing.access_span:finish(ctx.ACCESS_END_TIME) + + opentracing.proxy_span = opentracing.request_span:start_child_span( + "apisix.proxy", ctx.ACCESS_END_TIME) +end + + +function _M.http_header_filter_phase(conf, ctx) + local opentracing = ctx.opentracing + + ctx.HEADER_FILTER_END_TIME = opentracing.tracer:time() + opentracing.body_filter_span = opentracing.proxy_span:start_child_span( + "apisix.body_filter", ctx.HEADER_FILTER_END_TIME) +end + + +function _M.log(conf, ctx) + local opentracing = ctx.opentracing + + local log_end_time = opentracing.tracer:time() + opentracing.body_filter_span:finish(log_end_time) + + core.log.error(" ctx: ", core.json.encode(ctx, true)) + + local upstream_status = core.response.get_upstream_status(ctx) + opentracing.request_span:set_tag("http.status_code", upstream_status) + opentracing.proxy_span:finish(log_end_time) + opentracing.request_span:finish(log_end_time) + + local reporter = opentracing.tracer.reporter + local ok, err = ngx.timer.at(0, report2endpoint, reporter) + if not ok then + core.log.error("failed to create timer: ", err) + end +end + +return _M diff --git a/lua/apisix/plugins/zipkin/codec.lua b/lua/apisix/plugins/zipkin/codec.lua new file mode 100644 index 000000000000..f80c36061902 --- /dev/null +++ b/lua/apisix/plugins/zipkin/codec.lua @@ -0,0 +1,101 @@ +local core = require("apisix.core") +local to_hex = require "resty.string".to_hex +local new_span_context = require("opentracing.span_context").new + +local function hex_to_char(c) + return string.char(tonumber(c, 16)) +end + +local function from_hex(str) + if str ~= nil then -- allow nil to pass through + str = str:gsub("%x%x", hex_to_char) + end + return str +end + +local function new_extractor() + return function(headers) + -- X-B3-Sampled: if an upstream decided to sample this request, we do too. + local sample = headers["x-b3-sampled"] + if sample == "1" or sample == "true" then + sample = true + elseif sample == "0" or sample == "false" then + sample = false + elseif sample ~= nil then + core.log.warn("x-b3-sampled header invalid; ignoring.") + sample = nil + end + + -- X-B3-Flags: if it equals '1' then it overrides sampling policy + -- We still want to warn on invalid sample header, so do this after the above + local debug = headers["x-b3-flags"] + if debug == "1" then + sample = true + elseif debug ~= nil then + core.log.warn("x-b3-flags header invalid; ignoring.") + end + + local had_invalid_id = false + + local trace_id = headers["x-b3-traceid"] + -- Validate trace id + if trace_id and ((#trace_id ~= 16 and #trace_id ~= 32) or trace_id:match("%X")) then + core.log.warn("x-b3-traceid header invalid; ignoring.") + had_invalid_id = true + end + + local parent_span_id = headers["x-b3-parentspanid"] + -- Validate parent_span_id + if parent_span_id and (#parent_span_id ~= 16 or parent_span_id:match("%X")) then + core.log.warn("x-b3-parentspanid header invalid; ignoring.") + had_invalid_id = true + end + + local request_span_id = headers["x-b3-spanid"] + -- Validate request_span_id + if request_span_id and (#request_span_id ~= 16 or request_span_id:match("%X")) then + core.log.warn("x-b3-spanid header invalid; ignoring.") + had_invalid_id = true + end + + if trace_id == nil or had_invalid_id then + return nil + end + + -- Process jaegar baggage header + local baggage = {} + for k, v in pairs(headers) do + local baggage_key = k:match("^uberctx%-(.*)$") + if baggage_key then + baggage[baggage_key] = ngx.unescape_uri(v) + end + end + + trace_id = from_hex(trace_id) + parent_span_id = from_hex(parent_span_id) + request_span_id = from_hex(request_span_id) + + return new_span_context(trace_id, request_span_id, parent_span_id, sample, baggage) + end +end + +local function new_injector() + return function(span_context, headers) + -- We want to remove headers if already present + headers["x-b3-traceid"] = to_hex(span_context.trace_id) + headers["x-b3-parentspanid"] = span_context.parent_id and to_hex(span_context.parent_id) or nil + headers["x-b3-spanid"] = to_hex(span_context.span_id) + local Flags = core.request.header(nil, "x-b3-flags") -- Get from request headers + headers["x-b3-flags"] = Flags + headers["x-b3-sampled"] = (not Flags) and (span_context.should_sample and "1" or "0") or nil + for key, value in span_context:each_baggage_item() do + -- XXX: https://github.com/opentracing/specification/issues/117 + headers["uberctx-"..key] = ngx.escape_uri(value) + end + end +end + +return { + new_extractor = new_extractor, + new_injector = new_injector, +} diff --git a/lua/apisix/plugins/zipkin/random_sampler.lua b/lua/apisix/plugins/zipkin/random_sampler.lua new file mode 100644 index 000000000000..51c387914a13 --- /dev/null +++ b/lua/apisix/plugins/zipkin/random_sampler.lua @@ -0,0 +1,17 @@ +local _M = {} +local mt = { __index = _M } + +function _M.new(conf) + local sample_ratio = conf.sample_ratio + assert(type(sample_ratio) == "number" and sample_ratio >= 0 and sample_ratio <= 1, "invalid sample_ratio") + return setmetatable({ + sample_ratio = sample_ratio + }, mt) +end + +function _M.sample(self, name) + return math.random() < self.sample_ratio +end + + +return _M diff --git a/lua/apisix/plugins/zipkin/reporter.lua b/lua/apisix/plugins/zipkin/reporter.lua new file mode 100644 index 000000000000..a3fc65b5a1dd --- /dev/null +++ b/lua/apisix/plugins/zipkin/reporter.lua @@ -0,0 +1,120 @@ +local resty_http = require "resty.http" +local to_hex = require "resty.string".to_hex +local cjson = require "cjson".new() +cjson.encode_number_precision(16) + + +local _M = {} +local mt = { __index = _M } + + +local span_kind_map = { + client = "CLIENT", + server = "SERVER", + producer = "PRODUCER", + consumer = "CONSUMER", +} + + +function _M.new(conf) + local http_endpoint = conf.http_endpoint + assert(type(http_endpoint) == "string", "invalid http endpoint") + return setmetatable({ + http_endpoint = http_endpoint, + pending_spans = {}, + pending_spans_n = 0, + }, mt) +end + + +function _M.report(self, span) + local span_context = span:context() + + local zipkin_tags = {} + for k, v in span:each_tag() do + -- Zipkin tag values should be strings + zipkin_tags[k] = tostring(v) + end + + local span_kind = zipkin_tags["span.kind"] + zipkin_tags["span.kind"] = nil + + local localEndpoint do + local serviceName = zipkin_tags["peer.service"] + if serviceName then + zipkin_tags["peer.service"] = nil + localEndpoint = { + serviceName = serviceName, + -- TODO: ip/port from ngx.var.server_name/ngx.var.server_port? + } + else + -- needs to be null, not the empty object + localEndpoint = cjson.null + end + end + + local remoteEndpoint do + local peer_port = span:get_tag "peer.port" -- get as number + if peer_port then + zipkin_tags["peer.port"] = nil + remoteEndpoint = { + ipv4 = zipkin_tags["peer.ipv4"], + -- ipv6 = zipkin_tags["peer.ipv6"], + port = peer_port, -- port is *not* optional + } + zipkin_tags["peer.ipv4"] = nil + zipkin_tags["peer.ipv6"] = nil + else + remoteEndpoint = cjson.null + end + end + + local zipkin_span = { + traceId = to_hex(span_context.trace_id), + name = span.name, + parentId = span_context.parent_id and to_hex(span_context.parent_id) or nil, + id = to_hex(span_context.span_id), + kind = span_kind_map[span_kind], + timestamp = span.timestamp * 1000000, + duration = math.floor(span.duration * 1000000), -- zipkin wants integer + -- shared = nil, -- We don't use shared spans (server reuses client generated spanId) + -- TODO: debug? + localEndpoint = localEndpoint, + remoteEndpoint = remoteEndpoint, + tags = zipkin_tags, + annotations = span.logs -- XXX: not guaranteed by documented opentracing-lua API to be in correct format + } + + local i = self.pending_spans_n + 1 + self.pending_spans[i] = zipkin_span + self.pending_spans_n = i +end + +function _M.flush(self) + if self.pending_spans_n == 0 then + return true + end + + local pending_spans = cjson.encode(self.pending_spans) + self.pending_spans = {} + self.pending_spans_n = 0 + + local httpc = resty_http.new() + local res, err = httpc:request_uri(self.http_endpoint, { + method = "POST", + headers = { + ["content-type"] = "application/json", + }, + body = pending_spans, + }) + -- TODO: on failure, retry? + if not res then + return nil, "failed to request: " .. err + elseif res.status < 200 or res.status >= 300 then + return nil, "failed: " .. res.status .. " " .. res.reason + end + return true +end + + +return _M diff --git a/rockspec/apisix-0.5-0.rockspec b/rockspec/apisix-0.5-0.rockspec index aac25e9c700e..20f8bf4c63fd 100644 --- a/rockspec/apisix-0.5-0.rockspec +++ b/rockspec/apisix-0.5-0.rockspec @@ -22,6 +22,10 @@ dependencies = { "lua-resty-ngxvar = 0.3", "lua-resty-jit-uuid = 0.0.7", "rapidjson = 0.6.0-1", + "lua-resty-healthcheck-iresty = 1.0.0", + "lua-resty-jwt = 0.2.0", + "lua-resty-cookie = 0.1.0", + "opentracing-openresty = 0.1", } build = { diff --git a/rockspec/apisix-dev-1.0-0.rockspec b/rockspec/apisix-dev-1.0-0.rockspec index b5c18ee4d4fc..7123c71892bf 100644 --- a/rockspec/apisix-dev-1.0-0.rockspec +++ b/rockspec/apisix-dev-1.0-0.rockspec @@ -27,6 +27,7 @@ dependencies = { "lua-resty-cookie", "lua-resty-session", "lua-resty-openidc", + "opentracing-openresty", } build = { From db66cc9030e0cc911a9a503b92fdfdc7a9173397 Mon Sep 17 00:00:00 2001 From: WenMing Date: Thu, 25 Jul 2019 16:18:46 +0800 Subject: [PATCH 2/9] added licsnse. --- COPYRIGHT | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/COPYRIGHT b/COPYRIGHT index 98408cde0b6b..dcc4fa5237f0 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -239,3 +239,12 @@ Redistributions in binary form must reproduce the above copyright notice, this l THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +opentracing-openresty + +https://github.com/iresty/opentracing-openresty + +Apache License 2 + +This module is licensed under the Apache 2.0 license. + +%%%%%%%%% From 3c1a2c5715ae236781fd8592e0875f1bbaec84e5 Mon Sep 17 00:00:00 2001 From: WenMing Date: Fri, 26 Jul 2019 00:41:04 +0800 Subject: [PATCH 3/9] added test cases. --- COPYRIGHT | 32 +- lua/apisix/plugins/zipkin.lua | 55 ++-- lua/apisix/plugins/zipkin/codec.lua | 27 +- lua/apisix/plugins/zipkin/random_sampler.lua | 5 +- lua/apisix/plugins/zipkin/reporter.lua | 17 +- t/lib/server.lua | 26 ++ t/plugin/zipkin.t | 299 +++++++++++++++++++ 7 files changed, 423 insertions(+), 38 deletions(-) create mode 100644 t/plugin/zipkin.t diff --git a/COPYRIGHT b/COPYRIGHT index dcc4fa5237f0..e31ac1f812a6 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -245,6 +245,36 @@ https://github.com/iresty/opentracing-openresty Apache License 2 -This module is licensed under the Apache 2.0 license. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +%%%%%%%%% + +kong-plugin-zipkin + +https://github.com/Kong/kong-plugin-zipkin + +Copyright 2018-2019 Kong Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. %%%%%%%%% diff --git a/lua/apisix/plugins/zipkin.lua b/lua/apisix/plugins/zipkin.lua index 4d20cffc7956..5b405334493a 100644 --- a/lua/apisix/plugins/zipkin.lua +++ b/lua/apisix/plugins/zipkin.lua @@ -56,7 +56,9 @@ local function report2endpoint(premature, reporter) if not ok then core.log.error("reporter flush ", err) return - end + end + + core.log.info("report2endpoint ok") end @@ -64,7 +66,13 @@ function _M.rewrite(conf, ctx) local tracer = core.lrucache.plugin_ctx(plugin_name, ctx, create_tracer, conf) - local wire_context = tracer:extract("http_headers", core.request.headers(ctx)) + ctx.opentracing_sample = tracer.sampler:sample() + if not ctx.opentracing_sample then + return + end + + local wire_context = tracer:extract("http_headers", + core.request.headers(ctx)) local start_timestamp = ngx.req.start_time() local request_span = tracer:start_span("apisix.request", { @@ -75,49 +83,60 @@ function _M.rewrite(conf, ctx) ["span.kind"] = "server", ["http.method"] = ctx.var.method, ["http.url"] = ctx.var.request_uri, - ["peer.ipv4"] = core.request.get_remote_client_ip(ctx), -- TODO: support ipv6 + -- TODO: support ipv6 + ["peer.ipv4"] = core.request.get_remote_client_ip(ctx), ["peer.port"] = core.request.get_remote_client_port(ctx), } }) - local rewrite_span = ctx.opentracing.request_span:start_child_span( - "apisix.rewrite", start_timestamp) - ctx.opentracing = { tracer = tracer, wire_context = wire_context, request_span = request_span, - rewrite_span = rewrite_span, + rewrite_span = nil, access_span = nil, proxy_span = nil, } + local request_span = ctx.opentracing.request_span + ctx.opentracing.rewrite_span = request_span:start_child_span( + "apisix.rewrite", start_timestamp) ctx.REWRITE_END_TIME = tracer:time() ctx.opentracing.rewrite_span:finish(ctx.REWRITE_END_TIME) end function _M.access(conf, ctx) + if not ctx.opentracing_sample then + return + end + local opentracing = ctx.opentracing opentracing.access_span = opentracing.request_span:start_child_span( "apisix.access", ctx.REWRITE_END_TIME) - -- send headers to upstream - local outgoing_headers = {} - opentracing.tracer:inject(opentracing.proxy_span, "http_headers", outgoing_headers) - for k, v in pairs(outgoing_headers) do - core.response.set_header(k, v) - end + local tracer = opentracing.tracer - ctx.ACCESS_END_TIME = opentracing.tracer:time() + ctx.ACCESS_END_TIME = tracer:time() opentracing.access_span:finish(ctx.ACCESS_END_TIME) opentracing.proxy_span = opentracing.request_span:start_child_span( "apisix.proxy", ctx.ACCESS_END_TIME) + + -- send headers to upstream + local outgoing_headers = {} + tracer:inject(opentracing.proxy_span, "http_headers", outgoing_headers) + for k, v in pairs(outgoing_headers) do + core.response.set_header(k, v) + end end -function _M.http_header_filter_phase(conf, ctx) +function _M.header_filter(conf, ctx) + if not ctx.opentracing_sample then + return + end + local opentracing = ctx.opentracing ctx.HEADER_FILTER_END_TIME = opentracing.tracer:time() @@ -127,13 +146,15 @@ end function _M.log(conf, ctx) + if not ctx.opentracing_sample then + return + end + local opentracing = ctx.opentracing local log_end_time = opentracing.tracer:time() opentracing.body_filter_span:finish(log_end_time) - core.log.error(" ctx: ", core.json.encode(ctx, true)) - local upstream_status = core.response.get_upstream_status(ctx) opentracing.request_span:set_tag("http.status_code", upstream_status) opentracing.proxy_span:finish(log_end_time) diff --git a/lua/apisix/plugins/zipkin/codec.lua b/lua/apisix/plugins/zipkin/codec.lua index f80c36061902..25e86f44a81d 100644 --- a/lua/apisix/plugins/zipkin/codec.lua +++ b/lua/apisix/plugins/zipkin/codec.lua @@ -15,7 +15,7 @@ end local function new_extractor() return function(headers) - -- X-B3-Sampled: if an upstream decided to sample this request, we do too. +-- X-B3-Sampled: if an upstream decided to sample this request, we do too. local sample = headers["x-b3-sampled"] if sample == "1" or sample == "true" then sample = true @@ -26,8 +26,8 @@ local function new_extractor() sample = nil end - -- X-B3-Flags: if it equals '1' then it overrides sampling policy - -- We still want to warn on invalid sample header, so do this after the above +-- X-B3-Flags: if it equals '1' then it overrides sampling policy +-- We still want to warn on invalid sample header, so do this after the above local debug = headers["x-b3-flags"] if debug == "1" then sample = true @@ -39,21 +39,24 @@ local function new_extractor() local trace_id = headers["x-b3-traceid"] -- Validate trace id - if trace_id and ((#trace_id ~= 16 and #trace_id ~= 32) or trace_id:match("%X")) then + if trace_id and + ((#trace_id ~= 16 and #trace_id ~= 32) or trace_id:match("%X")) then core.log.warn("x-b3-traceid header invalid; ignoring.") had_invalid_id = true end local parent_span_id = headers["x-b3-parentspanid"] -- Validate parent_span_id - if parent_span_id and (#parent_span_id ~= 16 or parent_span_id:match("%X")) then + if parent_span_id and + (#parent_span_id ~= 16 or parent_span_id:match("%X")) then core.log.warn("x-b3-parentspanid header invalid; ignoring.") had_invalid_id = true end local request_span_id = headers["x-b3-spanid"] -- Validate request_span_id - if request_span_id and (#request_span_id ~= 16 or request_span_id:match("%X")) then + if request_span_id and + (#request_span_id ~= 16 or request_span_id:match("%X")) then core.log.warn("x-b3-spanid header invalid; ignoring.") had_invalid_id = true end @@ -75,7 +78,8 @@ local function new_extractor() parent_span_id = from_hex(parent_span_id) request_span_id = from_hex(request_span_id) - return new_span_context(trace_id, request_span_id, parent_span_id, sample, baggage) + return new_span_context(trace_id, request_span_id, parent_span_id, + sample, baggage) end end @@ -83,11 +87,12 @@ local function new_injector() return function(span_context, headers) -- We want to remove headers if already present headers["x-b3-traceid"] = to_hex(span_context.trace_id) - headers["x-b3-parentspanid"] = span_context.parent_id and to_hex(span_context.parent_id) or nil + headers["x-b3-parentspanid"] = span_context.parent_id + and to_hex(span_context.parent_id) or nil headers["x-b3-spanid"] = to_hex(span_context.span_id) - local Flags = core.request.header(nil, "x-b3-flags") -- Get from request headers - headers["x-b3-flags"] = Flags - headers["x-b3-sampled"] = (not Flags) and (span_context.should_sample and "1" or "0") or nil + local flags = core.request.header(nil, "x-b3-flags") + headers["x-b3-flags"] = flags + headers["x-b3-sampled"] = (not flags) for key, value in span_context:each_baggage_item() do -- XXX: https://github.com/opentracing/specification/issues/117 headers["uberctx-"..key] = ngx.escape_uri(value) diff --git a/lua/apisix/plugins/zipkin/random_sampler.lua b/lua/apisix/plugins/zipkin/random_sampler.lua index 51c387914a13..bb0ece538a26 100644 --- a/lua/apisix/plugins/zipkin/random_sampler.lua +++ b/lua/apisix/plugins/zipkin/random_sampler.lua @@ -3,13 +3,14 @@ local mt = { __index = _M } function _M.new(conf) local sample_ratio = conf.sample_ratio - assert(type(sample_ratio) == "number" and sample_ratio >= 0 and sample_ratio <= 1, "invalid sample_ratio") + assert(type(sample_ratio) == "number" and + sample_ratio >= 0 and sample_ratio <= 1, "invalid sample_ratio") return setmetatable({ sample_ratio = sample_ratio }, mt) end -function _M.sample(self, name) +function _M.sample(self) return math.random() < self.sample_ratio end diff --git a/lua/apisix/plugins/zipkin/reporter.lua b/lua/apisix/plugins/zipkin/reporter.lua index a3fc65b5a1dd..0f811a270ea7 100644 --- a/lua/apisix/plugins/zipkin/reporter.lua +++ b/lua/apisix/plugins/zipkin/reporter.lua @@ -17,10 +17,10 @@ local span_kind_map = { function _M.new(conf) - local http_endpoint = conf.http_endpoint - assert(type(http_endpoint) == "string", "invalid http endpoint") + local endpoint = conf.endpoint + assert(type(endpoint) == "string", "invalid http endpoint") return setmetatable({ - http_endpoint = http_endpoint, + endpoint = endpoint, pending_spans = {}, pending_spans_n = 0, }, mt) @@ -72,17 +72,17 @@ function _M.report(self, span) local zipkin_span = { traceId = to_hex(span_context.trace_id), name = span.name, - parentId = span_context.parent_id and to_hex(span_context.parent_id) or nil, + parentId = span_context.parent_id and + to_hex(span_context.parent_id) or nil, id = to_hex(span_context.span_id), kind = span_kind_map[span_kind], timestamp = span.timestamp * 1000000, duration = math.floor(span.duration * 1000000), -- zipkin wants integer - -- shared = nil, -- We don't use shared spans (server reuses client generated spanId) -- TODO: debug? localEndpoint = localEndpoint, remoteEndpoint = remoteEndpoint, tags = zipkin_tags, - annotations = span.logs -- XXX: not guaranteed by documented opentracing-lua API to be in correct format + annotations = span.logs } local i = self.pending_spans_n + 1 @@ -92,6 +92,7 @@ end function _M.flush(self) if self.pending_spans_n == 0 then + return true end @@ -100,19 +101,21 @@ function _M.flush(self) self.pending_spans_n = 0 local httpc = resty_http.new() - local res, err = httpc:request_uri(self.http_endpoint, { + local res, err = httpc:request_uri(self.endpoint, { method = "POST", headers = { ["content-type"] = "application/json", }, body = pending_spans, }) + -- TODO: on failure, retry? if not res then return nil, "failed to request: " .. err elseif res.status < 200 or res.status >= 300 then return nil, "failed: " .. res.status .. " " .. res.reason end + return true end diff --git a/t/lib/server.lua b/t/lib/server.lua index a536f904eabb..53e01bec6c87 100644 --- a/t/lib/server.lua +++ b/t/lib/server.lua @@ -1,3 +1,5 @@ +local json_decode = require("cjson").decode + local _M = {} @@ -31,6 +33,30 @@ function _M.sleep1() end +function _M.opentracing() + ngx.say("opentracing") +end + + +function _M.mock_zipkin() + ngx.req.read_body() + local data = ngx.req.get_body_data() + local spans = json_decode(data) + if #spans < 5 then + ngx.exit(400) + end + + for _, span in pairs(spans) do + if string.sub(span.name, 1, 6) ~= 'apisix' then + ngx.exit(400) + end + if not span.traceId then + ngx.exit(400) + end + end +end + + function _M.go() local action = string.sub(ngx.var.uri, 2) if not _M[action] then diff --git a/t/plugin/zipkin.t b/t/plugin/zipkin.t new file mode 100644 index 000000000000..a07484367eef --- /dev/null +++ b/t/plugin/zipkin.t @@ -0,0 +1,299 @@ +use t::APISix 'no_plan'; + +repeat_each(2); +no_long_string(); +no_root_location(); +log_level("info"); +run_tests; + +__DATA__ + +=== TEST 1: sanity +--- config + location /t { + content_by_lua_block { + local plugin = require("apisix.plugins.zipkin") + local ok, err = plugin.check_schema({endpoint = 'http://127.0.0.1', sample_ratio = 0.001}) + if not ok then + ngx.say(err) + end + + ngx.say("done") + } + } +--- request +GET /t +--- response_body +done +--- no_error_log +[error] + + + +=== TEST 2: default value of sample_ratio +--- config + location /t { + content_by_lua_block { + local plugin = require("apisix.plugins.zipkin") + local ok, err = plugin.check_schema({endpoint = 'http://127.0.0.1'}) + if not ok then + ngx.say(err) + end + + ngx.say("done") + } + } +--- request +GET /t +--- response_body +done +--- no_error_log +[error] + + + +=== TEST 3: wrong value of ratio +--- config + location /t { + content_by_lua_block { + local plugin = require("apisix.plugins.zipkin") + local ok, err = plugin.check_schema({endpoint = 'http://127.0.0.1', sample_ratio = -0.1}) + if not ok then + ngx.say(err) + end + + ngx.say("done") + } + } +--- request +GET /t +--- response_body +invalid "minimum" in docuement at pointer "#/sample_ratio" +done +--- no_error_log +[error] + + + +=== TEST 4: wrong value of ratio +--- config + location /t { + content_by_lua_block { + local plugin = require("apisix.plugins.zipkin") + local ok, err = plugin.check_schema({endpoint = 'http://127.0.0.1', sample_ratio = 2}) + if not ok then + ngx.say(err) + end + + ngx.say("done") + } + } +--- request +GET /t +--- response_body +invalid "maximum" in docuement at pointer "#/sample_ratio" +done +--- no_error_log +[error] + + + +=== TEST 5: add plugin +--- config + location /t { + content_by_lua_block { + local t = require("lib.test_admin").test + local code, body = t('/apisix/admin/routes/1', + ngx.HTTP_PUT, + [[{ + "plugins": { + "zipkin": { + "endpoint": "http://127.0.0.1:1982/mock_zipkin", + "sample_ratio": 1 + } + }, + "upstream": { + "nodes": { + "127.0.0.1:1980": 1 + }, + "type": "roundrobin" + }, + "uri": "/opentracing" + }]], + [[{ + "node": { + "value": { + "plugins": { + "zipkin": { + "endpoint": "http://127.0.0.1:1982/mock_zipkin", + "sample_ratio": 1 + } + }, + "upstream": { + "nodes": { + "127.0.0.1:1980": 1 + }, + "type": "roundrobin" + }, + "uri": "/opentracing" + }, + "key": "/apisix/routes/1" + }, + "action": "set" + }]] + ) + + if code >= 300 then + ngx.status = code + end + ngx.say(body) + } + } +--- request +GET /t +--- response_body +passed +--- no_error_log +[error] + + + +=== TEST 6: tiger zipkin +--- request +GET /opentracing +--- response_body +opentracing +--- error_log +report2endpoint ok + + + +=== TEST 7: change sample ratio +--- config + location /t { + content_by_lua_block { + local t = require("lib.test_admin").test + local code, body = t('/apisix/admin/routes/1', + ngx.HTTP_PUT, + [[{ + "plugins": { + "zipkin": { + "endpoint": "http://127.0.0.1:1982/mock_zipkin", + "sample_ratio": 0.00001 + } + }, + "upstream": { + "nodes": { + "127.0.0.1:1980": 1 + }, + "type": "roundrobin" + }, + "uri": "/opentracing" + }]], + [[{ + "node": { + "value": { + "plugins": { + "zipkin": { + "endpoint": "http://127.0.0.1:1982/mock_zipkin", + "sample_ratio": 0.00001 + } + }, + "upstream": { + "nodes": { + "127.0.0.1:1980": 1 + }, + "type": "roundrobin" + }, + "uri": "/opentracing" + }, + "key": "/apisix/routes/1" + }, + "action": "set" + }]] + ) + + if code >= 300 then + ngx.status = code + end + ngx.say(body) + } + } +--- request +GET /t +--- response_body +passed +--- no_error_log +[error] + + + +=== TEST 8: not tiger zipkin +--- request +GET /opentracing +--- response_body +opentracing +--- no_error_log +report2endpoint ok + + + +=== TEST 9: disabled +--- config + location /t { + content_by_lua_block { + local t = require("lib.test_admin").test + local code, body = t('/apisix/admin/routes/1', + ngx.HTTP_PUT, + [[{ + "plugins": { + }, + "upstream": { + "nodes": { + "127.0.0.1:1980": 1 + }, + "type": "roundrobin" + }, + "uri": "/opentracing" + }]], + [[{ + "node": { + "value": { + "plugins": { + }, + "upstream": { + "nodes": { + "127.0.0.1:1980": 1 + }, + "type": "roundrobin" + }, + "uri": "/opentracing" + }, + "key": "/apisix/routes/1" + }, + "action": "set" + }]] + ) + + if code >= 300 then + ngx.status = code + end + ngx.say(body) + } + } +--- request +GET /t +--- response_body +passed +--- no_error_log +[error] + + + +=== TEST 10: not tiger zipkin +--- request +GET /opentracing +--- response_body +opentracing +--- no_error_log +report2endpoint ok From 80a2c2723274533cf9068220caeda712507f6787 Mon Sep 17 00:00:00 2001 From: WenMing Date: Fri, 26 Jul 2019 01:01:12 +0800 Subject: [PATCH 4/9] doc: added doc. --- COPYRIGHT | 2 + doc/plugins/zipkin.md | 92 +++++++++++++++++++++++++++++++++++ lua/apisix/core/request.lua | 2 +- lua/apisix/core/response.lua | 1 + lua/apisix/plugins/zipkin.lua | 2 + t/admin/plugins.t | 2 +- 6 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 doc/plugins/zipkin.md diff --git a/COPYRIGHT b/COPYRIGHT index e31ac1f812a6..ad8a171d9dd2 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -239,6 +239,8 @@ Redistributions in binary form must reproduce the above copyright notice, this l THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%%%%%%%% + opentracing-openresty https://github.com/iresty/opentracing-openresty diff --git a/doc/plugins/zipkin.md b/doc/plugins/zipkin.md new file mode 100644 index 000000000000..bcfd4d730b49 --- /dev/null +++ b/doc/plugins/zipkin.md @@ -0,0 +1,92 @@ +# Summary +- [**Name**](#name) +- [**Attributes**](#attributes) +- [**How To Enable**](#how-to-enable) +- [**Test Plugin**](#test-plugin) +- [**Disable Plugin**](#disable-plugin) + + +## Name + +`Zipkin` is a OpenTracing plugin. + +It's also works with `Apache SkyWalking`, which is support Zipkin v1/v2 format. + +## Attributes + +* `endpoint`: the http endpoint of Ziplin, for example: `http://127.0.0.1:9411/api/v2/spans`. + +* `sample_ratio`: the ratio of sample, the default value is 0.001, the minimum is 0.00001, the maximum is 1. + +## How To Enable + +Here's an example, enable the zipkin plugin on the specified route: + +```shell +curl http://127.0.0.1:9080/apisix/admin/routes/1 -X PUT -d ' +{ + "methods": ["GET"], + "uri": "/index.html", + "plugins": { + "zipkin": { + "endpoint": "http://127.0.0.1:9411/api/v2/spans", + "sample_ratio": 1 + } + }, + "upstream": { + "type": "roundrobin", + "nodes": { + "39.97.63.215:80": 1 + } + } +}' +``` + +## Test Plugin + +### run the Zipkin instance + +e.g. using docker: + +``` +sudo docker run -d -p 9411:9411 openzipkin/zipkin +``` + +Here is a test example: + +```shell +$ curl http://127.0.0.1:9080/index.html +HTTP/1.1 200 OK +... +``` + +Then you can use a browser to access the webUI of Zipkin: + +``` +http://127.0.0.1:9411/zipkin +``` + +## Disable Plugin + +When you want to disable the zipkin plugin, it is very simple, + you can delete the corresponding json configuration in the plugin configuration, + no need to restart the service, it will take effect immediately: + +```shell +$ curl http://127.0.0.1:2379/v2/keys/apisix/routes/1 -X PUT -d value=' +{ + "methods": ["GET"], + "uri": "/index.html", + "id": 1, + "plugins": { + }, + "upstream": { + "type": "roundrobin", + "nodes": { + "39.97.63.215:80": 1 + } + } +}' +``` + +The zipkin plugin has been disabled now. It works for other plugins. diff --git a/lua/apisix/core/request.lua b/lua/apisix/core/request.lua index 0071bda607cf..9ca6c541ab2b 100644 --- a/lua/apisix/core/request.lua +++ b/lua/apisix/core/request.lua @@ -2,7 +2,7 @@ local ngx = ngx local get_headers = ngx.req.get_headers - +local tonumber = tonumber local _M = {version = 0.1} diff --git a/lua/apisix/core/response.lua b/lua/apisix/core/response.lua index 2e23096c9649..d17f385af78f 100644 --- a/lua/apisix/core/response.lua +++ b/lua/apisix/core/response.lua @@ -11,6 +11,7 @@ local ngx_exit = ngx.exit local insert_tab = table.insert local concat_tab = table.concat local str_sub = string.sub +local tonumber = tonumber local _M = {version = 0.1} diff --git a/lua/apisix/plugins/zipkin.lua b/lua/apisix/plugins/zipkin.lua index 5b405334493a..534da6126418 100644 --- a/lua/apisix/plugins/zipkin.lua +++ b/lua/apisix/plugins/zipkin.lua @@ -3,6 +3,8 @@ local new_tracer = require("opentracing.tracer").new local zipkin_codec = require("apisix.plugins.zipkin.codec") local new_random_sampler = require("apisix.plugins.zipkin.random_sampler").new local new_reporter = require("apisix.plugins.zipkin.reporter").new +local ngx = ngx +local pairs = pairs local plugin_name = "zipkin" diff --git a/t/admin/plugins.t b/t/admin/plugins.t index 158bba6ddb9f..68ac848d3a57 100644 --- a/t/admin/plugins.t +++ b/t/admin/plugins.t @@ -14,6 +14,6 @@ __DATA__ --- request GET /apisix/admin/plugins/list --- response_body_like eval -qr/example-plugin","limit-req","limit-count","key-auth","prometheus","limit-conn","node-status"/ +qr/\["example-plugin","limit-req","limit-count","limit-conn","key-auth","prometheus","node-status","jwt-auth","zipkin"\]/ --- no_error_log [error] From c2a4dc304b3c54991cbaa207b4e6e223102df96e Mon Sep 17 00:00:00 2001 From: WenMing Date: Fri, 26 Jul 2019 08:37:23 +0800 Subject: [PATCH 5/9] fixed code style. --- lua/apisix/plugins/zipkin/codec.lua | 152 +++++++-------- lua/apisix/plugins/zipkin/random_sampler.lua | 12 +- lua/apisix/plugins/zipkin/reporter.lua | 194 +++++++++---------- 3 files changed, 179 insertions(+), 179 deletions(-) diff --git a/lua/apisix/plugins/zipkin/codec.lua b/lua/apisix/plugins/zipkin/codec.lua index 25e86f44a81d..7a083235f10a 100644 --- a/lua/apisix/plugins/zipkin/codec.lua +++ b/lua/apisix/plugins/zipkin/codec.lua @@ -3,104 +3,104 @@ local to_hex = require "resty.string".to_hex local new_span_context = require("opentracing.span_context").new local function hex_to_char(c) - return string.char(tonumber(c, 16)) + return string.char(tonumber(c, 16)) end local function from_hex(str) - if str ~= nil then -- allow nil to pass through - str = str:gsub("%x%x", hex_to_char) - end - return str + if str ~= nil then -- allow nil to pass through + str = str:gsub("%x%x", hex_to_char) + end + return str end local function new_extractor() - return function(headers) + return function(headers) -- X-B3-Sampled: if an upstream decided to sample this request, we do too. - local sample = headers["x-b3-sampled"] - if sample == "1" or sample == "true" then - sample = true - elseif sample == "0" or sample == "false" then - sample = false - elseif sample ~= nil then - core.log.warn("x-b3-sampled header invalid; ignoring.") - sample = nil - end + local sample = headers["x-b3-sampled"] + if sample == "1" or sample == "true" then + sample = true + elseif sample == "0" or sample == "false" then + sample = false + elseif sample ~= nil then + core.log.warn("x-b3-sampled header invalid; ignoring.") + sample = nil + end -- X-B3-Flags: if it equals '1' then it overrides sampling policy -- We still want to warn on invalid sample header, so do this after the above - local debug = headers["x-b3-flags"] - if debug == "1" then - sample = true - elseif debug ~= nil then - core.log.warn("x-b3-flags header invalid; ignoring.") - end + local debug = headers["x-b3-flags"] + if debug == "1" then + sample = true + elseif debug ~= nil then + core.log.warn("x-b3-flags header invalid; ignoring.") + end - local had_invalid_id = false + local had_invalid_id = false - local trace_id = headers["x-b3-traceid"] - -- Validate trace id - if trace_id and - ((#trace_id ~= 16 and #trace_id ~= 32) or trace_id:match("%X")) then - core.log.warn("x-b3-traceid header invalid; ignoring.") - had_invalid_id = true - end + local trace_id = headers["x-b3-traceid"] + -- Validate trace id + if trace_id and + ((#trace_id ~= 16 and #trace_id ~= 32) or trace_id:match("%X")) then + core.log.warn("x-b3-traceid header invalid; ignoring.") + had_invalid_id = true + end - local parent_span_id = headers["x-b3-parentspanid"] - -- Validate parent_span_id - if parent_span_id and - (#parent_span_id ~= 16 or parent_span_id:match("%X")) then - core.log.warn("x-b3-parentspanid header invalid; ignoring.") - had_invalid_id = true - end + local parent_span_id = headers["x-b3-parentspanid"] + -- Validate parent_span_id + if parent_span_id and + (#parent_span_id ~= 16 or parent_span_id:match("%X")) then + core.log.warn("x-b3-parentspanid header invalid; ignoring.") + had_invalid_id = true + end - local request_span_id = headers["x-b3-spanid"] - -- Validate request_span_id - if request_span_id and - (#request_span_id ~= 16 or request_span_id:match("%X")) then - core.log.warn("x-b3-spanid header invalid; ignoring.") - had_invalid_id = true - end + local request_span_id = headers["x-b3-spanid"] + -- Validate request_span_id + if request_span_id and + (#request_span_id ~= 16 or request_span_id:match("%X")) then + core.log.warn("x-b3-spanid header invalid; ignoring.") + had_invalid_id = true + end - if trace_id == nil or had_invalid_id then - return nil - end + if trace_id == nil or had_invalid_id then + return nil + end - -- Process jaegar baggage header - local baggage = {} - for k, v in pairs(headers) do - local baggage_key = k:match("^uberctx%-(.*)$") - if baggage_key then - baggage[baggage_key] = ngx.unescape_uri(v) - end - end + -- Process jaegar baggage header + local baggage = {} + for k, v in pairs(headers) do + local baggage_key = k:match("^uberctx%-(.*)$") + if baggage_key then + baggage[baggage_key] = ngx.unescape_uri(v) + end + end - trace_id = from_hex(trace_id) - parent_span_id = from_hex(parent_span_id) - request_span_id = from_hex(request_span_id) + trace_id = from_hex(trace_id) + parent_span_id = from_hex(parent_span_id) + request_span_id = from_hex(request_span_id) - return new_span_context(trace_id, request_span_id, parent_span_id, - sample, baggage) - end + return new_span_context(trace_id, request_span_id, parent_span_id, + sample, baggage) + end end local function new_injector() - return function(span_context, headers) - -- We want to remove headers if already present - headers["x-b3-traceid"] = to_hex(span_context.trace_id) - headers["x-b3-parentspanid"] = span_context.parent_id - and to_hex(span_context.parent_id) or nil - headers["x-b3-spanid"] = to_hex(span_context.span_id) - local flags = core.request.header(nil, "x-b3-flags") - headers["x-b3-flags"] = flags - headers["x-b3-sampled"] = (not flags) - for key, value in span_context:each_baggage_item() do - -- XXX: https://github.com/opentracing/specification/issues/117 - headers["uberctx-"..key] = ngx.escape_uri(value) - end - end + return function(span_context, headers) + -- We want to remove headers if already present + headers["x-b3-traceid"] = to_hex(span_context.trace_id) + headers["x-b3-parentspanid"] = span_context.parent_id + and to_hex(span_context.parent_id) or nil + headers["x-b3-spanid"] = to_hex(span_context.span_id) + local flags = core.request.header(nil, "x-b3-flags") + headers["x-b3-flags"] = flags + headers["x-b3-sampled"] = (not flags) + for key, value in span_context:each_baggage_item() do + -- XXX: https://github.com/opentracing/specification/issues/117 + headers["uberctx-"..key] = ngx.escape_uri(value) + end + end end return { - new_extractor = new_extractor, - new_injector = new_injector, + new_extractor = new_extractor, + new_injector = new_injector, } diff --git a/lua/apisix/plugins/zipkin/random_sampler.lua b/lua/apisix/plugins/zipkin/random_sampler.lua index bb0ece538a26..afd1bfe36e38 100644 --- a/lua/apisix/plugins/zipkin/random_sampler.lua +++ b/lua/apisix/plugins/zipkin/random_sampler.lua @@ -2,16 +2,16 @@ local _M = {} local mt = { __index = _M } function _M.new(conf) - local sample_ratio = conf.sample_ratio - assert(type(sample_ratio) == "number" and - sample_ratio >= 0 and sample_ratio <= 1, "invalid sample_ratio") - return setmetatable({ - sample_ratio = sample_ratio + local sample_ratio = conf.sample_ratio + assert(type(sample_ratio) == "number" and + sample_ratio >= 0 and sample_ratio <= 1, "invalid sample_ratio") + return setmetatable({ + sample_ratio = sample_ratio }, mt) end function _M.sample(self) - return math.random() < self.sample_ratio + return math.random() < self.sample_ratio end diff --git a/lua/apisix/plugins/zipkin/reporter.lua b/lua/apisix/plugins/zipkin/reporter.lua index 0f811a270ea7..e1416694e080 100644 --- a/lua/apisix/plugins/zipkin/reporter.lua +++ b/lua/apisix/plugins/zipkin/reporter.lua @@ -9,114 +9,114 @@ local mt = { __index = _M } local span_kind_map = { - client = "CLIENT", - server = "SERVER", - producer = "PRODUCER", - consumer = "CONSUMER", + client = "CLIENT", + server = "SERVER", + producer = "PRODUCER", + consumer = "CONSUMER", } function _M.new(conf) - local endpoint = conf.endpoint - assert(type(endpoint) == "string", "invalid http endpoint") - return setmetatable({ - endpoint = endpoint, - pending_spans = {}, - pending_spans_n = 0, - }, mt) + local endpoint = conf.endpoint + assert(type(endpoint) == "string", "invalid http endpoint") + return setmetatable({ + endpoint = endpoint, + pending_spans = {}, + pending_spans_n = 0, + }, mt) end function _M.report(self, span) - local span_context = span:context() - - local zipkin_tags = {} - for k, v in span:each_tag() do - -- Zipkin tag values should be strings - zipkin_tags[k] = tostring(v) - end - - local span_kind = zipkin_tags["span.kind"] - zipkin_tags["span.kind"] = nil - - local localEndpoint do - local serviceName = zipkin_tags["peer.service"] - if serviceName then - zipkin_tags["peer.service"] = nil - localEndpoint = { - serviceName = serviceName, - -- TODO: ip/port from ngx.var.server_name/ngx.var.server_port? - } - else - -- needs to be null, not the empty object - localEndpoint = cjson.null - end - end - - local remoteEndpoint do - local peer_port = span:get_tag "peer.port" -- get as number - if peer_port then - zipkin_tags["peer.port"] = nil - remoteEndpoint = { - ipv4 = zipkin_tags["peer.ipv4"], - -- ipv6 = zipkin_tags["peer.ipv6"], - port = peer_port, -- port is *not* optional - } - zipkin_tags["peer.ipv4"] = nil - zipkin_tags["peer.ipv6"] = nil - else - remoteEndpoint = cjson.null - end - end - - local zipkin_span = { - traceId = to_hex(span_context.trace_id), - name = span.name, - parentId = span_context.parent_id and - to_hex(span_context.parent_id) or nil, - id = to_hex(span_context.span_id), - kind = span_kind_map[span_kind], - timestamp = span.timestamp * 1000000, - duration = math.floor(span.duration * 1000000), -- zipkin wants integer - -- TODO: debug? - localEndpoint = localEndpoint, - remoteEndpoint = remoteEndpoint, - tags = zipkin_tags, - annotations = span.logs - } - - local i = self.pending_spans_n + 1 - self.pending_spans[i] = zipkin_span - self.pending_spans_n = i + local span_context = span:context() + + local zipkin_tags = {} + for k, v in span:each_tag() do + -- Zipkin tag values should be strings + zipkin_tags[k] = tostring(v) + end + + local span_kind = zipkin_tags["span.kind"] + zipkin_tags["span.kind"] = nil + + local localEndpoint do + local serviceName = zipkin_tags["peer.service"] + if serviceName then + zipkin_tags["peer.service"] = nil + localEndpoint = { + serviceName = serviceName, + -- TODO: ip/port from ngx.var.server_name/ngx.var.server_port? + } + else + -- needs to be null, not the empty object + localEndpoint = cjson.null + end + end + + local remoteEndpoint do + local peer_port = span:get_tag "peer.port" -- get as number + if peer_port then + zipkin_tags["peer.port"] = nil + remoteEndpoint = { + ipv4 = zipkin_tags["peer.ipv4"], + -- ipv6 = zipkin_tags["peer.ipv6"], + port = peer_port, -- port is *not* optional + } + zipkin_tags["peer.ipv4"] = nil + zipkin_tags["peer.ipv6"] = nil + else + remoteEndpoint = cjson.null + end + end + + local zipkin_span = { + traceId = to_hex(span_context.trace_id), + name = span.name, + parentId = span_context.parent_id and + to_hex(span_context.parent_id) or nil, + id = to_hex(span_context.span_id), + kind = span_kind_map[span_kind], + timestamp = span.timestamp * 1000000, + duration = math.floor(span.duration * 1000000), -- zipkin wants integer + -- TODO: debug? + localEndpoint = localEndpoint, + remoteEndpoint = remoteEndpoint, + tags = zipkin_tags, + annotations = span.logs + } + + local i = self.pending_spans_n + 1 + self.pending_spans[i] = zipkin_span + self.pending_spans_n = i end function _M.flush(self) - if self.pending_spans_n == 0 then - - return true - end - - local pending_spans = cjson.encode(self.pending_spans) - self.pending_spans = {} - self.pending_spans_n = 0 - - local httpc = resty_http.new() - local res, err = httpc:request_uri(self.endpoint, { - method = "POST", - headers = { - ["content-type"] = "application/json", - }, - body = pending_spans, - }) - - -- TODO: on failure, retry? - if not res then - return nil, "failed to request: " .. err - elseif res.status < 200 or res.status >= 300 then - return nil, "failed: " .. res.status .. " " .. res.reason - end - - return true + if self.pending_spans_n == 0 then + + return true + end + + local pending_spans = cjson.encode(self.pending_spans) + self.pending_spans = {} + self.pending_spans_n = 0 + + local httpc = resty_http.new() + local res, err = httpc:request_uri(self.endpoint, { + method = "POST", + headers = { + ["content-type"] = "application/json", + }, + body = pending_spans, + }) + + -- TODO: on failure, retry? + if not res then + return nil, "failed to request: " .. err + elseif res.status < 200 or res.status >= 300 then + return nil, "failed: " .. res.status .. " " .. res.reason + end + + return true end From 54a55b1301149cd8d4eda9f6c08f0cb822a943ea Mon Sep 17 00:00:00 2001 From: WenMing Date: Fri, 26 Jul 2019 08:38:05 +0800 Subject: [PATCH 6/9] fixed code style. --- lua/apisix/plugins/zipkin.lua | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/lua/apisix/plugins/zipkin.lua b/lua/apisix/plugins/zipkin.lua index 534da6126418..cd55c8434179 100644 --- a/lua/apisix/plugins/zipkin.lua +++ b/lua/apisix/plugins/zipkin.lua @@ -44,20 +44,20 @@ end local function create_tracer(conf) local tracer = new_tracer(new_reporter(conf), new_random_sampler(conf)) - tracer:register_injector("http_headers", zipkin_codec.new_injector()) - tracer:register_extractor("http_headers", zipkin_codec.new_extractor()) - return tracer + tracer:register_injector("http_headers", zipkin_codec.new_injector()) + tracer:register_extractor("http_headers", zipkin_codec.new_extractor()) + return tracer end local function report2endpoint(premature, reporter) - if premature then - return - end - - local ok, err = reporter:flush() - if not ok then - core.log.error("reporter flush ", err) - return + if premature then + return + end + + local ok, err = reporter:flush() + if not ok then + core.log.error("reporter flush ", err) + return end core.log.info("report2endpoint ok") @@ -162,11 +162,11 @@ function _M.log(conf, ctx) opentracing.proxy_span:finish(log_end_time) opentracing.request_span:finish(log_end_time) - local reporter = opentracing.tracer.reporter - local ok, err = ngx.timer.at(0, report2endpoint, reporter) - if not ok then - core.log.error("failed to create timer: ", err) - end + local reporter = opentracing.tracer.reporter + local ok, err = ngx.timer.at(0, report2endpoint, reporter) + if not ok then + core.log.error("failed to create timer: ", err) + end end return _M From 446938f1963d4febc5c0f2db0b8f550eec4d5629 Mon Sep 17 00:00:00 2001 From: WenMing Date: Fri, 26 Jul 2019 12:20:19 +0800 Subject: [PATCH 7/9] fixed --- doc/images/plugin/zipkin-1.jpg | Bin 0 -> 272972 bytes doc/images/plugin/zipkin-2.jpg | Bin 0 -> 168128 bytes doc/plugins/zipkin.md | 7 +++++-- lua/apisix/core/response.lua | 1 + lua/apisix/plugins/zipkin.lua | 10 ++-------- t/plugin/zipkin.t | 6 ++++-- 6 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 doc/images/plugin/zipkin-1.jpg create mode 100644 doc/images/plugin/zipkin-2.jpg diff --git a/doc/images/plugin/zipkin-1.jpg b/doc/images/plugin/zipkin-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..935146bacd3394e53e633853669c12ebe1b4828d GIT binary patch literal 272972 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
F9u+#!zaIEODj0eQyr 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 literal 0 HcmV?d00001 diff --git a/doc/images/plugin/zipkin-2.jpg b/doc/images/plugin/zipkin-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..291cd4b9b05acb0c73d4f3f62dd42e89bf0eea1f GIT binary patch literal 168128 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 MEbJFP20@9{mUVmBl>g=m$ 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 literal 0 HcmV?d00001 diff --git a/doc/plugins/zipkin.md b/doc/plugins/zipkin.md index bcfd4d730b49..e3b54685d673 100644 --- a/doc/plugins/zipkin.md +++ b/doc/plugins/zipkin.md @@ -8,7 +8,7 @@ ## Name -`Zipkin` is a OpenTracing plugin. +[Zipkin](https://github.com/openzipkin/zipkin) is a OpenTracing plugin. It's also works with `Apache SkyWalking`, which is support Zipkin v1/v2 format. @@ -66,6 +66,10 @@ Then you can use a browser to access the webUI of Zipkin: http://127.0.0.1:9411/zipkin ``` +![](../../doc/images/plugin/zipkin-1.png) + +![](../../doc/images/plugin/zipkin-2.png) + ## Disable Plugin When you want to disable the zipkin plugin, it is very simple, @@ -77,7 +81,6 @@ $ curl http://127.0.0.1:2379/v2/keys/apisix/routes/1 -X PUT -d value=' { "methods": ["GET"], "uri": "/index.html", - "id": 1, "plugins": { }, "upstream": { diff --git a/lua/apisix/core/response.lua b/lua/apisix/core/response.lua index d17f385af78f..ed61ea39c91c 100644 --- a/lua/apisix/core/response.lua +++ b/lua/apisix/core/response.lua @@ -80,6 +80,7 @@ end function _M.get_upstream_status(ctx) + -- $upstream_status maybe including mutiple status, only need the last one return tonumber(str_sub(ctx.var.upstream_status or "", -3)) end diff --git a/lua/apisix/plugins/zipkin.lua b/lua/apisix/plugins/zipkin.lua index cd55c8434179..ca19a79c16c5 100644 --- a/lua/apisix/plugins/zipkin.lua +++ b/lua/apisix/plugins/zipkin.lua @@ -32,13 +32,7 @@ local _M = { function _M.check_schema(conf) - local ok, err = core.schema.check(schema, conf) - - if not ok then - return false, err - end - - return true + return core.schema.check(schema, conf) end @@ -66,7 +60,7 @@ end function _M.rewrite(conf, ctx) local tracer = core.lrucache.plugin_ctx(plugin_name, ctx, - create_tracer, conf) + create_tracer, conf) ctx.opentracing_sample = tracer.sampler:sample() if not ctx.opentracing_sample then diff --git a/t/plugin/zipkin.t b/t/plugin/zipkin.t index a07484367eef..028dfe347312 100644 --- a/t/plugin/zipkin.t +++ b/t/plugin/zipkin.t @@ -163,8 +163,10 @@ passed GET /opentracing --- response_body opentracing ---- error_log -report2endpoint ok +--- grep_error_log eval +qr/\[info\].*/ +--- grep_error_log_out eval +qr{report2endpoint ok} From 964723e9360c94eb40bb8864126e18a90403e4a5 Mon Sep 17 00:00:00 2001 From: WenMing Date: Fri, 26 Jul 2019 15:59:56 +0800 Subject: [PATCH 8/9] not support default value yet. --- doc/plugins/zipkin.md | 2 +- lua/apisix/plugins/zipkin.lua | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/doc/plugins/zipkin.md b/doc/plugins/zipkin.md index e3b54685d673..a4b7e31362a2 100644 --- a/doc/plugins/zipkin.md +++ b/doc/plugins/zipkin.md @@ -16,7 +16,7 @@ It's also works with `Apache SkyWalking`, which is support Zipkin v1/v2 format. * `endpoint`: the http endpoint of Ziplin, for example: `http://127.0.0.1:9411/api/v2/spans`. -* `sample_ratio`: the ratio of sample, the default value is 0.001, the minimum is 0.00001, the maximum is 1. +* `sample_ratio`: the ratio of sample, the minimum is 0.00001, the maximum is 1. ## How To Enable diff --git a/lua/apisix/plugins/zipkin.lua b/lua/apisix/plugins/zipkin.lua index ca19a79c16c5..8e8f706e15a4 100644 --- a/lua/apisix/plugins/zipkin.lua +++ b/lua/apisix/plugins/zipkin.lua @@ -16,10 +16,9 @@ local schema = { type = "object", properties = { endpoint = {type = "string"}, - sample_ratio = {type = "number", - default = 0.001, minimum = 0.00001, maximum = 1} + sample_ratio = {type = "number", minimum = 0.00001, maximum = 1} }, - required = {"endpoint"} + required = {"endpoint", "sample_ratio"} } From 378c24aed141036c4cc20329655551437dfb7722 Mon Sep 17 00:00:00 2001 From: WenMing Date: Fri, 26 Jul 2019 17:05:48 +0800 Subject: [PATCH 9/9] fixed --- t/plugin/zipkin.t | 1 + 1 file changed, 1 insertion(+) diff --git a/t/plugin/zipkin.t b/t/plugin/zipkin.t index 028dfe347312..5c4c67c7842f 100644 --- a/t/plugin/zipkin.t +++ b/t/plugin/zipkin.t @@ -49,6 +49,7 @@ GET /t done --- no_error_log [error] +--- SKIP