fix(metrics): use the same data source for RAM usage info

This commit is contained in:
Zaiming (Stone) Shi 2022-06-30 20:41:29 +02:00
parent 293df88f36
commit 719e02cc96
8 changed files with 27 additions and 75 deletions

View File

@ -1,33 +1,5 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!! %% Unless you know what you are doing, DO NOT edit manually!!
{VSN, {VSN,
[{"5.0.0", [{<<".*">>,[]}],
[{load_module,emqx_quic_connection,brutal_purge,soft_purge,[]}, [{<<".*">>,[]}]}.
{load_module,emqx_config,brutal_purge,soft_purge,[]},
{load_module,emqx_channel,brutal_purge,soft_purge,[]},
{load_module,emqx_schema,brutal_purge,soft_purge,[]},
{load_module,emqx_release,brutal_purge,soft_purge,[]},
{load_module,emqx_authentication,brutal_purge,soft_purge,[]},
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
{add_module,emqx_exclusive_subscription},
{apply,{emqx_exclusive_subscription,on_add_module,[]}},
{load_module,emqx_broker,brutal_purge,soft_purge,[]},
{load_module,emqx_mqtt_caps,brutal_purge,soft_purge,[]},
{load_module,emqx_topic,brutal_purge,soft_purge,[]},
{load_module,emqx_relup}]},
{<<".*">>,[]}],
[{"5.0.0",
[{load_module,emqx_quic_connection,brutal_purge,soft_purge,[]},
{load_module,emqx_config,brutal_purge,soft_purge,[]},
{load_module,emqx_channel,brutal_purge,soft_purge,[]},
{load_module,emqx_schema,brutal_purge,soft_purge,[]},
{load_module,emqx_release,brutal_purge,soft_purge,[]},
{load_module,emqx_authentication,brutal_purge,soft_purge,[]},
{load_module,emqx_metrics,brutal_purge,soft_purge,[]},
{load_module,emqx_broker,brutal_purge,soft_purge,[]},
{load_module,emqx_mqtt_caps,brutal_purge,soft_purge,[]},
{load_module,emqx_topic,brutal_purge,soft_purge,[]},
{apply,{emqx_exclusive_subscription,on_delete_module,[]}},
{delete_module,emqx_exclusive_subscription},
{load_module,emqx_relup}]},
{<<".*">>,[]}]}.

View File

@ -24,7 +24,6 @@
get_system_info/1, get_system_info/1,
get_memory/0, get_memory/0,
get_memory/2, get_memory/2,
mem_info/0,
loads/0 loads/0
]). ]).
@ -226,12 +225,6 @@ convert_allocated_areas({Key, Value1, Value2}) ->
convert_allocated_areas({Key, Value}) -> convert_allocated_areas({Key, Value}) ->
{Key, Value}. {Key, Value}.
mem_info() ->
Dataset = memsup:get_system_memory_data(),
Total = proplists:get_value(total_memory, Dataset),
Free = proplists:get_value(free_memory, Dataset),
[{total_memory, Total}, {used_memory, Total - Free}].
%%%% erlang vm scheduler_usage fun copied from recon %%%% erlang vm scheduler_usage fun copied from recon
scheduler_usage(Interval) when is_integer(Interval) -> scheduler_usage(Interval) when is_integer(Interval) ->
%% We start and stop the scheduler_wall_time system flag %% We start and stop the scheduler_wall_time system flag

View File

@ -50,12 +50,6 @@ t_systeminfo(_Config) ->
), ),
?assertEqual(undefined, emqx_vm:get_system_info(undefined)). ?assertEqual(undefined, emqx_vm:get_system_info(undefined)).
t_mem_info(_Config) ->
application:ensure_all_started(os_mon),
MemInfo = emqx_vm:mem_info(),
[{total_memory, _}, {used_memory, _}] = MemInfo,
application:stop(os_mon).
t_process_info(_Config) -> t_process_info(_Config) ->
ProcessInfo = emqx_vm:get_process_info(), ProcessInfo = emqx_vm:get_process_info(),
?assertEqual(emqx_vm:process_info_keys(), [K || {K, _V} <- ProcessInfo]). ?assertEqual(emqx_vm:process_info_keys(), [K || {K, _V} <- ProcessInfo]).

View File

