summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Lebedeff <binarin@binarin.info>2021-10-18 16:52:37 +0200
committerAlexey Lebedeff <binarin@binarin.info>2021-11-09 13:04:39 +0100
commit8598c5157917a7763082fb6341421deac37ece7c (patch)
tree865fb00fab270b9c94b7dac6769e6810456491b3
parente721ab291f2c1ec2a348d917ff4913cf8b1dc7c6 (diff)
downloadrabbitmq-server-git-prometheus-label-pre-render-optimization.tar.gz
Pre-render prometheus labelsprometheus-label-pre-render-optimization
This makes per-object metrics twice as fast. Depends on https://github.com/deadtrickster/prometheus.erl/pull/137
-rw-r--r--deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl37
-rw-r--r--rabbitmq-components.mk2
-rw-r--r--workspace_helpers.bzl8
3 files changed, 29 insertions, 18 deletions
diff --git a/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl b/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl
index e663d1a374..8b46770ef8 100644
--- a/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl
+++ b/deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl
@@ -25,10 +25,10 @@
%% as observed by RabbitMQ.
%% Used by `/metrics` and `/metrics/per-object`.
--define(METRIC_NAME_PREFIX, "rabbitmq_").
+-define(METRIC_NAME_PREFIX, <<"rabbitmq_">>).
%% Used by `/metrics/detailed` endpoint
--define(DETAILED_METRIC_NAME_PREFIX, "rabbitmq_detailed_").
+-define(DETAILED_METRIC_NAME_PREFIX, <<"rabbitmq_detailed_">>).
%% ==The source of these metrics can be found in the rabbit_core_metrics module==
%% The relevant files are:
@@ -328,7 +328,8 @@ identity_info() ->
}.
add_metric_family({Name, Type, Help, Metrics}, Callback) ->
- Callback(create_mf(?METRIC_NAME(Name), Help, Type, Metrics)).
+ MN = <<?METRIC_NAME_PREFIX/binary, (prometheus_model_helpers:metric_name(Name))/binary>>,
+ Callback(create_mf(MN, Help, Type, Metrics)).
mf(Callback, Prefix, Contents, Data) ->
[begin
@@ -340,7 +341,7 @@ mf(Callback, Prefix, Contents, Data) ->
end,
Callback(
create_mf(
- [Prefix, prometheus_model_helpers:metric_name(Name)],
+ <<Prefix/binary, (prometheus_model_helpers:metric_name(Name))/binary>>,
Help,
catch_boolean(Type),
?MODULE,
@@ -357,7 +358,7 @@ mf(Callback, Prefix, Contents, Data) ->
end,
Callback(
create_mf(
- [Prefix, prometheus_model_helpers:metric_name(Name)],
+ <<Prefix/binary, (prometheus_model_helpers:metric_name(Name))/binary>>,
Help,
catch_boolean(Type),
?MODULE,
@@ -369,7 +370,7 @@ mf(Callback, Prefix, Contents, Data) ->
mf_totals(Callback, Name, Type, Help, Size) ->
Callback(
create_mf(
- ?METRIC_NAME(Name),
+ <<?METRIC_NAME_PREFIX/binary, (prometheus_model_helpers:metric_name(Name))/binary>>,
Help,
catch_boolean(Type),
Size
@@ -383,14 +384,18 @@ labels(Item) ->
label(element(1, Item)).
label(#resource{virtual_host = VHost, kind = exchange, name = Name}) ->
- [{vhost, VHost}, {exchange, Name}];
+ <<"vhost=\"", VHost/binary, "\",exchange=\"", Name/binary, "\"">>;
label(#resource{virtual_host = VHost, kind = queue, name = Name}) ->
- [{vhost, VHost}, {queue, Name}];
+ <<"vhost=\"", VHost/binary, "\",queue=\"", Name/binary, "\"">>;
label({P, {#resource{virtual_host = QVHost, kind = queue, name = QName},
#resource{virtual_host = EVHost, kind = exchange, name = EName}}}) when is_pid(P) ->
%% channel_queue_exchange_metrics {channel_id, {queue_id, exchange_id}}
- [{channel, P}, {queue_vhost, QVHost}, {queue, QName},
- {exchange_vhost, EVHost}, {exchange, EName}];
+ <<"channel=\"", (iolist_to_binary(pid_to_list(P)))/binary, "\",",
+ "queue_vhost=\"", QVHost/binary, "\",",
+ "queue=\"", QName/binary, "\",",
+ "exchange_vhost=\"", EVHost/binary, "\",",
+ "exchange=\"", EName/binary, "\""
+ >>;
label({RemoteAddress, Username, Protocol}) when is_binary(RemoteAddress), is_binary(Username),
is_atom(Protocol) ->
lists:filter(fun({_, V}) ->
@@ -398,13 +403,17 @@ label({RemoteAddress, Username, Protocol}) when is_binary(RemoteAddress), is_bin
end, [{remote_address, RemoteAddress}, {username, Username},
{protocol, atom_to_binary(Protocol, utf8)}]);
label({I1, I2}) ->
- label(I1) ++ label(I2);
+ case {label(I1), label(I2)} of
+ {<<>>, L} -> L;
+ {L, <<>>} -> L;
+ {L1, L2} -> <<L1/binary, ",", L2/binary>>
+ end;
label(P) when is_pid(P) ->
- [{channel, P}];
+ <<"channel=\"", (iolist_to_binary(pid_to_list(P)))/binary, "\"">>;
label(A) when is_atom(A) ->
case is_protocol(A) of
- true -> [{protocol, atom_to_binary(A, utf8)}];
- false -> []
+ true -> <<"protocol=\"", (atom_to_binary(A, utf8))/binary, "\"">>;
+ false -> <<>>
end.
is_protocol(P) ->
diff --git a/rabbitmq-components.mk b/rabbitmq-components.mk
index 66afd1871f..7488f22f01 100644
--- a/rabbitmq-components.mk
+++ b/rabbitmq-components.mk
@@ -115,7 +115,7 @@ dep_cowboy = hex 2.8.0
dep_cowlib = hex 2.9.1
dep_jsx = hex 3.1.0
dep_looking_glass = git https://github.com/rabbitmq/looking_glass master
-dep_prometheus = hex 4.8.1
+dep_prometheus = git https://github.com/deadtrickster/prometheus.erl 06425c21a39c1564164f1cc3fe5bdfa8b23b1f78
dep_ra = git https://github.com/rabbitmq/ra.git main
dep_ranch = hex 2.1.0
dep_recon = hex 2.5.1
diff --git a/workspace_helpers.bzl b/workspace_helpers.bzl
index fb08ceb90e..8e6516f360 100644
--- a/workspace_helpers.bzl
+++ b/workspace_helpers.bzl
@@ -174,9 +174,12 @@ erlang_lib(
remote = "https://github.com/rabbitmq/osiris.git",
)
- hex_pm_bazel_erlang_lib(
+ github_bazel_erlang_lib(
name = "prometheus",
- version = "4.8.1",
+ repo = "prometheus.erl",
+ org = "deadtrickster",
+ ref = "06425c21a39c1564164f1cc3fe5bdfa8b23b1f78",
+ version = "06425c21a39c1564164f1cc3fe5bdfa8b23b1f78",
first_srcs = [
"src/prometheus_collector.erl",
"src/prometheus_format.erl",
@@ -186,7 +189,6 @@ erlang_lib(
deps = [
"@quantile_estimator//:bazel_erlang_lib",
],
- sha256 = "6edfbe928d271c7f657a6f2c46258738086584bd6cae4a000b8b9a6009ba23a5",
)
github_bazel_erlang_lib(