Forráskód Böngészése

Merge pull request #12593 from SergeTupchiy/EMQX-11530-log-throttling-followup-trace

trace throttled events
SergeTupchiy 2 éve
szülő
commit
8722e6aecc

+ 11 - 6
apps/emqx/include/logger.hrl

@@ -51,7 +51,7 @@
         true ->
         true ->
             ?SLOG(Level, Data, Meta);
             ?SLOG(Level, Data, Meta);
         false ->
         false ->
-            ok
+            ?_DO_TRACE(Level, maps:get(msg, Data), maps:merge(Data, Meta))
     end
     end
 ).
 ).
 
 
@@ -59,10 +59,8 @@
 -define(TRACE_FILTER, emqx_trace_filter).
 -define(TRACE_FILTER, emqx_trace_filter).
 -define(OWN_KEYS, [level, filters, filter_default, handlers]).
 -define(OWN_KEYS, [level, filters, filter_default, handlers]).
 
 
--define(TRACE(Tag, Msg, Meta), ?TRACE(debug, Tag, Msg, Meta)).
-
-%% Only evaluate when necessary
--define(TRACE(Level, Tag, Msg, Meta), begin
+%% Internal macro
+-define(_DO_TRACE(Tag, Msg, Meta),
     case persistent_term:get(?TRACE_FILTER, []) of
     case persistent_term:get(?TRACE_FILTER, []) of
         [] -> ok;
         [] -> ok;
         %% We can't bind filter list to a variable because we pollute the calling scope with it.
         %% We can't bind filter list to a variable because we pollute the calling scope with it.
@@ -70,7 +68,14 @@
         %% because this adds overhead to the happy path.
         %% because this adds overhead to the happy path.
         %% So evaluate `persistent_term:get` twice.
         %% So evaluate `persistent_term:get` twice.
         _ -> emqx_trace:log(persistent_term:get(?TRACE_FILTER, []), Msg, (Meta)#{trace_tag => Tag})
         _ -> emqx_trace:log(persistent_term:get(?TRACE_FILTER, []), Msg, (Meta)#{trace_tag => Tag})
-    end,
+    end
+).
+
+-define(TRACE(Tag, Msg, Meta), ?TRACE(debug, Tag, Msg, Meta)).
+
+%% Only evaluate when necessary
+-define(TRACE(Level, Tag, Msg, Meta), begin
+    ?_DO_TRACE(Tag, Msg, Meta),
     ?SLOG(
     ?SLOG(
         Level,
         Level,
         (emqx_trace_formatter:format_meta_map(Meta))#{msg => Msg, tag => Tag},
         (emqx_trace_formatter:format_meta_map(Meta))#{msg => Msg, tag => Tag},

+ 3 - 1
apps/emqx/src/emqx_trace/emqx_trace_formatter.erl

@@ -35,7 +35,9 @@ format(
     ClientId = to_iolist(maps:get(clientid, Meta, "")),
     ClientId = to_iolist(maps:get(clientid, Meta, "")),
     Peername = maps:get(peername, Meta, ""),
     Peername = maps:get(peername, Meta, ""),
     MetaBin = format_meta(Meta, PEncode),
     MetaBin = format_meta(Meta, PEncode),
-    [Time, " [", Tag, "] ", ClientId, "@", Peername, " msg: ", Msg, ", ", MetaBin, "\n"];
+    Msg1 = to_iolist(Msg),
+    Tag1 = to_iolist(Tag),
+    [Time, " [", Tag1, "] ", ClientId, "@", Peername, " msg: ", Msg1, ", ", MetaBin, "\n"];
 format(Event, Config) ->
 format(Event, Config) ->
     emqx_logger_textfmt:format(Event, Config).
     emqx_logger_textfmt:format(Event, Config).
 
 

+ 6 - 0
changes/ce/feat-12520.en.md

@@ -1,2 +1,8 @@
 Implement log throttling. The feature reduces the number of potentially flooding logged events by
 Implement log throttling. The feature reduces the number of potentially flooding logged events by
 dropping all but the first event within a configured time window.
 dropping all but the first event within a configured time window.
+Throttling is applied to the following log events:
+ - authorization_permission_denied,
+ - cannot_publish_to_topic_due_to_not_authorized,
+ - cannot_publish_to_topic_due_to_quota_exceeded,
+ - connection_rejected_due_to_license_limit_reached,
+ - dropped_msg_due_to_mqueue_is_full.