Skip to content

Commit

Permalink
fix(prometheus): add a toggle switch for wasm metrics export
Browse files Browse the repository at this point in the history
  • Loading branch information
flrgh committed Dec 3, 2024
1 parent 0d59bd0 commit 461e25a
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 5 deletions.
7 changes: 7 additions & 0 deletions kong/clustering/compat/removed_fields.lua
Original file line number Diff line number Diff line change
Expand Up @@ -228,4 +228,11 @@ return {
"queue.concurrency_limit",
},
},

-- Any dataplane older than 3.9.0
[3009000000] = {
prometheus = {
"wasm_metrics",
},
},
}
14 changes: 13 additions & 1 deletion kong/plugins/prometheus/exporter.lua
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,19 @@ end


local function configure(configs)
IS_PROMETHEUS_ENABLED = configs ~= nil
IS_PROMETHEUS_ENABLED = false
wasm.set_enabled(false)

if configs ~= nil then
IS_PROMETHEUS_ENABLED = true

for i = 1, #configs do
if configs[i].wasm_metrics then
wasm.set_enabled(true)
break
end
end
end
end


Expand Down
1 change: 1 addition & 0 deletions kong/plugins/prometheus/schema.lua
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ return {
{ latency_metrics = { description = "A boolean value that determines if latency metrics should be collected. If enabled, `kong_latency_ms`, `upstream_latency_ms` and `request_latency_ms` metrics will be exported.", type = "boolean", default = false }, },
{ bandwidth_metrics = { description = "A boolean value that determines if bandwidth metrics should be collected. If enabled, `bandwidth_bytes` and `stream_sessions_total` metrics will be exported.", type = "boolean", default = false }, },
{ upstream_health_metrics = { description = "A boolean value that determines if upstream metrics should be collected. If enabled, `upstream_target_health` metric will be exported.", type = "boolean", default = false }, },
{ wasm_metrics = { description = "A boolean value that determines if Wasm metrics should be collected.", type = "boolean", default = false }, },
},
custom_validator = validate_shared_dict,
}, },
Expand Down
7 changes: 6 additions & 1 deletion kong/plugins/prometheus/wasmx.lua
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ local _M = {}
local FLUSH_EVERY = 100
local GET_METRIC_OPTS = { prefix = false }

local export_enabled = false

local metrics_data_buf = buf_new()
local labels_serialization_buf = buf_new()
Expand Down Expand Up @@ -181,7 +182,7 @@ end


_M.metrics_data = function()
if not wasm.enabled() then
if not export_enabled or not wasm.enabled() then
return
end

Expand Down Expand Up @@ -231,4 +232,8 @@ _M.metrics_data = function()
end


function _M.set_enabled(enabled)
export_enabled = enabled
end

return _M
28 changes: 26 additions & 2 deletions spec/02-integration/09-hybrid_mode/09-config-compat_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1013,13 +1013,37 @@ describe("CP/DP config compat transformations #" .. strategy, function()
}
-- ]]

finally(function()
admin.plugins:remove({ id = prometheus.id })
end)

local expected_prometheus_prior_38 = cycle_aware_deep_copy(prometheus)
expected_prometheus_prior_38.config.ai_metrics = nil
expected_prometheus_prior_38.config.wasm_metrics = nil

do_assert(uuid(), "3.7.0", expected_prometheus_prior_38)
end)

-- cleanup
admin.plugins:remove({ id = prometheus.id })
it("[prometheus] remove wasm_metrics property for versions below 3.9", function()
-- [[ 3.9.x ]] --
local prometheus = admin.plugins:insert {
name = "prometheus",
enabled = true,
config = {
wasm_metrics = true, -- becomes nil
},
}
-- ]]

finally(function()
admin.plugins:remove({ id = prometheus.id })
end)


local expected_prometheus_prior_39 = cycle_aware_deep_copy(prometheus)
expected_prometheus_prior_39.config.wasm_metrics = nil

do_assert(uuid(), "3.8.0", expected_prometheus_prior_39)
end)
end)

Expand Down
5 changes: 4 additions & 1 deletion spec/03-plugins/26-prometheus/09-wasmx_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,10 @@ for _, strategy in helpers.each_strategy() do
add_filter_to_service(bp, "tests", service)
add_filter_to_service(bp, "tests", service2)

bp.plugins:insert({ name = "prometheus" })
assert(bp.plugins:insert({
name = "prometheus",
config = { wasm_metrics = true },
}))

assert(helpers.start_kong({
nginx_conf = "spec/fixtures/custom_nginx.template",
Expand Down

0 comments on commit 461e25a

Please sign in to comment.