fix: prometheus auth metrics fields and type

- rm rate fields
- fix few fields type to counter
This commit is contained in:
JimMoen 2024-01-16 19:45:04 +08:00
parent a18c4d193a
commit c3e9533260
No known key found for this signature in database
1 changed files with 74 additions and 87 deletions

View File

@ -32,31 +32,26 @@
[
create_mf/5,
gauge_metric/1,
gauge_metrics/1
gauge_metrics/1,
counter_metrics/1
]
).
-type authn_metric_key() ::
-type authn_metric_name() ::
emqx_authn_enable
| emqx_authn_status
| emqx_authn_nomatch
| emqx_authn_total
| emqx_authn_success
| emqx_authn_failed
| emqx_authn_rate
| emqx_authn_rate_last5m
| emqx_authn_rate_max.
| emqx_authn_failed.
-type authz_metric_key() ::
-type authz_metric_name() ::
emqx_authz_enable
| emqx_authz_status
| emqx_authz_nomatch
| emqx_authz_total
| emqx_authz_success
| emqx_authz_failed
| emqx_authz_rate
| emqx_authz_rate_last5m
| emqx_authz_rate_max.
| emqx_authz_failed.
%% Please don't remove this attribute, prometheus uses it to
%% automatically register collectors.
@ -71,6 +66,36 @@
-define(MG(K, MAP), maps:get(K, MAP)).
-define(MG0(K, MAP), maps:get(K, MAP, 0)).
-define(AUTHNS_WITH_TYPE, [
{emqx_authn_enable, gauge},
{emqx_authn_status, gauge},
{emqx_authn_nomatch, counter},
{emqx_authn_total, counter},
{emqx_authn_success, counter},
{emqx_authn_failed, counter}
]).
-define(AUTHZS_WITH_TYPE, [
{emqx_authz_enable, gauge},
{emqx_authz_status, gauge},
{emqx_authz_nomatch, counter},
{emqx_authz_total, counter},
{emqx_authz_success, counter},
{emqx_authz_failed, counter}
]).
-define(AUTHN_USERS_COUNT_WITH_TYPE, [
{emqx_authn_users_count, gauge}
]).
-define(AUTHZ_RULES_COUNT_WITH_TYPE, [
{emqx_authz_rules_count, gauge}
]).
-define(BANNED_WITH_TYPE, [
{emqx_banned_count, gauge}
]).
%%--------------------------------------------------------------------
%% Collector API
%%--------------------------------------------------------------------
@ -84,11 +109,11 @@ deregister_cleanup(_) -> ok.
Callback :: prometheus_collector:collect_mf_callback().
%% erlfmt-ignore
collect_mf(?PROMETHEUS_AUTH_REGISTRY, Callback) ->
_ = [add_collect_family(Name, authn_data(), Callback, gauge) || Name <- authn()],
_ = [add_collect_family(Name, authn_users_count_data(), Callback, gauge) || Name <- authn_users_count()],
_ = [add_collect_family(Name, authz_data(), Callback, gauge) || Name <- authz()],
_ = [add_collect_family(Name, authz_rules_count_data(), Callback, gauge) || Name <- authz_rules_count()],
_ = [add_collect_family(Name, banned_count_data(), Callback, gauge) || Name <- banned()],
ok = add_collect_family(Callback, ?AUTHNS_WITH_TYPE, authn_data()),
ok = add_collect_family(Callback, ?AUTHN_USERS_COUNT_WITH_TYPE, authn_users_count_data()),
ok = add_collect_family(Callback, ?AUTHZS_WITH_TYPE, authz_data()),
ok = add_collect_family(Callback, ?AUTHZ_RULES_COUNT_WITH_TYPE, authz_rules_count_data()),
ok = add_collect_family(Callback, ?BANNED_WITH_TYPE, banned_count_data()),
ok;
collect_mf(_, _) ->
ok.
@ -115,6 +140,10 @@ collect_auth_data(AuthDataType) ->
collect_banned_data() ->
#{emqx_banned_count => banned_count_data()}.
add_collect_family(Callback, MetricWithType, Data) ->
_ = [add_collect_family(Name, Data, Callback, Type) || {Name, Type} <- MetricWithType],
ok.
add_collect_family(Name, Data, Callback, Type) ->
Callback(create_mf(Name, _Help = <<"">>, Type, ?MODULE, Data)).
@ -132,19 +161,13 @@ collect_auth(K = emqx_authn_enable, Data) ->
collect_auth(K = emqx_authn_status, Data) ->
gauge_metrics(?MG(K, Data));
collect_auth(K = emqx_authn_nomatch, Data) ->
gauge_metrics(?MG(K, Data));
counter_metrics(?MG(K, Data));
collect_auth(K = emqx_authn_total, Data) ->
gauge_metrics(?MG(K, Data));
counter_metrics(?MG(K, Data));
collect_auth(K = emqx_authn_success, Data) ->
gauge_metrics(?MG(K, Data));
counter_metrics(?MG(K, Data));
collect_auth(K = emqx_authn_failed, Data) ->
gauge_metrics(?MG(K, Data));
collect_auth(K = emqx_authn_rate, Data) ->
gauge_metrics(?MG(K, Data));
collect_auth(K = emqx_authn_rate_last5m, Data) ->
gauge_metrics(?MG(K, Data));
collect_auth(K = emqx_authn_rate_max, Data) ->
gauge_metrics(?MG(K, Data));
counter_metrics(?MG(K, Data));
%%====================
%% Authn users count
%% Only provided for `password_based:built_in_database` and `scram:built_in_database`
@ -157,19 +180,13 @@ collect_auth(K = emqx_authz_enable, Data) ->
collect_auth(K = emqx_authz_status, Data) ->
gauge_metrics(?MG(K, Data));
collect_auth(K = emqx_authz_nomatch, Data) ->
gauge_metrics(?MG(K, Data));
counter_metrics(?MG(K, Data));
collect_auth(K = emqx_authz_total, Data) ->
gauge_metrics(?MG(K, Data));
counter_metrics(?MG(K, Data));
collect_auth(K = emqx_authz_success, Data) ->
gauge_metrics(?MG(K, Data));
counter_metrics(?MG(K, Data));
collect_auth(K = emqx_authz_failed, Data) ->
gauge_metrics(?MG(K, Data));
collect_auth(K = emqx_authz_rate, Data) ->
gauge_metrics(?MG(K, Data));
collect_auth(K = emqx_authz_rate_last5m, Data) ->
gauge_metrics(?MG(K, Data));
collect_auth(K = emqx_authz_rate_max, Data) ->
gauge_metrics(?MG(K, Data));
counter_metrics(?MG(K, Data));
%%====================
%% Authz rules count
%% Only provided for `file` and `built_in_database`
@ -190,21 +207,9 @@ collect_auth(emqx_banned_count, Data) ->
%%====================
%% Authn overview
authn() ->
[
emqx_authn_enable,
emqx_authn_status,
emqx_authn_nomatch,
emqx_authn_total,
emqx_authn_success,
emqx_authn_failed,
emqx_authn_rate,
emqx_authn_rate_last5m,
emqx_authn_rate_max
].
-spec authn_data() -> #{Key => [Point]} when
Key :: authn_metric_key(),
Key :: authn_metric_name(),
Point :: {[Label], Metric},
Label :: IdLabel,
IdLabel :: {id, AuthnName :: binary()},
@ -216,11 +221,11 @@ authn_data() ->
AccIn#{Key => authn_backend_to_points(Key, Authns)}
end,
#{},
authn()
authn_metric_names()
).
-spec authn_backend_to_points(Key, list(Authn)) -> list(Point) when
Key :: authn_metric_key(),
Key :: authn_metric_name(),
Authn :: map(),
Point :: {[Label], Metric},
Label :: IdLabel,
@ -238,27 +243,24 @@ do_authn_backend_to_points(K, [Authn | Rest], AccIn) ->
lookup_authn_metrics_local(Id) ->
case emqx_authn_api:lookup_from_local_node(?GLOBAL, Id) of
{ok, {_Node, Status, #{counters := Counters, rate := Rate}, _ResourceMetrics}} ->
{ok, {_Node, Status, #{counters := Counters}, _ResourceMetrics}} ->
#{
emqx_authn_status => status_to_number(Status),
emqx_authn_nomatch => ?MG0(nomatch, Counters),
emqx_authn_total => ?MG0(total, Counters),
emqx_authn_success => ?MG0(success, Counters),
emqx_authn_failed => ?MG0(failed, Counters),
emqx_authn_rate => ?MG0(current, Rate),
emqx_authn_rate_last5m => ?MG0(last5m, Rate),
emqx_authn_rate_max => ?MG0(max, Rate)
emqx_authn_failed => ?MG0(failed, Counters)
};
{error, _Reason} ->
maps:from_keys(authn() -- [emqx_authn_enable], 0)
maps:from_keys(authn_metric_names() -- [emqx_authn_enable], 0)
end.
authn_metric_names() ->
metric_names(?AUTHNS_WITH_TYPE).
%%====================
%% Authn users count
authn_users_count() ->
[emqx_authn_users_count].
-define(AUTHN_MNESIA, emqx_authn_mnesia).
-define(AUTHN_SCRAM_MNESIA, emqx_authn_scram_mnesia).
@ -283,21 +285,9 @@ authn_users_count_data() ->
%%====================
%% Authz overview
authz() ->
[
emqx_authz_enable,
emqx_authz_status,
emqx_authz_nomatch,
emqx_authz_total,
emqx_authz_success,
emqx_authz_failed,
emqx_authz_rate,
emqx_authz_rate_last5m,
emqx_authz_rate_max
].
-spec authz_data() -> #{Key => [Point]} when
Key :: authz_metric_key(),
Key :: authz_metric_name(),
Point :: {[Label], Metric},
Label :: TypeLabel,
TypeLabel :: {type, AuthZType :: binary()},
@ -309,11 +299,11 @@ authz_data() ->
AccIn#{Key => authz_backend_to_points(Key, Authzs)}
end,
#{},
authz()
authz_metric_names()
).
-spec authz_backend_to_points(Key, list(Authz)) -> list(Point) when
Key :: authz_metric_key(),
Key :: authz_metric_name(),
Authz :: map(),
Point :: {[Label], Metric},
Label :: TypeLabel,
@ -331,27 +321,24 @@ do_authz_backend_to_points(K, [Authz | Rest], AccIn) ->
lookup_authz_metrics_local(Type) ->
case emqx_authz_api_sources:lookup_from_local_node(Type) of
{ok, {_Node, Status, #{counters := Counters, rate := Rate}, _ResourceMetrics}} ->
{ok, {_Node, Status, #{counters := Counters}, _ResourceMetrics}} ->
#{
emqx_authz_status => status_to_number(Status),
emqx_authz_nomatch => ?MG0(nomatch, Counters),
emqx_authz_total => ?MG0(total, Counters),
emqx_authz_success => ?MG0(success, Counters),
emqx_authz_failed => ?MG0(failed, Counters),
emqx_authz_rate => ?MG0(current, Rate),
emqx_authz_rate_last5m => ?MG0(last5m, Rate),
emqx_authz_rate_max => ?MG0(max, Rate)
emqx_authz_failed => ?MG0(failed, Counters)
};
{error, _Reason} ->
maps:from_keys(authz() -- [emqx_authz_enable], 0)
maps:from_keys(authz_metric_names() -- [emqx_authz_enable], 0)
end.
authz_metric_names() ->
metric_names(?AUTHZS_WITH_TYPE).
%%====================
%% Authz rules count
authz_rules_count() ->
[emqx_authz_rules_count].
-define(ACL_TABLE, emqx_acl).
authz_rules_count_data() ->
@ -378,9 +365,6 @@ authz_rules_count_data() ->
%%====================
%% Banned count
banned() ->
[emqx_banned_count].
-define(BANNED_TABLE, emqx_banned).
banned_count_data() ->
mnesia_size(?BANNED_TABLE).
@ -477,3 +461,6 @@ users_or_rule_count(type, Type, #{emqx_authz_rules_count := Points} = _AuthzRule
end;
users_or_rule_count(_, _, _) ->
#{}.
metric_names(MetricWithType) when is_list(MetricWithType) ->
[Name || {Name, _Type} <- MetricWithType].