Skip to content

Commit df3ff26

Browse files
committed
update ReadMe doc in metric module
1 parent 8488a64 commit df3ff26

1 file changed

Lines changed: 28 additions & 61 deletions

File tree

iotdb-core/metrics/ReadMe.md

Lines changed: 28 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
-->
2121
Metric Module
2222

23-
- In this project, we provide interface and its implementation
23+
- In this project, we provide the metrics interface and its default implementation
2424
- metrics-interface
2525
- metrics-core
26-
- In each implementation, you can use several types of reporter to report metric
27-
- Jmx Reporter
26+
- The built-in implementation supports the following reporters
27+
- JMX Reporter
2828
- Prometheus Reporter
2929
- IoTDB Reporter
3030

@@ -43,7 +43,7 @@ Metric Module
4343
# 1. Design
4444
> The acquisition system consists of following four parts.
4545
46-
1. MetricsProvide tools for collecting metric in different scenarios, including Counter, Gauge, Histogram, Timer and Rate, each with tags.
46+
1. Metrics: Provide tools for collecting metrics in different scenarios, including Counter, AutoGauge, Gauge, Histogram, Timer and Rate, each with tags.
4747
2. MetricManager
4848
1. Provide functions such as create, query, update and remove metrics.
4949
2. Provide its own start and stop methods.
@@ -57,76 +57,43 @@ Metric Module
5757
3. Provide the ability to load metric sets.
5858
4. Provide the access of metricManager and CompositeReporter.
5959

