Просмотр исходного кода

feat: add prometheus.push_gateway.enable config

zhongwencool 2 лет назад
Родитель
Сommit
b2e168d508

+ 9 - 9
apps/emqx_prometheus/src/emqx_prometheus_config.erl

@@ -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.

+ 11 - 8
apps/emqx_prometheus/src/emqx_prometheus_schema.erl

@@ -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.

+ 1 - 0
apps/emqx_prometheus/test/emqx_prometheus_SUITE.erl

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

+ 3 - 3
apps/emqx_prometheus/test/emqx_prometheus_api_SUITE.erl

@@ -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)),
 

+ 17 - 3
rel/config/examples/prometheus.conf.example

@@ -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
+  }
 }

+ 15 - 14
rel/i18n/emqx_prometheus_schema.hocon

@@ -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"""
 
 }