Skip to content

Commit f1a2605

Browse files
the-mikedavismergify[bot]
authored andcommitted
Add prometheus tags for raft_cluster to non-QQ raft metrics
By default Ra will use the cluster name as the metrics key. Currently atom values are ignored by the prometheus plugin's tag rendering functions, so if you have a QQ and Khepri running and request the `/metrics/per-object` or `/metrics/detailed` endpoints you'll see values that don't have labels set for the `ra_metrics` metrics: # TYPE rabbitmq_raft_term_total counter # HELP rabbitmq_raft_term_total Current Raft term number rabbitmq_raft_term_total{vhost="/",queue="qq"} 9 rabbitmq_raft_term_total 10 With this change we map the name of the Ra cluster to a "raft_cluster" tag, so instead an example metric might be: # TYPE rabbitmq_raft_term_total counter # HELP rabbitmq_raft_term_total Current Raft term number rabbitmq_raft_term_total{vhost="/",queue="qq"} 9 rabbitmq_raft_term_total{raft_cluster="rabbitmq_metadata"} 10 This affects metrics for Khepri and the stream coordinator. (cherry picked from commit 512f883) (cherry picked from commit 983ac8c) # Conflicts: # deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl
1 parent 3c6daef commit f1a2605

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

deps/rabbitmq_prometheus/src/collectors/prometheus_rabbitmq_core_metrics_collector.erl

+47
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,54 @@ get_data(Table, false, VHostsFilter, QueuesFilter) when Table == channel_exchang
606606
_ ->
607607
[Result]
608608
end;
609+
<<<<<<< HEAD
609610
get_data(queue_coarse_metrics = Table, true, VHostsFilter, _) when is_map(VHostsFilter) ->
611+
=======
612+
get_data(ra_metrics = Table, true, _) ->
613+
ets:foldl(
614+
fun ({#resource{kind = queue}, _, _, _, _, _, _} = Row, Acc) ->
615+
%% Metrics for QQ records use the queue resource as the table
616+
%% key. The queue name and vhost will be rendered as tags.
617+
[Row | Acc];
618+
({ClusterName, _, _, _, _, _, _} = Row, Acc) when is_atom(ClusterName) ->
619+
%% Other Ra clusters like Khepri and the stream coordinator use
620+
%% the cluster name as the metrics key. Transform this into a
621+
%% value that can be rendered as a "raft_cluster" tag.
622+
Row1 = setelement(1, Row, #{<<"raft_cluster">> => atom_to_binary(ClusterName, utf8)}),
623+
[Row1 | Acc]
624+
end, [], Table);
625+
get_data(exchange_metrics = Table, true, VHostsFilter) when is_map(VHostsFilter)->
626+
ets:foldl(fun
627+
({#resource{kind = exchange, virtual_host = VHost}, _, _, _, _, _} = Row, Acc) when
628+
map_get(VHost, VHostsFilter)
629+
->
630+
[Row | Acc];
631+
(_Row, Acc) ->
632+
Acc
633+
end, [], Table);
634+
get_data(queue_delivery_metrics = Table, true, VHostsFilter) when is_map(VHostsFilter) ->
635+
ets:foldl(fun
636+
({#resource{kind = queue, virtual_host = VHost}, _, _, _, _, _, _, _, _} = Row, Acc) when
637+
map_get(VHost, VHostsFilter)
638+
->
639+
[Row | Acc];
640+
(_Row, Acc) ->
641+
Acc
642+
end, [], Table);
643+
get_data(queue_exchange_metrics = Table, true, VHostsFilter) when is_map(VHostsFilter) ->
644+
ets:foldl(fun
645+
({{
646+
#resource{kind = queue, virtual_host = VHost},
647+
#resource{kind = exchange, virtual_host = VHost}
648+
}, _, _} = Row, Acc) when
649+
map_get(VHost, VHostsFilter)
650+
->
651+
[Row | Acc];
652+
(_Row, Acc) ->
653+
Acc
654+
end, [], Table);
655+
get_data(queue_coarse_metrics = Table, true, VHostsFilter) when is_map(VHostsFilter) ->
656+
>>>>>>> 983ac8c476 (Add prometheus tags for raft_cluster to non-QQ raft metrics)
610657
ets:foldl(fun
611658
({#resource{kind = queue, virtual_host = VHost}, _, _, _, _} = Row, Acc) when map_get(VHost, VHostsFilter) ->
612659
[Row|Acc];

0 commit comments

Comments
 (0)