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

154 lines
5.2 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 metrics 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 },
},
}, },
},
},
},
},
},
},
},
}