154 lines
5.2 KiB
Lua
154 lines
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 },
|
||
},
|
||
}, },
|
||
},
|
||
},
|
||
},
|
||
},
|
||
},
|
||
},
|
||
},
|
||
}
|