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>'].