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) ->
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
"" ->
Init#{<<"url">> => <<"">>};
Init#{<<"enable">> => false};
Url ->
case maps:get(<<"enable">>, Conf, false) of
false -> Init#{<<"url">> => <<"">>};
true -> Init#{<<"url">> => Url}
end
Init#{<<"url">> => Url}
end.
to_collectors(Conf) ->
@ -134,6 +131,9 @@ update_auth(_, _) ->
conf() ->
emqx_config:get(?PROMETHEUS).
is_push_gateway_server_enabled(#{enable := true, push_gateway_server := Url}) -> Url =/= "";
is_push_gateway_server_enabled(#{push_gateway := #{url := Url}}) -> Url =/= "";
is_push_gateway_server_enabled(_) -> false.
is_push_gateway_server_enabled(#{enable := true, push_gateway_server := Url}) ->
Url =/= "";
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) ->
[
{enable,
?HOCON(
boolean(),
#{
default => false,
required => true,
desc => ?DESC(push_gateway_enable)
}
)},
{url,
?HOCON(
string(),
#{
required => false,
default => <<"">>,
default => <<"http://127.0.0.1:9091">>,
validator => fun ?MODULE:validate_url/1,
desc => ?DESC(push_gateway_url)
}
@ -197,7 +206,7 @@ fields(legacy_deprecated_setting) ->
)},
{headers,
?HOCON(
list({string(), string()}),
typerefl:alias("map", list({string(), string()}), #{}, [string(), string()]),
#{
default => #{},
required => false,
@ -214,7 +223,6 @@ fields(legacy_deprecated_setting) ->
desc => ?DESC(legacy_job_name)
}
)},
{enable,
?HOCON(
boolean(),
@ -353,11 +361,6 @@ validate_url(Url) ->
S =:= <<"http">>
->
ok;
%% default is ""
#{path := []} ->
ok;
#{path := <<>>} ->
ok;
_ ->
{error, "Invalid url"}
end.

View File

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

View File

@ -180,11 +180,11 @@ t_prometheus_api(_) ->
),
#{
<<"push_gateway">> :=
#{<<"url">> := Url} = PushGateway,
#{<<"url">> := Url, <<"enable">> := Enable} = PushGateway,
<<"collectors">> := Collector
} = Conf,
Pid = erlang:whereis(emqx_prometheus),
?assertEqual(Url =/= "", undefined =/= Pid, {Url, Pid}),
?assertEqual(Enable, undefined =/= Pid, {Url, Pid}),
NewConf = Conf#{
<<"push_gateway">> => PushGateway#{
@ -250,7 +250,7 @@ t_prometheus_api(_) ->
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),
?assertEqual(undefined, erlang:whereis(emqx_prometheus)),

View File

@ -1,10 +1,24 @@
## Prometheus
## 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"
prometheus {
# turn off this expensive collector
vm_dist_collector = disabled
enable_basic_auth = false
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"""
push_gateway_url.desc:
"""URL of Pushgateway server. Pushgateway is optional, should not be configured if prometheus is to scrape EMQX.
Set url to "" to disable push gateway"""
"""URL of Pushgateway server. Pushgateway is optional, should not be configured if prometheus is to scrape EMQX."""
push_gateway_enable.desc:
"""Enable or disable Pushgateway"""
mnesia_collector.desc:
"""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."""
legacy_deprecated_setting.desc:
"""Deprecated"""
"""Deprecated since 5.4.0"""
legacy_enable.desc:
"""Deprecated, use `prometheus.push_gateway.url` instead"""
"""Deprecated since 5.4.0, use `prometheus.push_gateway.url` instead"""
legacy_headers.desc:
"""Deprecated, use `prometheus.push_gateway.headers` instead"""
"""Deprecated since 5.4.0, use `prometheus.push_gateway.headers` instead"""
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:
"""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:
"""Deprecated, use `prometheus.push_gateway.url` instead"""
"""Deprecated since 5.4.0, use `prometheus.push_gateway.url` instead"""
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:
"""Deprecated, use `prometheus.collectors.vm_dist` instead"""
"""Deprecated since 5.4.0, use `prometheus.collectors.vm_dist` instead"""
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:
"""Deprecated, use `prometheus.collectors.vm_msacc` instead"""
"""Deprecated since 5.4.0, use `prometheus.collectors.vm_msacc` instead"""
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:
"""Deprecated, use `prometheus.collectors.vm_system_info` instead"""
legacy_deprecated_setting.desc:
"""Deprecated"""
"""Deprecated since 5.4.0"""
}