118 lines
5.0 KiB
Lua
118 lines
5.0 KiB
Lua
local typedefs = require "kong.db.schema.typedefs"
|
|
local Schema = require "kong.db.schema"
|
|
|
|
local function custom_validator(attributes)
|
|
for _, v in pairs(attributes) do
|
|
local vtype = type(v)
|
|
if vtype ~= "string" and
|
|
vtype ~= "number" and
|
|
vtype ~= "boolean"
|
|
then
|
|
return nil, "invalid type of value: " .. vtype
|
|
end
|
|
|
|
if vtype == "string" and #v == 0 then
|
|
return nil, "required field missing"
|
|
end
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
local resource_attributes = Schema.define {
|
|
type = "map",
|
|
description = "Attributes to add to the OpenTelemetry resource object, following the spec for Semantic Attributes. \nThe following attributes are automatically added:\n- `service.name`: The name of the service (default: `kong`).\n- `service.version`: The version of Kong Gateway.\n- `service.instance.id`: The node ID of Kong Gateway.\n\nYou can use this property to override default attribute values. For example, to override the default for `service.name`, you can specify `{ \"service.name\": \"my-service\" }`.",
|
|
keys = { type = "string", required = true },
|
|
-- TODO: support [string, number, boolean]
|
|
values = { type = "string", required = true },
|
|
custom_validator = custom_validator,
|
|
}
|
|
|
|
return {
|
|
name = "opentelemetry",
|
|
fields = {
|
|
{ protocols = typedefs.protocols_http }, -- TODO: support stream mode
|
|
{ config = {
|
|
type = "record",
|
|
fields = {
|
|
{ traces_endpoint = typedefs.url { referenceable = true } }, -- OTLP/HTTP
|
|
{ logs_endpoint = typedefs.url { referenceable = true } },
|
|
{ headers = { description = "The custom headers to be added in the HTTP request sent to the OTLP server. This setting is useful for adding the authentication headers (token) for the APM backend.", type = "map",
|
|
keys = typedefs.header_name,
|
|
values = {
|
|
type = "string",
|
|
referenceable = true,
|
|
},
|
|
} },
|
|
{ resource_attributes = resource_attributes },
|
|
{ queue = typedefs.queue {
|
|
default = {
|
|
max_batch_size = 200,
|
|
},
|
|
} },
|
|
{ batch_span_count = {
|
|
description = "The number of spans to be sent in a single batch.",
|
|
type = "integer",
|
|
deprecation = {
|
|
message = "opentelemetry: config.batch_span_count is deprecated, please use config.queue.max_batch_size instead",
|
|
removal_in_version = "4.0",
|
|
old_default = 200 }, }, },
|
|
{ batch_flush_delay = {
|
|
description = "The delay, in seconds, between two consecutive batches.",
|
|
type = "integer",
|
|
deprecation = {
|
|
message = "opentelemetry: config.batch_flush_delay is deprecated, please use config.queue.max_coalescing_delay instead",
|
|
removal_in_version = "4.0",
|
|
old_default = 3, }, }, },
|
|
{ connect_timeout = typedefs.timeout { default = 1000 } },
|
|
{ send_timeout = typedefs.timeout { default = 5000 } },
|
|
{ read_timeout = typedefs.timeout { default = 5000 } },
|
|
{ http_response_header_for_traceid = { description = "Specifies a custom header for the `trace_id`. If set, the plugin sets the corresponding header in the response.",
|
|
type = "string",
|
|
default = nil }},
|
|
{ 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",
|
|
deprecation = {
|
|
message = "opentelemetry: config.header_type is deprecated, please use config.propagation options instead",
|
|
removal_in_version = "4.0",
|
|
old_default = "preserve" },
|
|
required = false,
|
|
default = "preserve",
|
|
one_of = { "preserve", "ignore", "b3", "b3-single", "w3c", "jaeger", "ot", "aws", "gcp", "datadog", "instana" } } },
|
|
{ sampling_rate = {
|
|
description = "Tracing sampling rate for configuring the probability-based sampler. When set, this value supersedes the global `tracing_sampling_rate` setting from kong.conf.",
|
|
type = "number",
|
|
between = {0, 1},
|
|
required = false,
|
|
default = nil,
|
|
} },
|
|
{ propagation = typedefs.propagation {
|
|
default = {
|
|
default_format = "w3c",
|
|
},
|
|
} },
|
|
},
|
|
entity_checks = {
|
|
{ at_least_one_of = {
|
|
"traces_endpoint",
|
|
"logs_endpoint",
|
|
} },
|
|
},
|
|
shorthand_fields = {
|
|
-- TODO: deprecated fields, to be removed in Kong 4.0
|
|
{
|
|
endpoint = typedefs.url {
|
|
referenceable = true,
|
|
deprecation = {
|
|
message = "OpenTelemetry: config.endpoint is deprecated, please use config.traces_endpoint instead",
|
|
removal_in_version = "4.0", },
|
|
func = function(value)
|
|
return { traces_endpoint = value }
|
|
end,
|
|
},
|
|
},
|
|
}
|
|
}, },
|
|
},
|
|
}
|