fix(alarm): use gen_event:noifty/2 to generate alarm event
Uniformly report high_system_memory_usage event by gen_event:notify/2 to ensure generate a same alarm structure
This commit is contained in:
parent
81e9000c72
commit
bbcbe01501
|
@ -61,7 +61,10 @@ handle_event({set_alarm, {system_memory_high_watermark, []}}, State) ->
|
|||
Message = to_bin("System memory usage is higher than ~p%", [HighWatermark]),
|
||||
emqx_alarm:activate(
|
||||
high_system_memory_usage,
|
||||
#{high_watermark => HighWatermark},
|
||||
#{
|
||||
high_watermark => HighWatermark,
|
||||
percent => emqx_os_mon:current_sysmem_percent()
|
||||
},
|
||||
Message
|
||||
),
|
||||
{ok, State};
|
||||
|
|
|
@ -45,9 +45,9 @@ start(_Type, _Args) ->
|
|||
ok = maybe_start_quicer(),
|
||||
ok = emqx_bpapi:start(),
|
||||
wait_boot_shards(),
|
||||
ok = emqx_alarm_handler:load(),
|
||||
{ok, Sup} = emqx_sup:start_link(),
|
||||
ok = maybe_start_listeners(),
|
||||
ok = emqx_alarm_handler:load(),
|
||||
emqx_config:add_handlers(),
|
||||
register(emqx, self()),
|
||||
{ok, Sup}.
|
||||
|
|
|
@ -31,6 +31,10 @@
|
|||
set_procmem_high_watermark/1
|
||||
]).
|
||||
|
||||
-export([
|
||||
current_sysmem_percent/0
|
||||
]).
|
||||
|
||||
%% gen_server callbacks
|
||||
-export([
|
||||
init/1,
|
||||
|
@ -72,6 +76,20 @@ get_procmem_high_watermark() ->
|
|||
set_procmem_high_watermark(Float) ->
|
||||
memsup:set_procmem_high_watermark(Float).
|
||||
|
||||
current_sysmem_percent() ->
|
||||
case erlang:whereis(memsup) of
|
||||
undefined ->
|
||||
undefined;
|
||||
_Pid ->
|
||||
{Total, Allocated, _Worst} = memsup:get_memory_data(),
|
||||
case Total =/= 0 of
|
||||
true ->
|
||||
erlang:floor((Allocated / Total) * 10000) / 100;
|
||||
false ->
|
||||
undefined
|
||||
end
|
||||
end.
|
||||
|
||||
%%--------------------------------------------------------------------
|
||||
%% gen_server callbacks
|
||||
%%--------------------------------------------------------------------
|
||||
|
@ -163,14 +181,12 @@ start_check_timer() ->
|
|||
%% and there is no exported function to remove the alerted flag,
|
||||
%% so it can only be checked again at startup.
|
||||
|
||||
ensure_system_memory_alarm(HW) ->
|
||||
case erlang:whereis(memsup) of
|
||||
undefined ->
|
||||
ok;
|
||||
_Pid ->
|
||||
{Total, Allocated, _Worst} = memsup:get_memory_data(),
|
||||
case Total =/= 0 andalso Allocated / Total > HW of
|
||||
true -> emqx_alarm:activate(high_system_memory_usage, #{high_watermark => HW});
|
||||
false -> ok
|
||||
end
|
||||
ensure_system_memory_alarm(HW) when HW =< 1.0 andalso HW >= 0 ->
|
||||
case current_sysmem_percent() of
|
||||
Usage when Usage > (HW * 100) ->
|
||||
gen_event:notify(
|
||||
alarm_handler, {set_alarm, {system_memory_high_watermark, []}}
|
||||
);
|
||||
_ ->
|
||||
ok
|
||||
end.
|
||||
|
|
Loading…
Reference in New Issue