feat(metrics): optimize client.authenticate

This commit is contained in:
firest 2022-06-30 13:34:47 +08:00
parent 9a6f776f82
commit 9415a94c7f
3 changed files with 28 additions and 1 deletions

View File

@ -34,7 +34,7 @@
| {continue, binary(), map()} | {continue, binary(), map()}
| {error, term()}. | {error, term()}.
authenticate(Credential) -> authenticate(Credential) ->
case run_hooks('client.authenticate', [Credential], {ok, #{is_superuser => false}}) of case emqx_hooks:run_fold('client.authenticate', [Credential], {ok, #{is_superuser => false}}) of
ok -> ok ->
{ok, #{is_superuser => false}}; {ok, #{is_superuser => false}};
Other -> Other ->

View File

@ -215,17 +215,20 @@ when
%%------------------------------------------------------------------------------ %%------------------------------------------------------------------------------
authenticate(#{enable_authn := false}, _AuthResult) -> authenticate(#{enable_authn := false}, _AuthResult) ->
inc_authenticate_metric('authentication.success.anonymous'),
ignore; ignore;
authenticate(#{listener := Listener, protocol := Protocol} = Credential, _AuthResult) -> authenticate(#{listener := Listener, protocol := Protocol} = Credential, _AuthResult) ->
case get_authenticators(Listener, global_chain(Protocol)) of case get_authenticators(Listener, global_chain(Protocol)) of
{ok, ChainName, Authenticators} -> {ok, ChainName, Authenticators} ->
case get_enabled(Authenticators) of case get_enabled(Authenticators) of
[] -> [] ->
inc_authenticate_metric('authentication.success.anonymous'),
ignore; ignore;
NAuthenticators -> NAuthenticators ->
do_authenticate(ChainName, NAuthenticators, Credential) do_authenticate(ChainName, NAuthenticators, Credential)
end; end;
none -> none ->
inc_authenticate_metric('authentication.success.anonymous'),
ignore ignore
end. end.
@ -611,6 +614,7 @@ handle_create_authenticator(Chain, Config, Providers) ->
end. end.
do_authenticate(_ChainName, [], _) -> do_authenticate(_ChainName, [], _) ->
inc_authenticate_metric('authentication.failure'),
{stop, {error, not_authorized}}; {stop, {error, not_authorized}};
do_authenticate( do_authenticate(
ChainName, [#authenticator{id = ID, provider = Provider, state = State} | More], Credential ChainName, [#authenticator{id = ID, provider = Provider, state = State} | More], Credential
@ -629,8 +633,10 @@ do_authenticate(
%% {error, Reason} %% {error, Reason}
case Result of case Result of
{ok, _} -> {ok, _} ->
inc_authenticate_metric('authentication.success'),
emqx_metrics_worker:inc(authn_metrics, MetricsID, success); emqx_metrics_worker:inc(authn_metrics, MetricsID, success);
{error, _} -> {error, _} ->
inc_authenticate_metric('authentication.failure'),
emqx_metrics_worker:inc(authn_metrics, MetricsID, failed); emqx_metrics_worker:inc(authn_metrics, MetricsID, failed);
_ -> _ ->
ok ok
@ -902,3 +908,13 @@ to_list(M) when is_map(M) -> [M];
to_list(L) when is_list(L) -> L. to_list(L) when is_list(L) -> L.
call(Call) -> gen_server:call(?MODULE, Call, infinity). call(Call) -> gen_server:call(?MODULE, Call, infinity).
inc_authenticate_metric(Metric) ->
emqx_metrics:inc('client.authenticate'),
inc_authenticate_metric2(Metric).
inc_authenticate_metric2('authentication.success.anonymous' = Metric) ->
emqx_metrics:inc(Metric),
emqx_metrics:inc('authentication.success');
inc_authenticate_metric2(Metric) ->
emqx_metrics:inc(Metric).

View File

@ -260,6 +260,13 @@
{counter, 'authorization.cache_hit'} {counter, 'authorization.cache_hit'}
]). ]).
%% Statistic metrics for auth checking
-define(STASTS_AUTHN_METRICS, [
{counter, 'authentication.success'},
{counter, 'authentication.success.anonymous'},
{counter, 'authentication.failure'}
]).
%% Overload protetion counters %% Overload protetion counters
-define(OLP_METRICS, [ -define(OLP_METRICS, [
{counter, 'olp.delay.ok'}, {counter, 'olp.delay.ok'},
@ -543,6 +550,7 @@ init([]) ->
?CLIENT_METRICS, ?CLIENT_METRICS,
?SESSION_METRICS, ?SESSION_METRICS,
?STASTS_ACL_METRICS, ?STASTS_ACL_METRICS,
?STASTS_AUTHN_METRICS,
?OLP_METRICS ?OLP_METRICS
]), ]),
% Store reserved indices % Store reserved indices
@ -690,6 +698,9 @@ reserved_idx('session.terminated') -> 224;
reserved_idx('authorization.allow') -> 300; reserved_idx('authorization.allow') -> 300;
reserved_idx('authorization.deny') -> 301; reserved_idx('authorization.deny') -> 301;
reserved_idx('authorization.cache_hit') -> 302; reserved_idx('authorization.cache_hit') -> 302;
reserved_idx('authentication.success') -> 310;
reserved_idx('authentication.success.anonymous') -> 311;
reserved_idx('authentication.failure') -> 312;
reserved_idx('olp.delay.ok') -> 400; reserved_idx('olp.delay.ok') -> 400;
reserved_idx('olp.delay.timeout') -> 401; reserved_idx('olp.delay.timeout') -> 401;
reserved_idx('olp.hbn') -> 402; reserved_idx('olp.hbn') -> 402;