Files
2026-07-13 12:32:21 +08:00

86 lines
4.8 KiB
Lua

local typedefs = require "kong.db.schema.typedefs"
local Schema = require "kong.db.schema"
local PROTECTED_TAGS = {
"error",
"http.method",
"http.path",
"http.status_code",
"kong.balancer.state",
"kong.balancer.try",
"kong.consumer",
"kong.credential",
"kong.node.id",
"kong.route",
"kong.service",
"lc",
"peer.hostname",
}
local static_tag = Schema.define {
type = "record",
fields = {
{ name = { type = "string", required = true, not_one_of = PROTECTED_TAGS } },
{ value = { type = "string", required = true } },
},
}
local validate_static_tags = function(tags)
if type(tags) ~= "table" then
return true
end
local found = {}
for i = 1, #tags do
local name = tags[i].name
if found[name] then
return nil, "repeated tags are not allowed: " .. name
end
found[name] = true
end
return true
end
return {
name = "zipkin",
fields = {
{ protocols = typedefs.protocols },
{ config = {
type = "record",
fields = {
{ local_service_name = { description = "The name of the service as displayed in Zipkin.", type = "string", required = true, default = "kong" } },
{ http_endpoint = typedefs.url },
{ sample_ratio = { description = "How often to sample requests that do not contain trace IDs. Set to `0` to turn sampling off, or to `1` to sample **all** requests. ", type = "number",
default = 0.001,
between = { 0, 1 } } },
{ default_service_name = { description = "Set a default service name to override `unknown-service-name` in the Zipkin spans.", type = "string", default = nil } },
{ include_credential = { description = "Specify whether the credential of the currently authenticated consumer should be included in metadata sent to the Zipkin server.", type = "boolean", required = true, default = true } },
{ traceid_byte_count = { description = "The length in bytes of each request's Trace ID.", type = "integer", required = true, default = 16, one_of = { 8, 16 } } },
{ header_type = { description = "All HTTP requests going through the plugin are tagged with a tracing HTTP request. This property codifies what kind of tracing header the plugin expects on incoming requests", type = "string", required = true, default = "preserve",
one_of = { "preserve", "ignore", "b3", "b3-single", "w3c", "jaeger", "ot", "aws", "datadog", "gcp", "instana" },
deprecation = { message = "zipkin: config.header_type is deprecated, please use config.propagation options instead", removal_in_version = "4.0", old_default = "preserve" }
} },
{ default_header_type = { description = "Allows specifying the type of header to be added to requests with no pre-existing tracing headers and when `config.header_type` is set to `\"preserve\"`. When `header_type` is set to any other value, `default_header_type` is ignored.", type = "string", required = true, default = "b3",
one_of = { "b3", "b3-single", "w3c", "jaeger", "ot", "aws", "datadog", "gcp", "instana" },
deprecation = { message = "zipkin: config.default_header_type is deprecated, please use config.propagation.default_format instead", removal_in_version = "4.0", old_default = "b3" }
} },
{ tags_header = { description = "The Zipkin plugin will add extra headers to the tags associated with any HTTP requests that come with a header named as configured by this property.", type = "string", required = true, default = "Zipkin-Tags" } },
{ static_tags = { description = "The tags specified on this property will be added to the generated request traces.", type = "array", elements = static_tag,
custom_validator = validate_static_tags } },
{ http_span_name = { description = "Specify whether to include the HTTP path in the span name.", type = "string", required = true, default = "method", one_of = { "method", "method_path" } } },
{ connect_timeout = typedefs.timeout { default = 2000 } },
{ send_timeout = typedefs.timeout { default = 5000 } },
{ read_timeout = typedefs.timeout { default = 5000 } },
{ http_response_header_for_traceid = { type = "string", default = nil }},
{ phase_duration_flavor = { description = "Specify whether to include the duration of each phase as an annotation or a tag.", type = "string", required = true, default = "annotations",
one_of = { "annotations", "tags" } } },
{ queue = typedefs.queue },
{ propagation = typedefs.propagation {
default = {
default_format = "b3",
},
} },
},
}, },
},
}