@ -104,7 +104,10 @@
]). ]).
%% Common Table API %% Common Table API
-export([max_row_limit/0]). -export([
max_row_limit/0,
vm_stats/0
]).
-define(APP, emqx_management). -define(APP, emqx_management).
@ -161,6 +164,23 @@ node_info(Nodes) ->
stopped_node_info(Node) -> stopped_node_info(Node) ->
#{name => Node, node_status => 'stopped'}. #{name => Node, node_status => 'stopped'}.
vm_stats() ->
Idle =
case cpu_sup:util([detailed]) of
%% Not support for Windows
{_, 0, 0, _} -> 0;
{_Num, _Use, IdleList, _} -> proplists:get_value(idle, IdleList, 0)
end,
RunQueue = erlang:statistics(run_queue),
{MemUsedRatio, MemTotal} = get_sys_memory(),
[
{run_queue, RunQueue},
{cpu_idle, Idle},
{cpu_use, 100 - Idle},
{total_memory, MemTotal},
{used_memory, erlang:round(MemTotal * MemUsedRatio)}
].
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Brokers %% Brokers
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------

View File

@ -2,7 +2,7 @@
{application, emqx_prometheus, [ {application, emqx_prometheus, [
{description, "Prometheus for EMQX"}, {description, "Prometheus for EMQX"},
% strict semver, bump manually! % strict semver, bump manually!
{vsn, "5.0.5"}, {vsn, "5.0.6"},
{modules, []}, {modules, []},
{registered, [emqx_prometheus_sup]}, {registered, [emqx_prometheus_sup]},
{applications, [kernel, stdlib, prometheus, emqx]}, {applications, [kernel, stdlib, prometheus, emqx]},

View File

@ -590,20 +590,7 @@ emqx_vm() ->
]. ].
emqx_vm_data() -> emqx_vm_data() ->
Idle = emqx_mgmt:vm_stats().
case cpu_sup:util([detailed]) of
%% Not support for Windows
{_, 0, 0, _} -> 0;
{_Num, _Use, IdleList, _} -> ?C(idle, IdleList)
end,
RunQueue = erlang:statistics(run_queue),
[
{run_queue, RunQueue},
%% XXX: Plan removed at v5.0
{process_total_messages, 0},
{cpu_idle, Idle},
{cpu_use, 100 - Idle}
] ++ emqx_vm:mem_info().
emqx_cluster() -> emqx_cluster() ->
[ [

View File

@ -1,7 +1,7 @@
%% -*- mode: erlang -*- %% -*- mode: erlang -*-
{application, emqx_statsd, [ {application, emqx_statsd, [
{description, "EMQX Statsd"}, {description, "EMQX Statsd"},
{vsn, "5.0.4"}, {vsn, "5.0.5"},
{registered, []}, {registered, []},
{mod, {emqx_statsd_app, []}}, {mod, {emqx_statsd_app, []}},
{applications, [ {applications, [

View File

@ -105,7 +105,7 @@ handle_info(
timer := Ref timer := Ref
} }
) -> ) ->
Metrics = emqx_metrics:all() ++ emqx_stats:getstats() ++ emqx_vm_data(), Metrics = emqx_metrics:all() ++ emqx_stats:getstats() ++ emqx_mgmt:vm_stats(),
SampleRate = SampleTimeInterval / FlushTimeInterval, SampleRate = SampleTimeInterval / FlushTimeInterval,
StatsdMetrics = [ StatsdMetrics = [
{gauge, Name, Value, SampleRate, []} {gauge, Name, Value, SampleRate, []}
@ -129,20 +129,6 @@ terminate(_Reason, #{estatsd_pid := Pid}) ->
%% Internal function %% Internal function
%%------------------------------------------------------------------------------ %%------------------------------------------------------------------------------
emqx_vm_data() ->
Idle =
case cpu_sup:util([detailed]) of
%% Not support for Windows
{_, 0, 0, _} -> 0;
{_Num, _Use, IdleList, _} -> proplists:get_value(idle, IdleList, 0)
end,
RunQueue = erlang:statistics(run_queue),
[
{run_queue, RunQueue},
{cpu_idle, Idle},
{cpu_use, 100 - Idle}
] ++ emqx_vm:mem_info().
ensure_timer(State = #{sample_time_interval := SampleTimeInterval}) -> ensure_timer(State = #{sample_time_interval := SampleTimeInterval}) ->
State#{timer => emqx_misc:start_timer(SampleTimeInterval, ?SAMPLE_TIMEOUT)}. State#{timer => emqx_misc:start_timer(SampleTimeInterval, ?SAMPLE_TIMEOUT)}.