Skip to content

Commit

Permalink
Add prometheus tags for raft_cluster to non-QQ raft metrics
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
the-mikedavis committed Aug 30, 2024
1 parent 86ceac4 commit 512f883
Showing 1 changed file with 13 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,19 @@ get_data(Table, false, VHostsFilter) when Table == channel_exchange_metrics;
_ ->
[Result]
end;
get_data(ra_metrics = Table, true, _) ->
ets:foldl(
fun ({#resource{kind = queue}, _, _, _, _, _, _} = Row, Acc) ->
%% Metrics for QQ records use the queue resource as the table
%% key. The queue name and vhost will be rendered as tags.
[Row | Acc];
({ClusterName, _, _, _, _, _, _} = Row, Acc) when is_atom(ClusterName) ->
%% Other Ra clusters like Khepri and the stream coordinator use
%% the cluster name as the metrics key. Transform this into a
%% value that can be rendered as a "raft_cluster" tag.
Row1 = setelement(1, Row, #{<<"raft_cluster">> => atom_to_binary(ClusterName, utf8)}),
[Row1 | Acc]
end, [], Table);
get_data(exchange_metrics = Table, true, VHostsFilter) when is_map(VHostsFilter)->
ets:foldl(fun
({#resource{kind = exchange, virtual_host = VHost}, _, _, _, _, _} = Row, Acc) when
Expand Down

0 comments on commit 512f883

Please sign in to comment.