60-
# 2. Test Report
61-
We implemented the monitoring framework mainly based on Micrometer, and tested the results as follows:
62-
63-
## 2.1. Test Environment
64-
1. Processor:Inter(R) Core(TM) i7-1065G7 CPU
65-
2. RAM: 32G
66-
67-
## 2.2. Test Metrics
68-
1. We use a single thread to create counter and run the test cases. The test metrics as follows:
69-
1. memory : Memory usage in MB.
70-
2. create : The time required to create, in ms.
71-
3. searchInorder : The time required for the sequential query, in ms.
72-
4. searchDisorder : The time required for random queries in ms.
73-
74-
## 2.3. Test parameters
75-
1. metric : test metric
76-
2. name : The name of the test metric, unify to one length.
77-
3. tag : The tag of the test metric, unify to one length.
78-
4. metricNumberTotal:The number of metrics tested.
79-
5. tagSingleNumber:Number of tags of the test metric.
80-
6. tagTotalNumber:The number of tag pools, the default is 1000, all
81-
7. tags are taken out of the tag pool.
82-
8. searchNumber:The number of queries, the default is 1000000.
83-
9. loop:The number of query loops, the default is 10.
84-
85-
## 2.4. Test Result
86-
![](https://cwiki.apache.org/confluence/download/attachments/184617400/image2021-7-14_16-32-55.png?version=1&modificationDate=1626403814000&api=v2)
87-
8860
# 3. How to use?
8961

9062
## 3.1. Configuration
91-
1. firstly, you need to set up some system property, for example:
92-
93-
```
94-
System.setProperty("line.separator", "\n");
95-
System.setProperty("IOTDB_CONF", "metrics/core/src/test/resources");
96-
```
97-
98-
2. Then, you can modify `iotdb-datanode.properties(iotdb-confignode.properties)` as you like, some details:
63+
Configure the metrics module through `iotdb-system.properties`. The main options supported by the current code are listed below.
9964

100-
| properties | meaning | example |
101-
|----------------------------------------| -------------------------------------------------------------------------------------- | ----------------------------------- |
102-
| dn(cn)_enable_metric | whether enable the module | true |
103-
| dn(cn)_enable_performance_stat | Is stat performance of operation latency | true |
104-
| dn(cn)_metric_reporter_list | the list of reporter | JMX, PROMETHEUS, IOTDB |
105-
| dn(cn)_metric_level | the init level of metrics | ALL, NORMAL, IMPORTANT, CORE |
106-
| dn(cn)_metric_async_collect_period | The period of the collection of some metrics in asynchronous way, such as tsfile size. | 5 |
65+
| properties | meaning | example |
66+
| --- | --- | --- |
67+
| `dn(cn)_metric_reporter_list` | Reporter list. The current implementation supports `JMX`, `PROMETHEUS` and `IOTDB`. | `JMX,PROMETHEUS` |
68+
| `dn(cn)_metric_level` | Initial metric level. | `OFF`, `CORE`, `IMPORTANT`, `NORMAL`, `ALL` |
69+
| `cn_metric_prometheus_reporter_port` | Prometheus HTTP port for ConfigNode. | `9091` |
70+
| `dn_metric_prometheus_reporter_port` | Prometheus HTTP port for DataNode. | `9092` |
10771

108-
3. More details, see User Doc.
72+
More details, see the User Guide and the `iotdb-system.properties.template` file.
10973

11074
## 3.2. Use Guide in IoTDB Server Module
111-
1. Now, MetricService is registered as IService in server and confignode module, you can simple set properties: `dn(cn)_enable_metric=true` to use metric service.
112-
2. In server module you can easily use these metric by `MetricService.getInstance()`, for example:
75+
1. `MetricService` is registered as an `IService` in both DataNode and ConfigNode modules. Enable it with `dn(cn)_enable_metric=true`.
76+
2. In server-side code you can use metrics through `MetricService.getInstance()`, for example:
11377

11478
```java
11579
MetricService.getInstance().count(1, "operation_count", MetricLevel.IMPORTANT, "name", operation.getName());
11680
```
11781

82+
3. If you want to bind or remove a metric set, use `addMetricSet(IMetricSet)` and `removeMetricSet(IMetricSet)`.
83+
11884
# 4. How to implement your own metric framework?
119-
1. implement your MetricService
120-
1. You need to implement `reloadProperties` to reload properties when running.
121-
2. implement your MetricManager
122-
1. You need to implement your metric manager to manage the creation and deletion of your metrics
123-
3. implement your reporter
124-
1. You need to implement jmx reporter and prometheus reporter, notice that your jmx bean name should be unified as `org.apache.iotdb.metrics`
125-
2. You need to create `src/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.core.reporter.IoTDBJmxReporter`
126-
4. implement your specific metric
127-
1. They are counter, gauge, histogram, histogramSnapshot, rate and timer.
128-
2. These metrics will be managed by your MetricManager, and reported by your reporter.
85+
1. Implement your metric types and an `AbstractMetricManager`.
86+
1. The built-in implementation provides Counter, AutoGauge, Gauge, Histogram, Rate and Timer.
87+
2. Implement your reporters.
88+
1. Implement `Reporter` for a general reporter.
89+
2. Implement `JmxReporter` if you need JMX registration. The built-in JMX domain is `org.apache.iotdb.metrics`.
90+
3. Wire your implementation into the server-side metric service.
91+
1. The current `MetricService` directly loads `IoTDBMetricManager`, `IoTDBJmxReporter`, `PrometheusReporter` and `IoTDBSessionReporter` in `loadManager()` and `loadReporter()`.
92+
2. If you replace the default framework, update the corresponding loading logic there.
93+
4. Keep service descriptor files consistent if your packaging depends on them.
94+
1. `src/main/resources/META-INF/services/org.apache.iotdb.metrics.AbstractMetricManager`
95+
2. `src/main/resources/META-INF/services/org.apache.iotdb.metrics.reporter.JmxReporter`
12996

13097
# 5. Some docs
13198
1. <a href = "https://iotdb.apache.org/UserGuide/latest/Tools-System/Monitor-Tool.html">Metric Tool</a>
132-
2. <a href = "https://iotdb.apache.org/zh/UserGuide/latest/Tools-System/Monitor-Tool.html">Metric Tool(zh)</a>
99+
2. <a href = "https://iotdb.apache.org/zh/UserGuide/latest/Tools-System/Monitor-Tool.html">Metric Tool(zh)</a>

0 commit comments

Comments
 (0)