Skip to content

Commit c361663

Browse files
committed
Add configuration options for disabling Prometheus endpoints and metrics
1 parent 2f382d9 commit c361663

6 files changed

Lines changed: 323 additions & 16 deletions

File tree

deps/rabbitmq_prometheus/priv/schema/rabbitmq_prometheus.schema

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,23 @@ end}.
148148
%% Authentication options ========================================================
149149
{mapping, "prometheus.authentication.enabled", "rabbitmq_prometheus.authentication.enabled",
150150
[{datatype, {enum, [true, false]}}]}.
151+
152+
%% Endpoint disable options ========================================================
153+
{mapping, "prometheus.disable_memory_breakdown_endpoint", "rabbitmq_prometheus.disable_memory_breakdown_endpoint",
154+
[{datatype, {enum, [true, false]}}, {default, false}]}.
155+
156+
{mapping, "prometheus.disable_per_object_endpoint", "rabbitmq_prometheus.disable_per_object_endpoint",
157+
[{datatype, {enum, [true, false]}}, {default, true}]}.
158+
159+
{mapping, "prometheus.disable_detailed_endpoint", "rabbitmq_prometheus.disable_detailed_endpoint",
160+
[{datatype, {enum, [true, false]}}, {default, false}]}.
161+
162+
%% Metric blocklist options ========================================================
163+
{mapping, "prometheus.disabled_metrics.$metric", "rabbitmq_prometheus.disabled_metrics",
164+
[{datatype, atom}]}.
165+
166+
{translation, "rabbitmq_prometheus.disabled_metrics",
167+
fun(Conf) ->
168+
Settings = cuttlefish_variable:filter_by_prefix("prometheus.disabled_metrics", Conf),
169+
[V || {_, V} <- Settings]
170+
end}.

deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,7 @@ add_metric_family({Name, Type, Help, Metrics}, Callback) ->
472472
Callback(create_mf(MN, Help, Type, Metrics)).
473473

474474
mf(Callback, Prefix, Contents, Data) ->
475+
DisabledMetrics = normalize_disabled_metrics(application:get_env(rabbitmq_prometheus, disabled_metrics, [])),
475476
_ = [begin
476477
Fun = case Conversion of
477478
undefined ->
@@ -488,7 +489,7 @@ mf(Callback, Prefix, Contents, Data) ->
488489
{Type, Fun, Data}
489490
)
490491
)
491-
end || {Index, Conversion, Name, Type, Help} <- Contents],
492+
end || {Index, Conversion, Name, Type, Help} <- Contents, not lists:member(Name, DisabledMetrics)],
492493
[begin
493494
Fun = case Conversion of
494495
undefined ->
@@ -505,7 +506,18 @@ mf(Callback, Prefix, Contents, Data) ->
505506
{Type, Fun, Data}
506507
)
507508
)
508-
end || {Index, Conversion, Name, Type, Help, Key} <- Contents].
509+
end || {Index, Conversion, Name, Type, Help, Key} <- Contents, not lists:member(Name, DisabledMetrics)].
510+
511+
normalize_disabled_metrics(Metrics) ->
512+
[normalize_metric_name(M) || M <- Metrics].
513+
514+
normalize_metric_name(Metric) when is_atom(Metric) ->
515+
case atom_to_list(Metric) of
516+
"rabbitmq_detailed_" ++ Rest -> list_to_atom(Rest);
517+
"rabbitmq_cluster_" ++ Rest -> list_to_atom(Rest);
518+
"rabbitmq_" ++ Rest -> list_to_atom(Rest);
519+
_ -> Metric
520+
end.
509521

510522
mf_totals(Callback, Name, Type, Help, Size) ->
511523
Callback(

deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,27 @@ build_dispatcher() ->
3535
true -> PerObjectCollectors
3636
end
3737
),
38-
prometheus_registry:register_collectors('per-object',
39-
CoreCollectors ++ PerObjectCollectors),
40-
prometheus_registry:register_collectors('detailed', [
41-
prometheus_rabbitmq_core_metrics_collector,
42-
prometheus_rabbitmq_raft_metrics_collector
43-
]),
44-
prometheus_registry:register_collectors('memory-breakdown', [
45-
prometheus_rabbitmq_core_metrics_collector
46-
]),
38+
case application:get_env(rabbitmq_prometheus, disable_per_object_endpoint, false) of
39+
true -> ok;
40+
false ->
41+
prometheus_registry:register_collectors('per-object',
42+
CoreCollectors ++ PerObjectCollectors)
43+
end,
44+
case application:get_env(rabbitmq_prometheus, disable_detailed_endpoint, false) of
45+
true -> ok;
46+
false ->
47+
prometheus_registry:register_collectors('detailed', [
48+
prometheus_rabbitmq_core_metrics_collector,
49+
prometheus_rabbitmq_raft_metrics_collector
50+
])
51+
end,
52+
case application:get_env(rabbitmq_prometheus, disable_memory_breakdown_endpoint, false) of
53+
true -> ok;
54+
false ->
55+
prometheus_registry:register_collectors('memory-breakdown', [
56+
prometheus_rabbitmq_core_metrics_collector
57+
])
58+
end,
4759
rabbit_prometheus_handler:setup(),
4860
cowboy_router:compile([{'_', dispatcher()}]).
4961

deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,18 @@ is_authorized(ReqData, Context) ->
4444

4545
setup() ->
4646
setup_metrics(telemetry_registry()),
47-
setup_metrics('per-object'),
48-
setup_metrics('memory-breakdown'),
49-
setup_metrics('detailed').
47+
case application:get_env(rabbitmq_prometheus, disable_per_object_endpoint, false) of
48+
true -> ok;
49+
false -> setup_metrics('per-object')
50+
end,
51+
case application:get_env(rabbitmq_prometheus, disable_memory_breakdown_endpoint, false) of
52+
true -> ok;
53+
false -> setup_metrics('memory-breakdown')
54+
end,
55+
case application:get_env(rabbitmq_prometheus, disable_detailed_endpoint, false) of
56+
true -> ok;
57+
false -> setup_metrics('detailed')
58+
end.
5059

5160
setup_metrics(Registry) ->
5261
ScrapeDuration = [{name, ?SCRAPE_DURATION},

0 commit comments

Comments
 (0)