diff --git a/deps/rabbit/src/rabbit_khepri.erl b/deps/rabbit/src/rabbit_khepri.erl index 7b8c4ee709f7..6af8228f8272 100644 --- a/deps/rabbit/src/rabbit_khepri.erl +++ b/deps/rabbit/src/rabbit_khepri.erl @@ -105,6 +105,7 @@ nodes/0, locally_known_nodes/0, get_ra_cluster_name/0, + get_server_id/1, get_store_id/0, transfer_leadership/1, @@ -669,6 +670,14 @@ locally_known_nodes() -> get_ra_cluster_name() -> ?RA_CLUSTER_NAME. +-spec get_server_id(Node) -> RaServerId when + Node :: node(), + RaServerId :: ra:server_id(). +%% @doc Returns the Ra server id of the Khepri member on the given node. + +get_server_id(Node) -> + {?RA_CLUSTER_NAME, Node}. + -spec get_store_id() -> StoreId when StoreId :: khepri:store_id(). %% @doc Returns the Khepri store identifier. 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 848e6c764fde..f382e4bdfa4e 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 @@ -18,6 +18,8 @@ -import(prometheus_text_format, [escape_label_value/1]). +-include_lib("stdlib/include/assert.hrl"). +-include_lib("kernel/include/logger.hrl"). -include_lib("rabbit_common/include/rabbit.hrl"). -behaviour(prometheus_collector). @@ -298,6 +300,12 @@ deregister_cleanup(_) -> ok. collect_mf('detailed', Callback) -> collect(true, ?DETAILED_METRIC_NAME_PREFIX, vhosts_filter_from_pdict(), enabled_mfs_from_pdict(?METRICS_RAW), Callback), collect(true, ?CLUSTER_METRIC_NAME_PREFIX, vhosts_filter_from_pdict(), enabled_mfs_from_pdict(?METRICS_CLUSTER), Callback), + case is_mf_enabled(khepri) of + true -> + collect_khepri_info(Callback); + false -> + ok + end, %% identity is here to enable filtering on a cluster name (as already happens in existing dashboards) emit_identity_info(Callback), ok; @@ -331,6 +339,20 @@ totals(Callback) -> end || {Table, Name, Type, Help} <- ?TOTALS], ok. +collect_khepri_info(Callback) -> + ServerId = rabbit_khepri:get_server_id(node()), + maps:foreach( + fun (Name, #{type := Type, help := Help, values := #{ServerId := Value}}) -> + Callback( + create_mf( + <>, + Help, Type, [Value])); + (_Name, _Format) -> + ok + end, seshat:format(ra)). + emit_identity_info(Callback) -> add_metric_family(build_info(), Callback), add_metric_family(identity_info(), Callback), @@ -814,12 +836,19 @@ sum('', B) -> sum(A, B) -> A + B. +is_mf_enabled(MF) -> + case get(prometheus_mf_filter) of + undefined -> + false; + MFNameSet -> + sets:is_element(MF, MFNameSet) + end. + enabled_mfs_from_pdict(AllMFs) -> case get(prometheus_mf_filter) of undefined -> []; - MFNames -> - MFNameSet = sets:from_list(MFNames), + MFNameSet -> [ MF || MF = {Table, _} <- AllMFs, sets:is_element(Table, MFNameSet) ] end. diff --git a/deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl b/deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl index ff780d273042..3fe7884f25a2 100644 --- a/deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl +++ b/deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl @@ -170,7 +170,7 @@ put_filtering_options_into_process_dictionary(Request) -> end, case parse_metric_families(Families) of Fs when is_list(Fs) -> - put(prometheus_mf_filter, Fs); + put(prometheus_mf_filter, sets:from_list(Fs, [{version, 2}])); _ -> ok end, ok.