diff options
author | dcorbacho <dparracorbacho@piotal.io> | 2021-11-15 11:53:50 +0100 |
---|---|---|
committer | dcorbacho <dparracorbacho@piotal.io> | 2021-11-15 11:53:50 +0100 |
commit | e299178471143402cbdcb4fdb3b99f5f191880a3 (patch) | |
tree | 1217a315aa93ae1ba19096f0ae471333d681d38d | |
parent | 055581f33d4df9845c35c0cef7a84ff9460b6728 (diff) | |
download | rabbitmq-server-git-e299178471143402cbdcb4fdb3b99f5f191880a3.tar.gz |
Store collector pattern in process memory
Avoids multiple calls to `application:get_env` which can be very expensive.
Also limits filter to vhost_msg_stats, as queue_msg_stats are required for
individual queue metrics
-rw-r--r-- | deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl index aec68d98e7..9ab07fd808 100644 --- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl +++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_collector.erl @@ -26,7 +26,8 @@ -import(rabbit_mgmt_data, [lookup_element/3]). -record(state, {table, interval, policies, rates_mode, lookup_queue, - lookup_exchange, old_aggr_stats}). + lookup_exchange, old_aggr_stats, + filter_aggregated_queue_metrics_pattern}). %% Data is stored in ETS tables: %% * One ETS table per metric (queue_stats, channel_stats_deliver_stats...) @@ -59,7 +60,7 @@ reset_lookups(Table) -> gen_server:call(name(Table), reset_lookups, infinity). init([Table]) -> - {RatesMode, Policies} = load_config(), + {RatesMode, Policies, FilterPattern} = load_config(), Policy = retention_policy(Table), Interval = take_smaller(proplists:get_value(Policy, Policies, [])) * 1000, erlang:send_after(Interval, self(), collect_metrics), @@ -70,7 +71,8 @@ init([Table]) -> rates_mode = RatesMode, old_aggr_stats = #{}, lookup_queue = fun queue_exists/1, - lookup_exchange = fun exchange_exists/1}}. + lookup_exchange = fun exchange_exists/1, + filter_aggregated_queue_metrics_pattern = FilterPattern}}. handle_call(reset_lookups, _From, State) -> {reply, ok, State#state{lookup_queue = fun queue_exists/1, @@ -463,19 +465,19 @@ aggregate_entry({Name, Ready, Unack, Msgs, Red}, NextStats, Ops0, #state{table = queue_coarse_metrics, old_aggr_stats = Old, policies = {BPolicies, _, GPolicies}, - lookup_queue = QueueFun} = State) -> + lookup_queue = QueueFun, + filter_aggregated_queue_metrics_pattern = Pattern} = State) -> Stats = ?vhost_msg_stats(Ready, Unack, Msgs), Diff = get_difference(Name, Stats, State), - Ops1 = maybe_insert_entry_ops(Name, vhost_msg_stats, vhost(Name), true, - Diff, Ops0, GPolicies), + Ops1 = maybe_insert_entry_ops(Name, Pattern, vhost_msg_stats, vhost(Name), + true, Diff, Ops0, GPolicies), Ops2 = case QueueFun(Name) of true -> QPS =?queue_process_stats(Red), O1 = insert_entry_ops(queue_process_stats, Name, false, QPS, Ops1, BPolicies), QMS = ?queue_msg_stats(Ready, Unack, Msgs), - maybe_insert_entry_ops(Name, queue_msg_stats, Name, false, - QMS, O1, BPolicies); + insert_entry_ops(queue_msg_stats, Name, false, QMS, O1, BPolicies); _ -> Ops1 end, @@ -583,19 +585,16 @@ insert_entry_op(Table, Key, Entry, Ops) -> end, {insert_entry, Entry}, TableOps0), maps:put(Table, TableOps, Ops). -maybe_insert_entry_ops(Name, Table, Id, Incr, Entry, Ops, Policies) -> - case needs_filtering_out(Name) of +maybe_insert_entry_ops(Name, Pattern, Table, Id, Incr, Entry, Ops, Policies) -> + case needs_filtering_out(Name, Pattern) of true -> Ops; false -> insert_entry_ops(Table, Id, Incr, Entry, Ops, Policies) end. -needs_filtering_out(#resource{name = Name}) -> - case rabbit_mgmt_agent_config:get_env(filter_aggregated_queue_metrics_pattern) of - undefined -> - false; - Pattern -> - match == re:run(Name, Pattern, [{capture, none}]) - end. +needs_filtering_out(_, undefined) -> + false; +needs_filtering_out(#resource{name = Name}, Pattern) -> + match == re:run(Name, Pattern, [{capture, none}]). insert_entry_ops(Table, Id, Incr, Entry, Ops, Policies) -> lists:foldl(fun({Size, Interval}, Acc) -> @@ -702,7 +701,8 @@ index_table(node_node_coarse_stats, node) -> node_node_coarse_stats_node_index. load_config() -> RatesMode = rabbit_mgmt_agent_config:get_env(rates_mode), Policies = rabbit_mgmt_agent_config:get_env(sample_retention_policies, []), - {RatesMode, Policies}. + FilterPattern = rabbit_mgmt_agent_config:get_env(filter_aggregated_queue_metrics_pattern), + {RatesMode, Policies, FilterPattern}. ceil(X) when X < 0 -> trunc(X); |