Jelajahi Sumber

feat: add prometheus collectors config

Zhongwen Deng 3 tahun lalu
induk
melakukan
6710736243

+ 32 - 2
apps/emqx_conf/src/emqx_conf_schema.erl

@@ -980,7 +980,7 @@ desc("authorization") ->
 desc(_) ->
     undefined.
 
-translations() -> ["ekka", "kernel", "emqx", "gen_rpc"].
+translations() -> ["ekka", "kernel", "emqx", "gen_rpc", "prometheus"].
 
 translation("ekka") ->
     [{"cluster_discovery", fun tr_cluster_discovery/1}];
@@ -997,7 +997,37 @@ translation("emqx") ->
         {"local_override_conf_file", fun tr_local_override_conf_file/1}
     ];
 translation("gen_rpc") ->
-    [{"default_client_driver", fun tr_default_config_driver/1}].
+    [{"default_client_driver", fun tr_default_config_driver/1}];
+translation("prometheus") ->
+    [
+        {"vm_dist_collector_metrics", fun tr_vm_dist_collector/1},
+        {"mnesia_collector_metrics", fun tr_mnesia_collector/1},
+        {"vm_statistics_collector_metrics", fun tr_vm_statistics_collector/1},
+        {"vm_system_info_collector_metrics", fun tr_vm_system_info_collector/1},
+        {"vm_memory_collector_metrics", fun tr_vm_memory_collector/1},
+        {"vm_msacc_collector_metrics", fun tr_vm_msacc_collector/1}
+    ].
+
+tr_vm_dist_collector(Conf) ->
+    metrics_enabled(conf_get("prometheus.vm_dist_collector", Conf, enabled)).
+
+tr_mnesia_collector(Conf) ->
+    metrics_enabled(conf_get("prometheus.mnesia_collector", Conf, enabled)).
+
+tr_vm_statistics_collector(Conf) ->
+    metrics_enabled(conf_get("prometheus.vm_statistics_collector", Conf, enabled)).
+
+tr_vm_system_info_collector(Conf) ->
+    metrics_enabled(conf_get("prometheus.vm_system_info_collector", Conf, enabled)).
+
+tr_vm_memory_collector(Conf) ->
+    metrics_enabled(conf_get("prometheus.vm_system_info_collector", Conf, enabled)).
+
+tr_vm_msacc_collector(Conf) ->
+    metrics_enabled(conf_get("prometheus.vm_system_info_collector", Conf, enabled)).
+
+metrics_enabled(enabled) -> all;
+metrics_enabled(disabled) -> [].
 
 tr_default_config_driver(Conf) ->
     conf_get("rpc.driver", Conf).

+ 37 - 0
apps/emqx_prometheus/i18n/emqx_prometheus_schema_i18n.conf

@@ -30,4 +30,41 @@ emqx_prometheus_schema {
       zh: """开启或关闭 Prometheus 数据推送"""
     }
   }
+  vm_dist_collector {
+    desc {
+      en: """Enable or disable VM distribution collector, collects information about the sockets and processes involved in the Erlang distribution mechanism."""
+      zh: """开启或关闭 VM 分布采集器,收集 Erlang 分布机制中涉及的套接字和进程的信息。"""
+    }
+  }
+  mnesia_collector {
+    desc {
+      en: """Enable or disable Mnesia collector, collects Mnesia metrics mainly using mnesia:system_info/1 ."""
+      zh: """开启或关闭 Mnesia 采集器, 使用 mnesia:system_info/1 收集 Mnesia 相关指标"""
+    }
+  }
+  vm_statistics_collector {
+    desc {
+      en: """Enable or disable VM statistics collector, collects Erlang VM metrics using erlang:statistics/1 ."""
+      zh: """开启或关闭 VM 统计采集器, 使用 erlang:statistics/1 收集 Erlang VM 相关指标"""
+    }
+  }
+
+  vm_system_info_collector {
+    desc {
+      en: """Enable or disable VM system info collector, collects Erlang VM metrics using erlang:system_info/1 ."""
+      zh: """开启或关闭 VM 系统信息采集器, 使用 erlang:system_info/1 收集 Erlang VM 相关指标"""
+    }
+  }
+  vm_memory_collector {
+    desc {
+      en: """Enable or disable VM memory collector, collects information about memory dynamically allocated by the Erlang emulator using erlang:memory/0 , also provides basic (D)ETS statistics ."""
+      zh: """开启或关闭 VM 内存采集器, 使用 erlang:memory/0 收集 Erlang 虚拟机动态分配的内存信息,同时提供基本的 (D)ETS 统计信息"""
+    }
+    }
+  vm_msacc_collector {
+    desc {
+      en: """Enable or disable VM msacc collector, collects microstate accounting metrics using erlang:statistics(microstate_accounting) ."""
+      zh: """开启或关闭 VM msacc 采集器, 使用 erlang:statistics(microstate_accounting) 收集微状态计数指标"""
+    }
+  }
 }

+ 60 - 0
apps/emqx_prometheus/src/emqx_prometheus_schema.erl

@@ -59,6 +59,66 @@ fields("prometheus") ->
                     required => true,
                     desc => ?DESC(enable)
                 }
+            )},
+        {vm_dist_collector,
+            ?HOCON(
+                hoconsc:enum([enabled, disabled]),
+                #{
+                    default => enabled,
+                    required => true,
+                    hidden => true,
+                    desc => ?DESC(vm_dist_collector)
+                }
+            )},
+        {mnesia_collector,
+            ?HOCON(
+                hoconsc:enum([enabled, disabled]),
+                #{
+                    default => enabled,
+                    required => true,
+                    hidden => true,
+                    desc => ?DESC(mnesia_collector)
+                }
+            )},
+        {vm_statistics_collector,
+            ?HOCON(
+                hoconsc:enum([enabled, disabled]),
+                #{
+                    default => enabled,
+                    required => true,
+                    hidden => true,
+                    desc => ?DESC(vm_statistics_collector)
+                }
+            )},
+        {vm_system_info_collector,
+            ?HOCON(
+                hoconsc:enum([enabled, disabled]),
+                #{
+                    default => enabled,
+                    required => true,
+                    hidden => true,
+                    desc => ?DESC(vm_system_info_collector)
+                }
+            )},
+        {vm_memory_collector,
+            ?HOCON(
+                hoconsc:enum([enabled, disabled]),
+                #{
+                    default => enabled,
+                    required => true,
+                    hidden => true,
+                    desc => ?DESC(vm_memory_collector)
+                }
+            )},
+        {vm_msacc_collector,
+            ?HOCON(
+                hoconsc:enum([enabled, disabled]),
+                #{
+                    default => enabled,
+                    required => true,
+                    hidden => true,
+                    desc => ?DESC(vm_msacc_collector)
+                }
             )}
     ].
 

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

@@ -28,6 +28,12 @@
     "  push_gateway_server = \"http://127.0.0.1:9091\"\n"
     "  interval = \"1s\"\n"
     "  enable = true\n"
+    "  vm_dist_collector = enabled\n"
+    "  mnesia_collector = enabled\n"
+    "  vm_statistics_collector = disabled\n"
+    "  vm_system_info_collector = disabled\n"
+    "  vm_memory_collector = enabled\n"
+    "  vm_msacc_collector = enabled\n"
     "}\n"
 >>).
 
@@ -71,7 +77,8 @@ t_start_stop(_) ->
     %% wait the interval timer tigger
     timer:sleep(2000).
 
-t_test(_) ->
+t_collector_no_crash_test(_) ->
+    prometheus_text_format:format(),
     ok.
 
 t_only_for_coverage(_) ->