You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2017/12/22 03:31:42 UTC

[incubator-servicecomb-website] branch master updated: updated metrics usage (#2)

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 687ff2e  updated metrics usage (#2)
687ff2e is described below

commit 687ff2e7bd4a7eb9f6232f2bb6c63801d1ddf72e
Author: Eric Lee <da...@huawei.com>
AuthorDate: Fri Dec 22 11:31:41 2017 +0800

    updated metrics usage (#2)
    
    * updated metrics usage
    
    * fix pr comment
    
    Signed-off-by: zhengyangyong <ya...@huawei.com>
---
 _users/Metrics.md                  | 146 ++++++++++++++++++++++++++-----------
 _users/cn/Metrics.md               | 142 ++++++++++++++++++++++++++----------
 assets/images/MicroserviceArch.png | Bin 0 -> 133917 bytes
 assets/images/MonolithicArch.png   | Bin 0 -> 112212 bytes
 4 files changed, 206 insertions(+), 82 deletions(-)

diff --git a/_users/Metrics.md b/_users/Metrics.md
index bd96e71..1729075 100644
--- a/_users/Metrics.md
+++ b/_users/Metrics.md
@@ -1,19 +1,56 @@
 ---
-title: "Metrics Monitor"
+title: "Metrics Monitor in 0.5.0"
 lang: en
 ref: metrics
 permalink: /users/metrics/
-excerpt: "Metrics Monitor"
-last_modified_at: 2017-11-29T10:01:43-04:00
+excerpt: "Metrics Monitor in 0.5.0"
+last_modified_at: 2017-12-20T10:01:43-04:00
 redirect_from:
   - /theme-setup/
 ---
 
 {% include toc %}
-微服务框架从0.4.1版本开始支持监控功能Metrics,请注意这个功能还处于开发(Preview)阶段,请不要部署到生产环境,并且我们未来会做较大的调整,更多讨论会持续发布在[Google Group](https://groups.google.com/forum/#!forum/servicecomb-developers)中。
+微服务框架从0.5.0版本开始支持监控功能Metrics,请注意这个功能还处于开发(Preview)阶段,并且我们未来会做较大的调整,更多讨论请订阅ServiceComb邮件列表(dev-subscribe@servicecomb.incubator.apache.org)。
+
+## 背景
+将系统微服务化是技术潮流和趋势,但是它解决了很多问题的同时也带来了新的问题。
+
+![MonolithicArch](/assets/images/MonolithicArch.png)
+
+这是传统单体系统架构图,对运维人员友好,但是对开发人员不友好,系统维护升级困难。
+
+![MicroserviceArch](/assets/images/MicroserviceArch.png)
+
+这是微服务化后的系统架构图,经过功能切分,开发人员得到解脱,拥有了极致的CI/CD,但是运维人员却需要维护海量的微服务实例,所以如果不进行性能监控,就无法定位时延高的微服务,也无法制定弹性伸缩策略。
+
+## 原理
+0.5.0版本的Metrics会在Java Chassis的Invocation中埋入计数器,也会使用Hystrix收集TPS和Latency,同时收集微服务实例的CPU使用率和内存使用量,最终通过输出日志的方式输出收集到的Metrics数据。  
+输入日志使用的是SLF4J作为日志框架,未与任何具体的日志框架绑定,我们会通过定向Logger名输出的方式将不同的Metrics输出为一个个独立的文件,因此需要在你的日志配置中添加对应的配置项,[这篇文章](https://stackoverflow.com/questions/9652032/how-can-i-create-2-separate-log-files-with-one-log4j-config-file)详细说明了如果使用Log4j作为日志实现如何配置,而[这篇文章](https://stackoverflow.com/questions/36643692/log4j2-multiple-appenders-the-same-output-is-written-to-multiple-files)则详细介绍了如果使用Log4j2作为日志需要如何配置。  
+Logger名指的是LoggerFactory.getLogger后的第一个参数:
+```java
+static final Logger log = LoggerFactory.getLogger("${Logger名}");
+```
+以下是我们的定向Logger名以及输出的Metrics含义:   
+
+| Logger名                                  | Metric含义              |
+| :--------------------------------------- | :-------------------- |
+| averageServiceExecutionTime              | Producer端调用平均执行时间     |
+| averageTimeInQueue                       | Producer端调用在队列中的平均时间  |
+| countInQueue                             | Producer端在队列中等待的调用的数量 |
+| cpuLoad                                  | 实例CPU使用率              |
+| heapCommit,heapInit,heapMax,heapUsed     | 内存Heap使用状况            |
+| nonHeapCommit,nonHeapInit,nonHeapMax,nonHeapUsed | 内存NonHeap使用状况         |
+| latency                                  | 调用平均时延                |
+| maxLifeTimeInQueue                       | Producer端调用在队列中最大等待时间 |
+| minLifeTimeInQueue                       | Producer端调用在队列中最小等待时间 |
+| totalRequestsPerProvider                 | Producer总请求数          |
+| totalRequestsPerConsumer                 | Consumer总请求数          |
+| totalFailedRequestsPerProvider           | Producer失败总请求数        |
+| totalFailRequestsPerConsumer             | Consumer失败总请求数        |
+
 ## 如何配置
 请在microservice.yaml中添加如下配置项:
-```yaml
+```yaml 
 APPLICATION_ID: demo
 service_description:
   name: demoService
@@ -28,46 +65,71 @@ servicecomb:
     file:
       #是否启用文件输出
       enabled: true
-      #输出文件的根目录
-      root_path: D:/Temp
-      #metrics文件的前缀
-      name_prefix: demo.demoService
-      #metrics文件Rolling最大大小,默认10MB,例如10KB,10MB,10GB
-      max_rolling_size: 10MB
-      #metrics文件Rolling文件保存数量,默认10个
-      max_rolling_count: 10
+      #会体现为输出内容中的plugin_id
+      name_prefix: bmi.calculator
 ```
 
 ## 注意事项
-* 如果使用ServiceComb Spring Boot Start快速构建项目,需要排除log4j-over-slf4j依赖
-   ```xml
-   <dependency>
-     <groupId>org.springframework.boot</groupId>
-     <artifactId>spring-boot-starter</artifactId>
-     <!--Metric使用log4j输出,屏蔽掉spring-boot-starter中的log4j-over-slf4j-->
-     <exclusions>
-       <exclusion>
-         <groupId>org.slf4j</groupId>
-         <artifactId>log4j-over-slf4j</artifactId>
-       </exclusion>
-     </exclusions>
-   </dependency>
-   ```
-
 * 需要在provider治理链中添加bizkeeper-provider,否则TPS和Latency无数据
-   ```yaml
-   APPLICATION_ID: demo
-   service_description:
-     name: demoService
-     version: 0.0.1
-   cse:
-     handler:
-       chain:
-         Provider:
-           default: bizkeeper-provider
-   ```
-
-## 文件输出
-每一个文件就是一个微服务示例级别的metrics数据输出:
+```yaml
+APPLICATION_ID: demo
+service_description:
+ name: demoService
+ version: 0.0.1
+cse:
+ handler:
+   chain:
+     Provider:
+       default: bizkeeper-provider
+```
+
+## 配置示例
+
+以设置averageServiceExecutionTime为例,如果是Log4j,配置如下:
+```properties
+#指定Logger名为averageServiceExecutionTime
+log4j.category.averageServiceExecutionTime=ERROR, averageServiceExecutionTimeLogger
+#定向日志,不扩散到别的Logger中
+log4j.additivity.averageServiceExecutionTime=false
+#使用RollingFileAppender
+log4j.appender.averageServiceExecutionTimeLogger=org.apache.log4j.RollingFileAppender
+log4j.appender.averageServiceExecutionTimeLogger.File=/target/averageServiceExecutionTime.log
+log4j.appender.averageServiceExecutionTimeLogger.MaxFileSize=10MB
+log4j.appender.averageServiceExecutionTimeLogger.MaxBackupIndex=10
+log4j.appender.averageServiceExecutionTimeLogger.layout=org.apache.log4j.PatternLayout
+log4j.appender.averageServiceExecutionTimeLogger.layout.ConversionPattern=%m%n
+log4j.appender.averageServiceExecutionTimeLogger.append=true
+```
+
+如果是Log4j2,配置如下:
+```xml
+<!--Log4j2配置支持全局配置-->
+<Properties>
+  <Property name="maxFileSize">10MB</Property>
+  <Property name="maxFileCount">10</Property>
+  <Property name="filePath">/target</Property>
+  <Property name="filePrefix">bmi.calculator</Property>
+</Properties>
+
+<Appenders>
+  <RollingFile name="averageServiceExecutionTime" fileName="${filePath}${filePrefix}.averageServiceExecutionTime.dat"
+    filePattern="${filePath}${filePrefix}.averageServiceExecutionTime-%i.dat">
+    <PatternLayout pattern="%m%n"/>
+    <SizeBasedTriggeringPolicy size="${maxFileSize}"/>
+    <DefaultRolloverStrategy max="${maxFileCount}"/>
+  </RollingFile>
+</Appenders>
+
+<Loggers>
+  <Logger name="averageServiceExecutionTime" level="error" additivity="false">
+    <AppenderRef ref="averageServiceExecutionTime"/>
+  </Logger>
+</Loggers>
+```
+
+剩余Metric(参见原理章节中的表格)按照上面的例子重复替换即可。
+
+## 输出效果
+每一个文件就是一个微服务示例级别的metrics数据输出,0.5.0版本还不支持Operation级别的Metrics输出:
 
 ![Metrics图片](/assets/images/metrics-output.png)
diff --git a/_users/cn/Metrics.md b/_users/cn/Metrics.md
index d3436e6..5004dc6 100644
--- a/_users/cn/Metrics.md
+++ b/_users/cn/Metrics.md
@@ -4,16 +4,53 @@ lang: cn
 ref: metrics
 permalink: /cn/users/metrics/
 excerpt: "Metrics监控"
-last_modified_at: 2017-11-29T10:01:43-04:00
+last_modified_at: 2017-12-20T10:01:43-04:00
 redirect_from:
   - /theme-setup/
 ---
 
 {% include toc %}
-微服务框架从0.4.1版本开始支持监控功能Metrics,请注意这个功能还处于开发(Preview)阶段,请不要部署到生产环境,并且我们未来会做较大的调整,更多讨论会持续发布在[Google Group](https://groups.google.com/forum/#!forum/servicecomb-developers)中。
+微服务框架从0.5.0版本开始支持监控功能Metrics,请注意这个功能还处于开发(Preview)阶段,并且我们未来会做较大的调整,更多讨论请订阅ServiceComb邮件列表(dev-subscribe@servicecomb.incubator.apache.org)。
+
+## 背景
+将系统微服务化是技术潮流和趋势,但是它解决了很多问题的同时也带来了新的问题。
+
+![MonolithicArch](/assets/images/MonolithicArch.png)
+
+这是传统单体系统架构图,对运维人员友好,但是对开发人员不友好,系统维护升级困难。
+
+![MicroserviceArch](/assets/images/MicroserviceArch.png)
+
+这是微服务化后的系统架构图,经过功能切分,开发人员得到解脱,拥有了极致的CI/CD,但是运维人员却需要维护海量的微服务实例,所以如果不进行性能监控,就无法定位时延高的微服务,也无法制定弹性伸缩策略。
+
+## 原理
+0.5.0版本的Metrics会在Java Chassis的Invocation中埋入计数器,也会使用Hystrix收集TPS和Latency,同时收集微服务实例的CPU使用率和内存使用量,最终通过输出日志的方式输出收集到的Metrics数据。  
+输入日志使用的是SLF4J作为日志框架,未与任何具体的日志框架绑定,我们会通过定向Logger名输出的方式将不同的Metrics输出为一个个独立的文件,因此需要在你的日志配置中添加对应的配置项,[这篇文章](https://stackoverflow.com/questions/9652032/how-can-i-create-2-separate-log-files-with-one-log4j-config-file)详细说明了如果使用Log4j作为日志实现如何配置,而[这篇文章](https://stackoverflow.com/questions/36643692/log4j2-multiple-appenders-the-same-output-is-written-to-multiple-files)则详细介绍了如果使用Log4j2作为日志需要如何配置。  
+Logger名指的是LoggerFactory.getLogger后的第一个参数:
+```java
+static final Logger log = LoggerFactory.getLogger("${Logger名}");
+```
+以下是我们的定向Logger名以及输出的Metrics含义:   
+
+| Logger名                                  | Metric含义              |
+| :--------------------------------------- | :-------------------- |
+| averageServiceExecutionTime              | Producer端调用平均执行时间     |
+| averageTimeInQueue                       | Producer端调用在队列中的平均时间  |
+| countInQueue                             | Producer端在队列中等待的调用的数量 |
+| cpuLoad                                  | 实例CPU使用率              |
+| heapCommit,heapInit,heapMax,heapUsed     | 内存Heap使用状况            |
+| nonHeapCommit,nonHeapInit,nonHeapMax,nonHeapUsed | 内存NonHeap使用状况         |
+| latency                                  | 调用平均时延                |
+| maxLifeTimeInQueue                       | Producer端调用在队列中最大等待时间 |
+| minLifeTimeInQueue                       | Producer端调用在队列中最小等待时间 |
+| totalRequestsPerProvider                 | Producer总请求数          |
+| totalRequestsPerConsumer                 | Consumer总请求数          |
+| totalFailedRequestsPerProvider           | Producer失败总请求数        |
+| totalFailRequestsPerConsumer             | Consumer失败总请求数        |
+
 ## 如何配置
 请在microservice.yaml中添加如下配置项:
-```yaml
+```yaml 
 APPLICATION_ID: demo
 service_description:
   name: demoService
@@ -28,46 +65,71 @@ servicecomb:
     file:
       #是否启用文件输出
       enabled: true
-      #输出文件的根目录
-      root_path: D:/Temp
-      #metrics文件的前缀
-      name_prefix: demo.demoService
-      #metrics文件Rolling最大大小,默认10MB,例如10KB,10MB,10GB
-      max_rolling_size: 10MB
-      #metrics文件Rolling文件保存数量,默认10个
-      max_rolling_count: 10
+      #会体现为输出内容中的plugin_id
+      name_prefix: bmi.calculator
 ```
 
 ## 注意事项
-* 如果使用ServiceComb Spring Boot Start快速构建项目,需要排除log4j-over-slf4j依赖
-   ```xml
-   <dependency>
-     <groupId>org.springframework.boot</groupId>
-     <artifactId>spring-boot-starter</artifactId>
-     <!--Metric使用log4j输出,屏蔽掉spring-boot-starter中的log4j-over-slf4j-->
-     <exclusions>
-       <exclusion>
-         <groupId>org.slf4j</groupId>
-         <artifactId>log4j-over-slf4j</artifactId>
-       </exclusion>
-     </exclusions>
-   </dependency>
-   ```
-
 * 需要在provider治理链中添加bizkeeper-provider,否则TPS和Latency无数据
-   ```yaml
-   APPLICATION_ID: demo
-   service_description:
-     name: demoService
-     version: 0.0.1
-   cse:
-     handler:
-       chain:
-         Provider:
-           default: bizkeeper-provider
-   ```
-
-## 文件输出
-每一个文件就是一个微服务示例级别的metrics数据输出:
+```yaml
+APPLICATION_ID: demo
+service_description:
+ name: demoService
+ version: 0.0.1
+cse:
+ handler:
+   chain:
+     Provider:
+       default: bizkeeper-provider
+```
+
+## 配置示例
+
+以设置averageServiceExecutionTime为例,如果是Log4j,配置如下:
+```properties
+#指定Logger名为averageServiceExecutionTime
+log4j.category.averageServiceExecutionTime=ERROR, averageServiceExecutionTimeLogger
+#定向日志,不扩散到别的Logger中
+log4j.additivity.averageServiceExecutionTime=false
+#使用RollingFileAppender
+log4j.appender.averageServiceExecutionTimeLogger=org.apache.log4j.RollingFileAppender
+log4j.appender.averageServiceExecutionTimeLogger.File=/target/averageServiceExecutionTime.log
+log4j.appender.averageServiceExecutionTimeLogger.MaxFileSize=10MB
+log4j.appender.averageServiceExecutionTimeLogger.MaxBackupIndex=10
+log4j.appender.averageServiceExecutionTimeLogger.layout=org.apache.log4j.PatternLayout
+log4j.appender.averageServiceExecutionTimeLogger.layout.ConversionPattern=%m%n
+log4j.appender.averageServiceExecutionTimeLogger.append=true
+```
+
+如果是Log4j2,配置如下:
+```xml
+<!--Log4j2配置支持全局配置-->
+<Properties>
+  <Property name="maxFileSize">10MB</Property>
+  <Property name="maxFileCount">10</Property>
+  <Property name="filePath">/target</Property>
+  <Property name="filePrefix">bmi.calculator</Property>
+</Properties>
+
+<Appenders>
+  <RollingFile name="averageServiceExecutionTime" fileName="${filePath}${filePrefix}.averageServiceExecutionTime.dat"
+    filePattern="${filePath}${filePrefix}.averageServiceExecutionTime-%i.dat">
+    <PatternLayout pattern="%m%n"/>
+    <SizeBasedTriggeringPolicy size="${maxFileSize}"/>
+    <DefaultRolloverStrategy max="${maxFileCount}"/>
+  </RollingFile>
+</Appenders>
+
+<Loggers>
+  <Logger name="averageServiceExecutionTime" level="error" additivity="false">
+    <AppenderRef ref="averageServiceExecutionTime"/>
+  </Logger>
+</Loggers>
+```
+
+剩余Metric(参见原理章节中的表格)按照上面的例子重复替换即可。
+
+## 输出效果
+每一个文件就是一个微服务示例级别的metrics数据输出,0.5.0版本还不支持Operation级别的Metrics输出:
 
 ![Metrics图片](/assets/images/metrics-output.png)
diff --git a/assets/images/MicroserviceArch.png b/assets/images/MicroserviceArch.png
new file mode 100644
index 0000000..5890dd0
Binary files /dev/null and b/assets/images/MicroserviceArch.png differ
diff --git a/assets/images/MonolithicArch.png b/assets/images/MonolithicArch.png
new file mode 100644
index 0000000..6a695de
Binary files /dev/null and b/assets/images/MonolithicArch.png differ

-- 
To stop receiving notification emails like this one, please contact
['"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>'].