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)。
+
+## 背景
+将系统微服务化是技术潮流和趋势,但是它解决了很多问题的同时也带来了新的问题。
+
+
+
+这是传统单体系统架构图,对运维人员友好,但是对开发人员不友好,系统维护升级困难。
+
+
+
+这是微服务化后的系统架构图,经过功能切分,开发人员得到解脱,拥有了极致的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
-
- org.springframework.boot
- spring-boot-starter
-
-
-
- org.slf4j
- log4j-over-slf4j
-
-
-
- ```
-
* 需要在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
+
+
+ 10MB
+ 10
+ /target
+ bmi.calculator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+剩余Metric(参见原理章节中的表格)按照上面的例子重复替换即可。
+
+## 输出效果
+每一个文件就是一个微服务示例级别的metrics数据输出,0.5.0版本还不支持Operation级别的Metrics输出:

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)。
+
+## 背景
+将系统微服务化是技术潮流和趋势,但是它解决了很多问题的同时也带来了新的问题。
+
+
+
+这是传统单体系统架构图,对运维人员友好,但是对开发人员不友好,系统维护升级困难。
+
+
+
+这是微服务化后的系统架构图,经过功能切分,开发人员得到解脱,拥有了极致的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
-
- org.springframework.boot
- spring-boot-starter
-
-
-
- org.slf4j
- log4j-over-slf4j
-
-
-
- ```
-
* 需要在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
+
+
+ 10MB
+ 10
+ /target
+ bmi.calculator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+剩余Metric(参见原理章节中的表格)按照上面的例子重复替换即可。
+
+## 输出效果
+每一个文件就是一个微服务示例级别的metrics数据输出,0.5.0版本还不支持Operation级别的Metrics输出:

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