feat: add prometheus.push_gateway.enable config

This commit is contained in:
zhongwencool 2023-11-17 08:42:55 +08:00
parent c4eb9f86e7
commit b2e168d508
6 changed files with 56 additions and 37 deletions

View File

@ -64,15 +64,12 @@ to_recommend_type(Conf) ->
}. }.
to_push_gateway(Conf) -> to_push_gateway(Conf) ->
Init = maps:with([<<"interval">>, <<"headers">>, <<"job_name">>], Conf), Init = maps:with([<<"interval">>, <<"headers">>, <<"job_name">>, <<"enable">>], Conf),
case maps:get(<<"push_gateway_server">>, Conf, "") of case maps:get(<<"push_gateway_server">>, Conf, "") of
"" -> "" ->
Init#{<<"url">> => <<"">>}; Init#{<<"enable">> => false};
Url -> Url ->
case maps:get(<<"enable">>, Conf, false) of Init#{<<"url">> => Url}
false -> Init#{<<"url">> => <<"">>};
true -> Init#{<<"url">> => Url}
end
end. end.
to_collectors(Conf) -> to_collectors(Conf) ->
@ -134,6 +131,9 @@ update_auth(_, _) ->
conf() -> conf() ->
emqx_config:get(?PROMETHEUS). emqx_config:get(?PROMETHEUS).
is_push_gateway_server_enabled(#{enable := true, push_gateway_server := Url}) -> Url =/= ""; is_push_gateway_server_enabled(#{enable := true, push_gateway_server := Url}) ->
is_push_gateway_server_enabled(#{push_gateway := #{url := Url}}) -> Url =/= ""; Url =/= "";
is_push_gateway_server_enabled(_) -> false. is_push_gateway_server_enabled(#{push_gateway := #{url := Url, enable := Enable}}) ->
Enable andalso Url =/= "";
is_push_gateway_server_enabled(_) ->
false.

View File

@ -72,12 +72,21 @@ fields(recommend_setting) ->
]; ];
fields(push_gateway) -> fields(push_gateway) ->
[ [
{enable,
?HOCON(
boolean(),
#{
default => false,
required => true,
desc => ?DESC(push_gateway_enable)
}
)},
{url, {url,
?HOCON( ?HOCON(
string(), string(),
#{ #{
required => false, required => false,
default => <<"">>, default => <<"http://127.0.0.1:9091">>,
validator => fun ?MODULE:validate_url/1, validator => fun ?MODULE:validate_url/1,
desc => ?DESC(push_gateway_url) desc => ?DESC(push_gateway_url)
} }
@ -197,7 +206,7 @@ fields(legacy_deprecated_setting) ->
)}, )},
{headers, {headers,
?HOCON( ?HOCON(
list({string(), string()}), typerefl:alias("map", list({string(), string()}), #{}, [string(), string()]),
#{ #{
default => #{}, default => #{},
required => false, required => false,
@ -214,7 +223,6 @@ fields(legacy_deprecated_setting) ->
desc => ?DESC(legacy_job_name) desc => ?DESC(legacy_job_name)
} }
)}, )},
{enable, {enable,
?HOCON( ?HOCON(
boolean(), boolean(),
@ -353,11 +361,6 @@ validate_url(Url) ->
S =:= <<"http">> S =:= <<"http">>
-> ->
ok; ok;
%% default is ""
#{path := []} ->
ok;
#{path := <<>>} ->
ok;
_ -> _ ->
{error, "Invalid url"} {error, "Invalid url"}
end. end.

View File

@ -53,6 +53,7 @@
}, },
<<"push_gateway">> => <<"push_gateway">> =>
#{ #{
<<"enable">> => true,
<<"headers">> => #{<<"Authorization">> => <<"some-authz-tokens">>}, <<"headers">> => #{<<"Authorization">> => <<"some-authz-tokens">>},
<<"interval">> => <<"1s">>, <<"interval">> => <<"1s">>,
<<"job_name">> => <<"${name}~${host}">>, <<"job_name">> => <<"${name}~${host}">>,

View File

@ -180,11 +180,11 @@ t_prometheus_api(_) ->
), ),
#{ #{
<<"push_gateway">> := <<"push_gateway">> :=
#{<<"url">> := Url} = PushGateway, #{<<"url">> := Url, <<"enable">> := Enable} = PushGateway,
<<"collectors">> := Collector <<"collectors">> := Collector
} = Conf, } = Conf,
Pid = erlang:whereis(emqx_prometheus), Pid = erlang:whereis(emqx_prometheus),
?assertEqual(Url =/= "", undefined =/= Pid, {Url, Pid}), ?assertEqual(Enable, undefined =/= Pid, {Url, Pid}),
NewConf = Conf#{ NewConf = Conf#{
<<"push_gateway">> => PushGateway#{ <<"push_gateway">> => PushGateway#{
@ -250,7 +250,7 @@ t_prometheus_api(_) ->
emqx_config:get([prometheus]) emqx_config:get([prometheus])
), ),
NewConf1 = Conf#{<<"push_gateway">> => PushGateway#{<<"url">> => <<"">>}}, NewConf1 = Conf#{<<"push_gateway">> => PushGateway#{<<"enable">> => false}},
{ok, _Response3} = emqx_mgmt_api_test_util:request_api(put, Path, "", Auth, NewConf1), {ok, _Response3} = emqx_mgmt_api_test_util:request_api(put, Path, "", Auth, NewConf1),
?assertEqual(undefined, erlang:whereis(emqx_prometheus)), ?assertEqual(undefined, erlang:whereis(emqx_prometheus)),

