Metric Module
In this project, we provide interface and two implementations
In each implementation, you can use many types of reporter to report the details of metric

We implemented the monitoring framework using Dropwizard and Micrometer respectively, and tested the results as follows:

System.setProperty("line.separator", "\n");
System.setProperty("IOTDB_CONF", "metrics/dropwizard-metrics/src/test/resources");
iotdb-metric.yml as you like, some details:| properties | meaning | example |
|---|---|---|
| enableMetric | whether enable the module | true |
| metricReporterList | the list of reporter | JMX, PROMETHEUS |
| predefinedMetrics | predefined set of metrics | JMX, LOGBACK |
| metricLevel | the init level of metrics | ALL, NORMAL, IMPORTANT, CORE |
| monitorType | The type of monitor manager | DROPWIZARD, MICROMETER |
| pushPeriodInSecond | the period time of push(used for prometheus, unit: s) | 5 |
startService method to load manager and reporters.MetricService.getMetricManager() to get metric manager.metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricManagerpublic class PrometheusRunTest { static MetricConfig metricConfig = MetricConfigDescriptor.getInstance().getMetricConfig(); static MetricService metricService = new DoNothingMetricService(); static MetricManager metricManager; public static void main(String[] args) throws InterruptedException { metricConfig.setMonitorType(MonitorType.dropwizard); metricConfig.setPredefinedMetrics(new ArrayList<>()); metricService.startService(); metricManager = metricService.getMetricManager(); Counter counter = metricManager.getOrCreateCounter("counter", MetricLevel.IMPORTANT); while (true) { counter.inc(); TimeUnit.SECONDS.sleep(1); } } }
enableMetric: true to get a instance of MetricsService.MetricsService.getInstance().getMetricManager(), for example:MetricsService.getInstance() .count(1, "operation_count", MetricLevel.IMPORTANT, "name", operation.getName());
collectFileSystemInfo to collect file system info as you like.reloadProperties to support hot load.monitorType, MetricService will init manager according to the prefix of class name.src/main/resources/META-INF/services/org.apache.iotdb.metrics.MetricManager,and record your MetricManager class name in this file, such as org.apache.iotdb.metrics.dropwizard.DropwizardMetricManagerorg.apache.iotdb.metricsmonitorTypesrc/main/resources/META-INF/services/org.apache.iotdb.metrics.Reporter,and record your MetricManager class name in this file, such as org.apache.iotdb.metrics.dropwizard.reporter.DropwizardPrometheusReportermetrics/interface/src/main/java/org/apache/iotdb/metrics/utils/PredefinedMetric, such as System and Thread.enablePredefinedMetric(PredefinedMetric metric) in your manager.