WillemJiang closed pull request #24: [SCB-132] Metrics MD
URL: https://github.com/apache/incubator-servicecomb-website/pull/24
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/_data/navigation.yml b/_data/navigation.yml
index bb6c190..9905397 100755
--- a/_data/navigation.yml
+++ b/_data/navigation.yml
@@ -92,6 +92,13 @@ t:
           - title: Zuul
             url: /users/edging-service/zuul/
 
+      - title: Monitor
+        children:
+          - title: Metrics-in-1.0.0-m1
+            url: /users/metrics-in-1.0.0-m1/
+          - title: Metrics-integration-with-prometheus-in-1.0.0-m1
+            url: /users/metrics-integration-with-prometheus-in-1.0.0-m1/
+
       - title: Deployment
         children:
           - title: Run Mode
diff --git a/_users/cn/metrics-in-1.0.0-m1.md b/_users/cn/metrics-in-1.0.0-m1.md
index 75becf3..00c8781 100644
--- a/_users/cn/metrics-in-1.0.0-m1.md
+++ b/_users/cn/metrics-in-1.0.0-m1.md
@@ -10,7 +10,7 @@ redirect_from:
 ---
 
 {% include toc %}
-??????0.5.0??????????Metrics?1.0.0-m1???????????????????????ServiceComb????([email protected])??????????
+??????0.5.0??????????Metrics?1.0.0-m1?????????????????[Release 
Note](https://github.com/apache/incubator-servicecomb-java-chassis/releases)??????????????????????????ServiceComb????([email protected])?????
 
 ## ??
 ??????????????????????????????????????
@@ -21,7 +21,7 @@ redirect_from:
 
 ![MicroserviceArch](/assets/images/MicroserviceArch.png)
 
-????????????????????????????????????CI/CD??????????????????????????????????????????????????????????
+??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
 
 ## 1.0.00-m1????
 ?0.5.0???????[0.5.0??????](/cn/users/metrics-in-0.5.0/)?????????
@@ -31,84 +31,88 @@ redirect_from:
 4. ??????????????????????????????  
 5. ??foundation-metrics????????????????????????  
 
-????0.5.0?????1.0.0-m1????????????????????Metrics???????  
+????0.5.0?????1.0.0-m1????????????????????Metrics?????????  
 
-| Module?             | ??                              |
-| :------------------ | :------------------------------ |
-| metrics-core        | Metric???????????Metrics??????  |
-| metrics-common      | Metric?????????Metric DTO?????? |
-| metrics-extension   | ??Metric???????                 |
-| metrics-integration | ??Metric?????????               |
-| metrics-sample      | ??Metric?????                   |
+| Module?             | ??                               |
+| :------------------ | :------------------------------- |
+| metrics-core        | Metrics???????????Metrics??????  |
+| metrics-common      | Metrics?????????Metric DTO?????? |
+| metrics-extension   | ??Metrics???????                 |
+| metrics-integration | ??Metrics?????????               |
 
 ?????????????
 ![MetricsDependency.png](/assets/images/MetricsDependency.png)
 
 ### ????????Hystrix?handler-bizkeeper????????????????????
-1.0.0-m1?????Hystrix?????TPS?Latency???????Java Chassis Bizkeeper 
Handler????????????????foundation-common??EventBus???????metrics-core??DefaultEventListenerManager???????????????????
-  
+1.0.0-m1?????Hystrix?????TPS?Latency???????Java Chassis Bizkeeper 
Handler????????????????foundation-common??EventBus???????metrics-core??DefaultEventListenerManager???????????????????
+
 | ????????                               | ??                        |
 | :------------------------------------- | :------------------------ |
 | InvocationStartedEventListener         | Consumer???Producer????   |
 | InvocationStartProcessingEventListener | Producer????????????      |
 | InvocationFinishedEventListener        | Consumer?????Producer???? |
 
-*?????Java 
Chassis?Reactor????Vertx????Producer???Invocation????????????????????????????Invocation?????????LifeTimeInQueue????????waitInQueue????????????????????????????????????Consumer????????????????InvocationStartProcessingEvent?*
+*?????Java 
Chassis?Reactor????[Vertx](http://vertx.io/)?????????????Producer???Invocation????????????????????????????Invocation?????????**LifeTimeInQueue**????????**waitInQueue**????????????????????????????????????Consumer????????????????InvocationStartProcessingEvent?*
 
-????????????Java 
Chassis?RestInvocation?HighwayServerInvoke?HighwayClient?VertxHttpMethod???????????Metrics?EventBus??????????????????????????
+??????????Java 
Chassis?RestInvocation?HighwayServerInvoke?InvokerUtils???????????Metrics?EventBus??????Metrics?????????????????????
 
 ### ??Netflix Servo??Metric????
-Netflix Servo???????????Monitor??????????  
+[Netflix Servo](https://github.com/Netflix/servo)???????????Monitor??????????  
 
-| Monitor?     | ??            |
-| :----------- | :------------ |
-| BasicCounter | ????????????? |
-| StepCounter  | ???????       |
-| MinGauge     | ????????      |
-| MaxGauge     | ????????      |
+| Monitor?     | ??                               |
+| :----------- | :------------------------------- |
+| BasicCounter | ?????????????                    |
+| StepCounter  | ??????????????ResettableCounter? |
+| MinGauge     | ????????                         |
+| MaxGauge     | ????????                         |
 
 *???Servo???0.10.1*
 
 ### ????
-Metric????????  
-1. ?????????????????????????????Consumer??????Metric??????????
-2. 
???????????????????????????????????????????????????????????????????Servo?????????[?Polling
 Intervals?](https://github.com/Netflix/servo/wiki/Getting-Started)?  
-?1.0.0-m1?????servicecomb.metrics.window_time????????servo.pollers???
-
+Metrics??????????????????????????????  
+1. ????
+  ??????????????????????????CPU????????Heap?????????????????????????
+2. ????
+  ????????????????????????????????????Window Time??????????  
+  a) ?????????Max?Min?Median?????;    
+  b) ?????????TPS?transaction per second??    
+  c) ????????????????????    
+  ????Metrics????????????????????????????Servo?????????[?Polling 
Intervals?](https://github.com/Netflix/servo/wiki/Getting-Started)?    
+  
?1.0.0-m1???????microservice.yaml??servicecomb.metrics.window_time??????????servo.pollers???
  
 ## Metric??
 ?1.0.0-m1????????Operation???Metric????????  
 
-| Group       | Level                    | Catalog  | Metrics         | Item   
        |
-| :---------- | :----------------------- | :------- | :-------------- | 
:------------- |
-| servicecomb | instance                 | system   | cpu             | load   
        |
-| servicecomb | instance                 | system   | cpu             | 
runningThreads |
-| servicecomb | instance                 | system   | heap            | init   
        |
-| servicecomb | instance                 | system   | heap            | max    
        |
-| servicecomb | instance                 | system   | heap            | commit 
        |
-| servicecomb | instance                 | system   | heap            | used   
        |
-| servicecomb | instance                 | system   | nonHeap         | init   
        |
-| servicecomb | instance                 | system   | nonHeap         | max    
        |
-| servicecomb | instance                 | system   | nonHeap         | commit 
        |
-| servicecomb | instance                 | system   | nonHeap         | used   
        |
-| servicecomb | instance/operationName   | producer | waitInQueue     | count  
        |
-| servicecomb | instance/operationName   | producer | lifeTimeInQueue | 
average        |
-| servicecomb | instance/operationName   | producer | lifeTimeInQueue | max    
        |
-| servicecomb | instance/operationName   | producer | lifeTimeInQueue | min    
        |
-| servicecomb | instance/operationName   | producer | executionTime   | 
average        |
-| servicecomb | instance/operationName   | producer | executionTime   | max    
        |
-| servicecomb | instance/operationName   | producer | executionTime   | min    
        |
-| servicecomb | instance/operationName   | producer | producerLatency | 
average        |
-| servicecomb | instance/operationName   | producer | producerLatency | max    
        |
-| servicecomb | instance/operationName   | producer | producerLatency | min    
        |
-| servicecomb | instance/operationName   | producer | producerCall    | total  
        |
-| servicecomb | instance/operationName   | producer | producerCall    | tps    
        |
-| servicecomb | instance/operationName   | consumer | consumerLatency | 
average        |
-| servicecomb | instance/operationName   | consumer | consumerLatency | max    
        |
-| servicecomb | instance/operationName   | consumer | consumerLatency | min    
        |
-| servicecomb | instance/operationName   | consumer | consumerCall    | total  
        |
-| servicecomb | instance/operationName   | consumer | consumerCall    | tps    
        |
-
-*operationName?????Operation????????Java Chassis 
MicroserviceQualifiedName???????.SchemaID.?????????*
+| Group       | Level                  | Catalog  | Metrics         | Item     
      |
+| :---------- | :--------------------- | :------- | :-------------- | 
:------------- |
+| servicecomb | instance               | system   | cpu             | load     
      |
+| servicecomb | instance               | system   | cpu             | 
runningThreads |
+| servicecomb | instance               | system   | heap            | init     
      |
+| servicecomb | instance               | system   | heap            | max      
      |
+| servicecomb | instance               | system   | heap            | commit   
      |
+| servicecomb | instance               | system   | heap            | used     
      |
+| servicecomb | instance               | system   | nonHeap         | init     
      |
+| servicecomb | instance               | system   | nonHeap         | max      
      |
+| servicecomb | instance               | system   | nonHeap         | commit   
      |
+| servicecomb | instance               | system   | nonHeap         | used     
      |
+| servicecomb | instance | operationName | producer | waitInQueue     | 
count          |
+| servicecomb | instance | operationName | producer | lifeTimeInQueue | 
average        |
+| servicecomb | instance | operationName | producer | lifeTimeInQueue | 
max            |
+| servicecomb | instance | operationName | producer | lifeTimeInQueue | 
min            |
+| servicecomb | instance | operationName | producer | executionTime   | 
average        |
+| servicecomb | instance | operationName | producer | executionTime   | 
max            |
+| servicecomb | instance | operationName | producer | executionTime   | 
min            |
+| servicecomb | instance | operationName | producer | producerLatency | 
average        |
+| servicecomb | instance | operationName | producer | producerLatency | 
max            |
+| servicecomb | instance | operationName | producer | producerLatency | 
min            |
+| servicecomb | instance | operationName | producer | producerCall    | 
total          |
+| servicecomb | instance | operationName | producer | producerCall    | 
tps            |
+| servicecomb | instance | operationName | consumer | consumerLatency | 
average        |
+| servicecomb | instance | operationName | consumer | consumerLatency | 
max            |
+| servicecomb | instance | operationName | consumer | consumerLatency | 
min            |
+| servicecomb | instance | operationName | consumer | consumerCall    | 
total          |
+| servicecomb | instance | operationName | consumer | consumerCall    | 
tps            |
+
+**?Level????instance???????????????Metric??????????Operation?Metric?operationName????Java
 Chassis MicroserviceQualifiedName???????.SchemaID.?????????**
 
 ## ????
 ### ????
diff --git a/_users/cn/metrics-integration-with-prometheus-in-1.0.0-m1.md 
b/_users/cn/metrics-integration-with-prometheus-in-1.0.0-m1.md
index 8bbaf40..58809b2 100644
--- a/_users/cn/metrics-integration-with-prometheus-in-1.0.0-m1.md
+++ b/_users/cn/metrics-integration-with-prometheus-in-1.0.0-m1.md
@@ -10,14 +10,14 @@ redirect_from:
 ---
 
 {% include toc %}
-??????0.5.0??????????Metrics?1.0.0-m1???????????????????????ServiceComb????([email protected])??????????
+??????0.5.0??????????Metrics?1.0.0-m1?????????????????[Release 
Note](https://github.com/apache/incubator-servicecomb-java-chassis/releases)??????????????????????????ServiceComb????([email protected])?????
 
 ## ??
 [?????](http://www.prometheus.io/)????Google 
Borgmon????????????[CNCF](https://www.cncf.io/)???????????????Java Chassis 
Metrics?1.0.0-m1???????????????????[Grafana](https://grafana.com/)??Metrics???
 
 ## ????
 ??Java Chassis?Java?????????[prometheus java 
client](https://github.com/prometheus/client_java)??Simple 
Client????SDK????0.1.0?  
-Prometheus??Pull????Metrics???????????Producer????provider???????Simple Http 
Server?????????Metrics???  
+Prometheus??Pull????Metrics???????????Producer????provider???????Simple HTTP 
Server?????????Metrics???  
 ????????????????metrics-integration/metrics-prometheus???????????
 ```xml
   <dependency>
@@ -55,7 +55,7 @@ cse:
 
"producerMetrics":{"calculator.metricsEndpoint.metrics":{"operationName":"calculator.metricsEndpoint.metrics","prefix":"servicecomb.calculator.metricsEndpoint.metrics.producer","waitInQueue":0,"lifeTimeInQueue":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"executionTime":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"producerLatency":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"producerCall":{"total":1,"tps":0.0}}
 }}
 ```
-???Prometheus Simple Http Server????????Prometheus????????
+??Prometheus Simple HTTP Server????????Prometheus????????
 ```text
 # HELP Instance Level Instance Level Metrics
 # TYPE Instance Level untyped
@@ -75,9 +75,9 @@ 
servicecomb_calculator_metricsEndpoint_metrics_producer_executionTime_total 0.0
 servicecomb_calculator_metricsEndpoint_metrics_producer_waitInQueue_count 0.0
 servicecomb_calculator_metricsEndpoint_metrics_producer_lifeTimeInQueue_count 
0.0
 ```
-?????????????????????????  
+?????????????????  
 
-*Prometheus Simple Http 
Server????/metrics????URL?metrics-prometheus???9696????????????????????http://localhost:9696/metrics
 ????*  
+*Prometheus Simple HTTP 
Server????/metrics????URL?metrics-prometheus???9696????????????????????http://localhost:9696/metrics
 ????*  
 
 
???????Prometheus?Metric??????????????????????[????](https://prometheus.io/docs/practices/naming/)?
 
@@ -132,7 +132,7 @@ scrape_configs:
 ### ??Grafana????
 
???Grafana???Prometheus????????[????](https://prometheus.io/docs/visualization/grafana/)?
 ## ????
-???????????Prometheus????????Prometheus Web????????http://localhost:9090/ 
???Metrics?????ServiceComb???Java Chassis Metrics???????
+???Prometheus???????????????Prometheus Web????????http://localhost:9090/ 
???Metrics?????ServiceComb???Java Chassis Metrics???????
 ![MetricsInPrometheus](/assets/images/MetricsInPrometheus.png)  
 
 ???????????????Grafana???Prometheus????????Grafana?????????
diff --git a/_users/cn/metrics-write-file-extension-and-sample-in-1.0.0-m1.md 
b/_users/cn/metrics-write-file-extension-and-sample-in-1.0.0-m1.md
index f7939fd..273e9f5 100644
--- a/_users/cn/metrics-write-file-extension-and-sample-in-1.0.0-m1.md
+++ b/_users/cn/metrics-write-file-extension-and-sample-in-1.0.0-m1.md
@@ -10,24 +10,22 @@ redirect_from:
 ---
 
 {% include toc %}
-??????0.5.0??????????Metrics?1.0.0-m1???????????????????????ServiceComb????([email protected])??????????
+??????0.5.0??????????Metrics?1.0.0-m1?????????????????[Release 
Note](https://github.com/apache/incubator-servicecomb-java-chassis/releases)??????????????????????????ServiceComb????([email protected])?????
 
 ## ??
-0.5.0???foundation-metrics????????Metrics????????1.0.0-m1????????metrics-extension??
  
+0.5.0???foundation-metrics????????Metrics????????1.0.0-m1??????Sample???????samples/metrics-write-file-sample??
  
 
?1.0.0-m1????????Operation???Metric?????????????????????????????????????Metric???????RollingFileAppender?
-?????????  
+?????????????  
 
-| Module?                         | ??                              |
-| :------------------------------- | :------------------------------   |
-| metrics-write-file               | ????Metrics?????????            |
-| metrics-write-file-config        | ?????????                        |
-| metrics-write-file-config-log4j  | ??Log4j?RollingFileAppender???     |
-| metrics-write-file-config-log4j2 | ??Log4j2?RollingFileAppender???      |
+| Module?                                  | ??                              |
+| :--------------------------------------- | :------------------------------ |
+| metrics-write-file                       | ????Metrics?????????            |
+| metrics-write-file-config-log4j-springboot | ??Log4j?RollingFileAppender???  
|
+| metrics-write-file-config-log4j2-springboot | 
??Log4j2?RollingFileAppender??? |
 
-*????logback?metrics-write-file-config???Log4j?log4j2??????????metrics-write-file-config-logback*
+*????logback??????Log4j?Log4j2??????????*
 
-## ??
-### ????
+## ????
 ?0.5.0??????microservice.yaml?????????
 ```yaml 
 APPLICATION_ID: demo
@@ -56,46 +54,20 @@ servicecomb:
 3. ???????servicecomb.metrics.filename_prefix????????appId.serviceName?  
 4. ???????rolling file???????????????????xml?properties?????  
 
-### ????
-Java Chassis???????Spring Boot Starter??????????????????????
-#### ????????Spring Boot?????
-##### ????log4j??????
-???samples/metrics-write-file-sample/metrics-write-file-log4j???
+## ???????
+1. ??????metrics-write-file????????????Metrics??????????????????  
 ```xml
     <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file-config</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file-config-log4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file</artifactId>
-    </dependency>
-```
-???log4j????1.2.17?
-##### ????log4j2??????
-???samples/metrics-write-file-sample/metrics-write-file-log4j2???
-```xml
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file-config</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file-config-log4j2</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
+      <groupId>io.servicecomb.samples</groupId>
       <artifactId>metrics-write-file</artifactId>
     </dependency>
 ```
-????????log4j???????metrics-write-file-config-log4j???metrics-write-file-config-log4j2????log4j2????2.8.2?
-#### Spring Boot Starter??????
-##### ????log4j??????
-???samples/metrics-write-file-sample/metrics-write-file-log4j-springboot???
+*????????????????????????*    
+2. 
metrics-write-file????????????RollingFileAppender?????????????????????log4j???metrics-write-file-log4j-springboot????Log4JMetricsFileWriter????log4j2???metrics-write-file-log4j2-springboot????Log4J2MetricsFileWriter?
+  *???????????????????FileWriter?*   
+
+## ??Spring Boot Starter??????
+Java Chassis???Spring Boot Starter?????Spring Boot 
Starter??????????Log4j????????????????????samples/metrics-write-file-sample/metrics-write-file-log4j-springboot???
 ```xml
     <!--need exclusion log4j-over-slf4j-->
     <dependency>
@@ -114,60 +86,20 @@ Java Chassis???????Spring Boot Starter?????????
       <groupId>io.servicecomb</groupId>
       <artifactId>spring-boot-starter-provider</artifactId>
     </dependency>
-    
-    <!--metrics dependency-->
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file-config</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file-config-log4j2</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file</artifactId>
-    </dependency>
 ```
-spring boot 
starter????log4j-over-slf4j?????????????log4j?RollingFileAppender????????????????????????????????log4j-over-slf4j?????????[????](https://www.slf4j.org/legacy.html)?
-##### ????log4j2??????
-???samples/metrics-write-file-sample/metrics-write-file-log4j2-springboot???
-```xml
-    <dependency>
-      <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter</artifactId>
-    </dependency>
+Spring Boot Starter????log4j-over-slf4j???Log 
Bridge???????log4j????????RollingFileAppender???????????slf4j????log4j?????Log 
Bridge?????????????????????log4j-over-slf4j?????????[????](https://www.slf4j.org/legacy.html#log4j-over-slf4j)?
 
-    <!--servicecomb spring boot starter-->
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>spring-boot-starter-provider</artifactId>
-    </dependency>
-    
-    <!--metrics dependency-->
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file-config</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file-config-log4j2</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>io.servicecomb</groupId>
-      <artifactId>metrics-write-file</artifactId>
-    </dependency>
-```
-?????spring boot starter??????log4j??????????????log4j??????????log4j2 write 
file????????????????????????????
+## ????
+metrics-write-file-config-log4j-springboot?metrics-write-file-config-log4j2-springboot????????????????ServiceApplication????????????target/metric/??????Metrics??????????????http://localhost:8080/f
 ???????????Operation???Metrics?????????????
 
 ## Q & A
 1. ???1.0.0-m1????????????????????log4j2.xml? ?????????  
-????metrics-write-file-config-xxx????????metric?????RollingFileAppender?????Appender???????Appenders???????
+  
????????????metric?????RollingFileAppender?????Appender???????Appenders???????
 
-2. 
???metrics-write-file-config-log4j2???RollingFileAppender???????????createAppender????????????newBuilder
 ... build???  
-???????newBuilder ... 
build??????????????????????????[????](https://logging.apache.org/log4j/2.x/manual/customconfig.html)??????createAppender?????????????????????????????1.0.0-m2????????TODO?
+2. 
???Log4J2MetricsFileWriter???RollingFileAppender???????????createAppender????????????newBuilder
 ... build???  
+  ???????newBuilder ... 
build??????????????????????????[????](https://logging.apache.org/log4j/2.x/manual/customconfig.html)??????createAppender????????????????????????????????TODO?
 
 3. ?????RollingFileAppender?ClassNotFoundException??????  
-?????Java???????slf4j?jcl?????????????????????log4j?log4j2?logback???????????????????????????????????????????
-???1.0.0-m1??????Operation???Metric?????????Operation??????Operation??15+???Metric????????????????????Coding???????RollingFileAppender?
-???????????log4j-over-slf4j???Bridging???????????????????mvn dependency:tree???
\ No newline at end of file
+  
?????Java???????slf4j?jcl?????????????????????log4j?log4j2?logback???????????????????????????????????????????
+  
???1.0.0-m1??????Operation???Metric?????????Operation??????Operation??15+???Metric????????????????????Coding???????RollingFileAppender?
+  ???????????log4j-over-slf4j???Bridging???????????????????mvn 
dependency:tree???
\ No newline at end of file
diff --git a/_users/metrics-in-1.0.0-m1.md b/_users/metrics-in-1.0.0-m1.md
new file mode 100644
index 0000000..79cfb2e
--- /dev/null
+++ b/_users/metrics-in-1.0.0-m1.md
@@ -0,0 +1,208 @@
+---
+title: "Metrics in 1.0.0-m1"
+lang: en
+ref: metrics
+permalink: /users/metrics-in-1.0.0-m1/
+excerpt: "Metrics in 1.0.0-m1"
+last_modified_at: 2017-12-30T10:01:43-04:00
+redirect_from:
+  - /theme-setup/
+---
+
+{% include toc %}
+Metrics had supported from Java chassis version 0.5.0,in version 1.0.0-m1,we 
had reconstruction it and add some more features,please checkout the user guide 
and [release 
note](https://github.com/apache/incubator-servicecomb-java-chassis/releases) 
for more information.Also subscribe ServiceComb 
mail-list([email protected]) and join discussion 
is welcome.
+
+## Background
+Microservice is trend of technology,it resolve many problems also follows new 
problem. 
+
+![MonolithicArch](/assets/images/MonolithicArch.png)
+
+This is traditional software architecture always called 'Monolithic',it's 
difficult for developer maintain the code or add new feature because of tight 
coupling,but it's easy for operation engineer deploy and maintenance(only one 
system process).
+
+![MicroserviceArch](/assets/images/MicroserviceArch.png)
+
+This is microservice system architecture,after split 'Monolithic' into many 
small services,developer obtain many benefits such as architecture independent 
and more agility etc,but operation engineer need to maintenance a whole lot of 
microservice instances.If don't import metrics,when system  is abnormal or user 
experience getting worse,it's very difficult to dentifying where the problem is 
and make some strategy in order to prevent it.
+
+## 1.0.00-m1 Principles
+In previous version(0.5.0)?implementation of metrics had some imperfections:
+1. Metrics code written in foundation-metrics module,it's a low level 
module,and include some customized function; 
+2. Use ThreadLocal variable collect and statistics data,performance hight but 
has memory leak risk;
+3. Output data of metrics is joined text not dependent number,difficult to 
reuse;
+4. Not support publish,unable integration with other monitor system;
+5. Because foundation-metrics is a low level module and certainly be 
loaded,user can't exclude it if unnecessary.
+
+So,upgrading from 0.5.0 to 1.0.0-m1,we had done a fully reconstruction,now 
it's include this modules:   
+
+| Module Name         | Description                              |
+| :------------------ | :--------------------------------------- |
+| metrics-core        | Metrics core module,work immediately after imported |
+| metrics-common      | Metrics common module,include DTO classes |
+| metrics-extension   | Include some metrics extension module    |
+| metrics-integration | Include metrics Integration with other monitor system |
+
+The dependency of this modules is:
+![MetricsDependency.png](/assets/images/MetricsDependency.png)
+
+### Use event collect invocation data,not from Hystrix(handler-bizkeeper)any 
more
+From 1.0.0-m1 invocation data such as TPS and latency are collected from 
invocation event,not from Hystrix?handler-bizkeeper? any more,so you don't need 
add Java Chassis Bizkeeper Handler only for metrics.we use EventBus in 
foundation-common,when DefaultEventListenerManager in metrics-core had 
initialized,three event listener class will be auto registered:
+
+| Event Listener Name                    | Description                         
     |
+| :------------------------------------- | 
:--------------------------------------- |
+| InvocationStartedEventListener         | Trigger when consumer or producer 
called |
+| InvocationStartProcessingEventListener | Trigger when producer fetch 
invocation from queue and start process |
+| InvocationFinishedEventListener        | Trigger when consumer call returned 
or producer process finished |
+
+*ServiceComb java chassis had used [Vertx](http://vertx.io/) as Reactor 
framework,in synchronous call mode when producer received invocation from 
consumer,it won't start process immediately but put it into a queue,this queue 
called invocation queue(like disk queue in operation system),time waiting in 
the queue called **LifeTimeInQueue**,the length of the queue called 
**waitInQueue**,this two metrics are very important for measure stress of the 
microservice;consumer not has this queue,so InvocationStartProcessingEvent will 
never be triggered at consumer side.*
+
+The code for trigger event write in RestInvocation,HighwayServerInvoke and 
InvokerUtils,if microservice don't import metrics,event listener of metrics 
won't be registered,the impact on performance is little.
+
+### Use Netflix Servo as Monitor of Metric
+[Netflix Servo](https://github.com/Netflix/servo) had implement a collection 
of high performance monitor,we had used four of them:
+
+| Monitor Name | Description                       |
+| :----------- | :-------------------------------- |
+| BasicCounter | As name of it,always increment    |
+| StepCounter  | Called 'ResettableCounter' before |
+| MinGauge     | Mark min value in step            |
+| MaxGauge     | Mark max value in step            |
+
+*The version of Servo we used is 0.10.1*
+
+### Window Time(also may called 'Polling Interval' or 'Step Cycle')
+Metrics had many classifications,we can divided them into two major types by 
how get value:   
+1. Direct get  
+  You can direct get newest value anytime,such as system resource usage 
include cpu load rate,running thread count,heap size and call count,queue 
length,etc.
+2. From statistics  
+  After a 'certain time' passed can counting the value,this time we called 
'Window Time',include:  
+  a) Take one from many,like Max?Min?Median;   
+  b) Time-related,like TPS(transaction per second);    
+  c) Count-related,like average,variance.    
+  If get value of this type,the result returned is the last 'Step Cycle' 
counted.in Servo,this time called ['Polling 
Intervals'](https://github.com/Netflix/servo/wiki/Getting-Started).
+  From 1.0.0-m1,can set **servicecomb.metrics.window_time** in 
microservice.yaml,it has same effect as set **servo.pollers**.   
+
+## Metric List
+From 1.0.0-m1,start support output metrics of operation level:   
+
+| Group       | Level                  | Catalog  | Metrics         | Item     
      |
+| :---------- | :--------------------- | :------- | :-------------- | 
:------------- |
+| servicecomb | instance               | system   | cpu             | load     
      |
+| servicecomb | instance               | system   | cpu             | 
runningThreads |
+| servicecomb | instance               | system   | heap            | init     
      |
+| servicecomb | instance               | system   | heap            | max      
      |
+| servicecomb | instance               | system   | heap            | commit   
      |
+| servicecomb | instance               | system   | heap            | used     
      |
+| servicecomb | instance               | system   | nonHeap         | init     
      |
+| servicecomb | instance               | system   | nonHeap         | max      
      |
+| servicecomb | instance               | system   | nonHeap         | commit   
      |
+| servicecomb | instance               | system   | nonHeap         | used     
      |
+| servicecomb | instance &#124; operationName | producer | waitInQueue     | 
count          |
+| servicecomb | instance &#124; operationName | producer | lifeTimeInQueue | 
average        |
+| servicecomb | instance &#124; operationName | producer | lifeTimeInQueue | 
max            |
+| servicecomb | instance &#124; operationName | producer | lifeTimeInQueue | 
min            |
+| servicecomb | instance &#124; operationName | producer | executionTime   | 
average        |
+| servicecomb | instance &#124; operationName | producer | executionTime   | 
max            |
+| servicecomb | instance &#124; operationName | producer | executionTime   | 
min            |
+| servicecomb | instance &#124; operationName | producer | producerLatency | 
average        |
+| servicecomb | instance &#124; operationName | producer | producerLatency | 
max            |
+| servicecomb | instance &#124; operationName | producer | producerLatency | 
min            |
+| servicecomb | instance &#124; operationName | producer | producerCall    | 
total          |
+| servicecomb | instance &#124; operationName | producer | producerCall    | 
tps            |
+| servicecomb | instance &#124; operationName | consumer | consumerLatency | 
average        |
+| servicecomb | instance &#124; operationName | consumer | consumerLatency | 
max            |
+| servicecomb | instance &#124; operationName | consumer | consumerLatency | 
min            |
+| servicecomb | instance &#124; operationName | consumer | consumerCall    | 
total          |
+| servicecomb | instance &#124; operationName | consumer | consumerCall    | 
tps            |
+
+**When the value of Level is 'instance',it's means microservice instance 
metric,otherwise specific operation metric,operationName same as Java Chassis 
MicroserviceQualifiedName,it's joined with microservice 
appId.SchemaID.methodName.**
+
+## How Configuration
+### Global Configuration
+Please add window time config in microservice.yaml:  
+```yaml 
+APPLICATION_ID: demo
+service_description:
+  name: demoService
+  version: 0.0.1
+
+servicecomb:
+  metrics:
+    #window time,same as servo.pollers,unit is millisecond
+    #support multi window time and use ',' split them,like 5000,10000
+    window_time: 5000,10000
+```
+
+*The setting of window time is very important to getting value of metrics,here 
is a comment show how it effect*
+
+![TimeWindowComment.png](/assets/images/TimeWindowComment.png)
+
+### Maven Configuration
+We just only need add metrics-core dependency:  
+```xml
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-core</artifactId>
+      <version>1.0.0-m1</version>
+    </dependency>
+```
+
+## Metrics Publish
+After configuration completed,you can get collected metrics data via this 
method:   
+### Embedded publish interface
+When microservice start-up,metrics-core will auto publish data service using 
Springmvc provider:  
+```java
+@RestSchema(schemaId = "metricsEndpoint")
+@RequestMapping(path = "/metrics")
+public class DefaultMetricsPublisher implements MetricsPublisher {
+
+  private final DataSource dataSource;
+
+  public DefaultMetricsPublisher(DataSource dataSource) {
+    this.dataSource = dataSource;
+  }
+
+  @RequestMapping(path = "/appliedWindowTime", method = RequestMethod.GET)
+  @CrossOrigin
+  @Override
+  public List<Long> getAppliedWindowTime() {
+    return dataSource.getAppliedWindowTime();
+  }
+
+  @RequestMapping(path = "/", method = RequestMethod.GET)
+  @CrossOrigin
+  @Override
+  public RegistryMetric metrics() {
+    return dataSource.getRegistryMetric();
+  }
+
+  @ApiResponses({
+      @ApiResponse(code = 400, response = String.class, message = "illegal 
request content"),
+  })
+  @RequestMapping(path = "/{windowTime}", method = RequestMethod.GET)
+  @CrossOrigin
+  @Override
+  public RegistryMetric metricsWithWindowTime(@PathVariable(name = 
"windowTime") long windowTime) {
+    return dataSource.getRegistryMetric(windowTime);
+  }
+}
+```
+So,if you had config rest provider in microservice.yaml,like:  
+```yaml
+cse:
+  service:
+    registry:
+      address: http://127.0.0.1:30100
+  rest:
+    address: 0.0.0.0:8080
+```
+You can open a browser and input http://localhost:8080/metrics direct get 
metrics data.  
+### Direct programming get
+From above code you can known,the interface of data provider bean is 
io.servicecomb.metrics.core.publish.DataSource,so if you want develop your own 
metrics publisher,autowired it is enough.
+```java
+@Autowired
+private DataSource dataSource;
+```
+
+## Other Reference 
+We had developed two use case for reference:  
+1. metrics-wirte-file:ouput metrics data into files,code is at 
metrics-extension;  
+2. metrics-prometheus:integration with prometheus,publish metrics as 
prometheus producer.
\ No newline at end of file
diff --git a/_users/metrics-integration-with-prometheus-in-1.0.0-m1.md 
b/_users/metrics-integration-with-prometheus-in-1.0.0-m1.md
new file mode 100644
index 0000000..10da41d
--- /dev/null
+++ b/_users/metrics-integration-with-prometheus-in-1.0.0-m1.md
@@ -0,0 +1,139 @@
+---
+title: "Metrics how integration with prometheus in 1.0.0-m1"
+lang: en
+ref: metrics
+permalink: /users/metrics-integration-with-prometheus-in-1.0.0-m1/
+excerpt: "Metrics how integration with prometheus in 1.0.0-m1"
+last_modified_at: 2018-1-2T10:01:43-04:00
+redirect_from:
+  - /theme-setup/
+---
+
+{% include toc %}
+Metrics had supported from Java chassis version 0.5.0,in version 1.0.0-m1,we 
had reconstruction it and add some more features,please checkout the user guide 
and [release 
note](https://github.com/apache/incubator-servicecomb-java-chassis/releases) 
for more information.Also subscribe ServiceComb 
mail-list([email protected]) and join discussion 
is welcome.
+
+## Background
+[Prometheus](http://www.prometheus.io/) is a opensource open-source monitoring 
solution like Google Borgmon,also member of 
[CNCF](https://www.cncf.io/),community is very active.Java chassis metrics 
support integration with prometheus in 1.0.0-m1,and can use 
[Grafana](https://grafana.com/) to query metrics data further.
+
+## Integration Principles
+We known Java chassis developed by Java,so we use Simple Client in  
[prometheus java client](https://github.com/prometheus/client_java) as SDK,the 
version we use is 0.1.0.  
+Prometheus use pull mode collect metrics data,microservice act as producer,we 
use Simple HTTP Server(also in client java SDK) publish them;  
+As an integration(optional) module,the implementation code is in 
metrics-integration/metrics-prometheus,you can get it's dependency:  
+```xml
+  <dependency>
+    <groupId>io.prometheus</groupId>
+    <artifactId>simpleclient</artifactId>
+  </dependency>
+  <dependency>
+    <groupId>io.prometheus</groupId>
+    <artifactId>simpleclient_httpserver</artifactId>
+  </dependency>
+
+  <dependency>
+    <groupId>io.servicecomb</groupId>
+    <artifactId>metrics-core</artifactId>
+  </dependency>
+```
+So if we import metrics-prometheus,no longer need to add metrics-core 
dependence.
+### Relation between metrics-core Publish
+[Metrics in 1.0.0-m1](/users/metrics-in-1.0.0-m1/) had already been 
mentioned,metrics-core will auto start up a embedded publish interface,so if 
you had configured rest provider in microservice.yaml like:
+```yaml
+cse:
+  service:
+    registry:
+      address: http://127.0.0.1:30100
+  rest:
+    address: 0.0.0.0:8080
+```
+You can direct get metrics data at http://localhost:8080/metrics ,it will 
return a entity of io.servicecomb.metrics.common.RegistryMetric,the output is:  
+```json
+{"instanceMetric":{
+"systemMetric":{"cpuLoad":10.0,"cpuRunningThreads":39,"heapInit":266338304,"heapMax":3786407936,"heapCommit":626524160,"heapUsed":338280024,"nonHeapInit":2555904,"nonHeapMax":-1,"nonHeapCommit":60342272,"nonHeapUsed":58673152},
+"consumerMetric":{"operationName":"instance","prefix":"servicecomb.instance.consumer","consumerLatency":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"consumerCall":{"total":0,"tps":0.0}},
+"producerMetric":{"operationName":"instance","prefix":"servicecomb.instance.producer","waitInQueue":0,"lifeTimeInQueue":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"executionTime":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"producerLatency":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"producerCall":{"total":1,"tps":0.0}}},
+"consumerMetrics":{},
+"producerMetrics":{"calculator.metricsEndpoint.metrics":{"operationName":"calculator.metricsEndpoint.metrics","prefix":"servicecomb.calculator.metricsEndpoint.metrics.producer","waitInQueue":0,"lifeTimeInQueue":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"executionTime":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"producerLatency":{"total":0,"count":0,"min":0,"max":0,"average":0.0},"producerCall":{"total":1,"tps":0.0}}
+}}
+```
+But use Prometheus Simple HTTP Server provider interface will publish the 
standard format which prometheus needed:
+```text
+# HELP Instance Level Instance Level Metrics
+# TYPE Instance Level untyped
+servicecomb_instance_producer_producerLatency_average 0.0
+servicecomb_instance_producer_producerLatency_total 0.0
+servicecomb_instance_consumer_producerLatency_count 0.0
+...
+servicecomb_instance_producer_producerLatency_min 0.0
+servicecomb_instance_producer_lifeTimeInQueue_average 0.0
+servicecomb_instance_producer_lifeTimeInQueue_count 0.0
+servicecomb_instance_system_heap_init 2.66338304E8
+# HELP calculator.metricsEndpoint.metrics Producer Side 
calculator.metricsEndpoint.metrics Producer Side Metrics
+# TYPE calculator.metricsEndpoint.metrics Producer Side untyped
+servicecomb_calculator_metricsEndpoint_metrics_producer_lifeTimeInQueue_average
 0.0
+...
+servicecomb_calculator_metricsEndpoint_metrics_producer_executionTime_total 0.0
+servicecomb_calculator_metricsEndpoint_metrics_producer_waitInQueue_count 0.0
+servicecomb_calculator_metricsEndpoint_metrics_producer_lifeTimeInQueue_count 
0.0
+```
+So they are two independent,different for use.   
+
+*Prometheus Simple HTTP Server also use /metrics as default 
URL,metrics-prometheus will use 9696 as default port,after microservice start 
up you can get metrics data at http://localhost:9696/metrics .*    
+The metrics name in prometheus we replace all dot with underline,because we 
must follow its [naming rules](https://prometheus.io/docs/practices/naming/).   
 
+
+## How Configuration
+Enable prometheus integration is very easy:
+### Global Configuration
+Please add prometheus port config in microservice.yaml:  
+```yaml 
+APPLICATION_ID: demo
+service_description:
+  name: demoService
+  version: 0.0.1
+
+servicecomb:
+  metrics:
+    prometheus:
+      #prometheus provider port
+      port: 9696
+```
+*If do not config,default value is 9696*
+### Maven Configuration
+We just only need add metrics-prometheus dependency:   
+```xml
+    <dependency>
+      <groupId>io.servicecomb</groupId>
+      <artifactId>metrics-prometheus</artifactId>
+      <version>1.0.0-m1</version>
+    </dependency>
+```
+### Config prometheus.yml in Prometheus
+You need add job in prometheus.yml,like:
+```yaml 
+scrape_configs:
+  # The job name is added as a label `job=<job_name>` to any timeseries 
scraped from this config.
+  - job_name: 'prometheus'
+
+    # metrics_path defaults to '/metrics'
+    # scheme defaults to 'http'.
+
+    static_configs:
+      - targets: ['localhost:9090']
+
+  - job_name: 'servicecomb'
+
+    # metrics_path defaults to '/metrics'
+    # scheme defaults to 'http'.
+
+    static_configs:
+      - targets: ['localhost:9696']
+```
+The job_name: 'servicecomb' is our custom job,it will collect metrics data 
from local microservice localhost:9696,more information about configuration of 
prometheus can found 
[here](https://prometheus.io/docs/prometheus/latest/configuration/configuration/).
  
+
+### Config Grafana(optional)
+How add prometheus as a datasource in grafana can found 
[here](https://prometheus.io/docs/visualization/grafana/).  
+## Effect Show
+After complete prometheus config and start up microservice,we can open 
prometheus web site(default address is http://localhost:9090/),in metrics list 
java chassis metrics with prefix 'servicecomb' can be seen:
+![MetricsInPrometheus](/assets/images/MetricsInPrometheus.png)  
+
+For get more better data query experience,add prometheus as a datasource in 
grafana then query metrics data by it:  
+![MetricsInGrafana](/assets/images/MetricsInGrafana.png)  
\ No newline at end of file


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to