View File

@ -1,10 +1,24 @@
## Prometheus ## Prometheus
## EMQX's Prometheus scraping endpoint is enabled by default without authentication. ## EMQX's Prometheus scraping endpoint is enabled by default without authentication.
## And there is no way to turn it off. ## You can enable basic authentication by setting enable_basic_auth to true.
## You can inspect it with a curl command: curl -f "127.0.0.1:18083/api/v5/prometheus/stats" ## You can inspect it with a curl command: curl -f "127.0.0.1:18083/api/v5/prometheus/stats"
prometheus { prometheus {
# turn off this expensive collector enable_basic_auth = false
vm_dist_collector = disabled push_gateway {
enable = false
url = "http://127.0.0.1:9091"
headers {Authorization = "Basic YWRtaW46Y2JraG55eWd5QDE="}
interval = 15s
job_name = "${name}/instance/${name}~${host}"
}
collectors {
mnesia = disabled
vm_dist = disabled
vm_memory = disabled
vm_msacc = disabled
vm_statistics = disabled
vm_system_info = enabled
}
} }

View File

@ -37,8 +37,9 @@ recommend_setting.desc:
"""Recommended setting""" """Recommended setting"""
push_gateway_url.desc: push_gateway_url.desc:
"""URL of Pushgateway server. Pushgateway is optional, should not be configured if prometheus is to scrape EMQX. """URL of Pushgateway server. Pushgateway is optional, should not be configured if prometheus is to scrape EMQX."""
Set url to "" to disable push gateway""" push_gateway_enable.desc:
"""Enable or disable Pushgateway"""
mnesia_collector.desc: mnesia_collector.desc:
"""Collects Mnesia metrics mainly using <code> mnesia:system_info/1 </code>""" """Collects Mnesia metrics mainly using <code> mnesia:system_info/1 </code>"""
@ -61,42 +62,42 @@ vm_system_info_collector.desc:
"""Enable or disable VM system info collector.""" """Enable or disable VM system info collector."""
legacy_deprecated_setting.desc: legacy_deprecated_setting.desc:
"""Deprecated""" """Deprecated since 5.4.0"""
legacy_enable.desc: legacy_enable.desc:
"""Deprecated, use `prometheus.push_gateway.url` instead""" """Deprecated since 5.4.0, use `prometheus.push_gateway.url` instead"""
legacy_headers.desc: legacy_headers.desc:
"""Deprecated, use `prometheus.push_gateway.headers` instead""" """Deprecated since 5.4.0, use `prometheus.push_gateway.headers` instead"""
legacy_interval.desc: legacy_interval.desc:
"""Deprecated, use `prometheus.push_gateway.interval` instead""" """Deprecated since 5.4.0, use `prometheus.push_gateway.interval` instead"""
legacy_job_name.desc: legacy_job_name.desc:
"""Deprecated, use `prometheus.push_gateway.job_name` instead""" """Deprecated since 5.4.0, use `prometheus.push_gateway.job_name` instead"""
legacy_push_gateway_server.desc: legacy_push_gateway_server.desc:
"""Deprecated, use `prometheus.push_gateway.url` instead""" """Deprecated since 5.4.0, use `prometheus.push_gateway.url` instead"""
legacy_mnesia_collector.desc: legacy_mnesia_collector.desc:
"""Deprecated, use `prometheus.collectors.mnesia` instead""" """Deprecated since 5.4.0, use `prometheus.collectors.mnesia` instead"""
legacy_vm_dist_collector.desc: legacy_vm_dist_collector.desc:
"""Deprecated, use `prometheus.collectors.vm_dist` instead""" """Deprecated since 5.4.0, use `prometheus.collectors.vm_dist` instead"""
legacy_vm_memory_collector.desc: legacy_vm_memory_collector.desc:
"""Deprecated, use `prometheus.collectors.vm_memory` instead""" """Deprecated since 5.4.0, use `prometheus.collectors.vm_memory` instead"""
legacy_vm_msacc_collector.desc: legacy_vm_msacc_collector.desc:
"""Deprecated, use `prometheus.collectors.vm_msacc` instead""" """Deprecated since 5.4.0, use `prometheus.collectors.vm_msacc` instead"""
legacy_vm_statistics_collector.desc: legacy_vm_statistics_collector.desc:
"""Deprecated, use `prometheus.collectors.vm_statistics` instead""" """Deprecated since 5.4.0, use `prometheus.collectors.vm_statistics` instead"""
legacy_vm_system_info_collector.desc: legacy_vm_system_info_collector.desc:
"""Deprecated, use `prometheus.collectors.vm_system_info` instead""" """Deprecated, use `prometheus.collectors.vm_system_info` instead"""
legacy_deprecated_setting.desc: legacy_deprecated_setting.desc:
"""Deprecated""" """Deprecated since 5.4.0"""
} }