项目文件夹

文件
2026-07-13 12:32:21 +08:00

154 行
5.2 KiB
Lua

local typedefs = require "kong.db.schema.typedefs"
local STAT_NAMES = {
"kong_latency",
"latency",
"request_count",
"request_size",
"response_size",
"upstream_latency",
}
local STAT_TYPES = {
"counter",
"gauge",
"histogram",
"meter",
"set",
"timer",
"distribution",
}
local CONSUMER_IDENTIFIERS = {
"consumer_id",
"custom_id",
"username",
}
local DEFAULT_METRICS = {
{
name = "request_count",
stat_type = "counter",
sample_rate = 1,
tags = { "app:kong" },
consumer_identifier = "custom_id"
},
{
name = "latency",
stat_type = "timer",
tags = { "app:kong" },
consumer_identifier = "custom_id"
},
{
name = "request_size",
stat_type = "timer",
tags = { "app:kong" },
consumer_identifier = "custom_id"
},
{
name = "response_size",
stat_type = "timer",
tags = { "app:kong" },
consumer_identifier = "custom_id"
},
{
name = "upstream_latency",
stat_type = "timer",
tags = { "app:kong" },
consumer_identifier = "custom_id"
},
{
name = "kong_latency",
stat_type = "timer",
tags = { "app:kong" },
consumer_identifier = "custom_id"
},
}
return {
name = "datadog",
fields = {
{ protocols = typedefs.protocols },
{
config = {
type = "record",
fields = {
{ host = typedefs.host({ referenceable = true, default = "localhost" }), },
{ port = typedefs.port({ default = 8125 }), },
{ prefix = { description = "String to be attached as a prefix to a metric's name.", type = "string",
default = "kong" }, },
{
service_name_tag = { description = "String to be attached as the name of the service.", type = "string",
default = "name" }, },
{
status_tag = { description = "String to be attached as the tag of the HTTP status.", type = "string",
default = "status" }, },
{
consumer_tag = { description = "String to be attached as tag of the consumer.", type = "string",
default = "consumer" }, },
{
retry_count = {
description = "Number of times to retry when sending data to the upstream server.",
type = "integer",
deprecation = {
message = "datadog: config.retry_count no longer works, please use config.queue.max_retry_time instead",
removal_in_version = "4.0",
old_default = 10 }, }, },
{
queue_size = {
description = "Maximum number of log entries to be sent on each message to the upstream server.",
type = "integer",
deprecation = {
message = "datadog: config.queue_size is deprecated, please use config.queue.max_batch_size instead",
removal_in_version = "4.0",
old_default = 1 }, }, },
{
flush_timeout = {
description =
"Optional time in seconds. If `queue_size` > 1, this is the max idle time before sending a log with less than `queue_size` records.",
type = "number",
deprecation = {
message = "datadog: config.flush_timeout is deprecated, please use config.queue.max_coalescing_delay instead",
removal_in_version = "4.0",
old_default = 2 }, }, },
{ queue = typedefs.queue },
{
metrics = {
description =
"List of metrics to be logged.",
type = "array",
required = true,
default = DEFAULT_METRICS,
elements = {
type = "record",
fields = {
{ name = { description = "Datadog metric’s name", type = "string", required = true,
one_of = STAT_NAMES }, },
{
stat_type = { description = "Determines what sort of event the metric represents", type = "string",
required = true, one_of = STAT_TYPES }, },
{ tags = { description = "List of tags", type = "array",
elements = { type = "string", match = "^.*[^:]$" }, }, },
{ sample_rate = { description = "Sampling rate", type = "number", between = { 0, 1 }, }, },
{ consumer_identifier = { description = "Authenticated user detail", type = "string",
one_of = CONSUMER_IDENTIFIERS }, },
},
entity_checks = {
{
conditional = {
if_field = "stat_type",
if_match = { one_of = { "counter", "gauge" }, },
then_field = "sample_rate",
then_match = { required = true },
},
}, },
},
},
},
},
},
},
},
}