-
Notifications
You must be signed in to change notification settings - Fork 8
/
schema.lua
122 lines (108 loc) · 2.75 KB
/
schema.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
local metrics = {
["http_requests_total"] = true,
["http_request_duration_ms"] = true,
["http_request_size_bytes"] = true,
["http_response_size_bytes"] = true,
["http_upstream_duration_ms"] = true,
["http_kong_duration_ms"] = true,
["http_connections"] = true,
}
local stat_types = {
["gauge"] = true,
["counter"] = true,
["histogram"] = true,
}
local stat_labels = {
["api"] = true,
["state"] = true,
["status"] = true,
["user"] = true,
}
local default_metrics = {
{
name = "http_requests_total",
description = "Number of HTTP requests",
stat_type = "counter",
labels = {"api", "status", "user"},
},
{
name = "http_request_duration_ms",
description = "HTTP request latency",
stat_type = "histogram",
labels = {"api"},
-- Default set of latency buckets, 1ms to 10s:
buckets = {1,5,10,100,1000,10000,100000},
},
{
name = "http_request_size_bytes",
description = "Size of HTTP responses",
stat_type = "histogram",
labels = {"api"},
buckets = {10,100,1000,10000,100000,1000000},
},
{
name = "http_response_size_bytes",
stat_type = "histogram",
labels = {"api"},
buckets = {10,100,1000,10000,100000,1000000},
},
{
name = "http_upstream_duration_ms",
stat_type = "histogram",
labels = {"api"},
buckets = {1,5,10,100,1000,10000,100000},
},
{
name = "http_upstream_duration_ms",
stat_type = "gauge",
labels = {"api"},
},
{
name = "http_kong_duration_ms",
stat_type = "histogram",
labels = {"api"},
buckets = {1,5,10,100,1000,10000,100000},
},
{
name = "http_connections",
description = "Number of HTTP connections",
stat_type = "gauge",
labels = {"state"},
}
}
local function check_schema(value)
for _, entry in ipairs(value) do
if not entry.name or not entry.stat_type then
return false, "name and stat_type must be defined for all stats"
end
if not metrics[entry.name] then
return false, "unrecognized metric name: " .. entry.name
end
if not stat_types[entry.stat_type] then
return false, "unrecognized stat_type: " .. entry.stat_type
end
for _,label in pairs(entry.labels) do
if not stat_labels[label] then
return false, "unrecognized stat_label: " .. label
end
end
end
return true
end
return {
fields = {
metrics = {
type = "array",
default = default_metrics,
func = check_schema,
},
dict_name = {
type = "string",
default = "kong_cache",
},
prefix = {
type = "string",
default = "kong",
},
}
}