README.md 6.9 KB
Newer Older
wu-sheng's avatar
wu-sheng 已提交
1 2 3
Sky Walking
==========

wu-sheng's avatar
wu-sheng 已提交
4
SkyWalking: Large-Scale Distributed Systems Tracing Infrastructure, 是一个对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。
wu-sheng's avatar
wu-sheng 已提交
5

6
[![Build Status](https://travis-ci.org/wu-sheng/sky-walking.svg?branch=master)](https://travis-ci.org/wu-sheng/sky-walking)
wu-sheng's avatar
wu-sheng 已提交
7

wu-sheng's avatar
wu-sheng 已提交
8 9
* 核心理论为[Google Dapper论文:Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html),英语有困难的同学可参考[国内翻译](http://duanple.blog.163.com/blog/static/70971767201329113141336/)
* 本分析系统能通过不修改或少量修改代码的模式,对现有的JAVA应用或J2EE应用进行监控和数据收集,并针对应用进场进行准实时告警。此外提供大量的调用性能分析功能,解决目前的监控系统主要监控进程、端口而非应用实际性能的问题。
wu-sheng's avatar
wu-sheng 已提交
10
* 底层api提供高效的异步能力。同步阻塞的性能消耗在0.1毫秒水平。
wu-sheng's avatar
wu-sheng 已提交
11
* 支持国内常用的dubbo以及dubbox等常见RPC框架,支持应用异常的邮件告警
wu-sheng's avatar
wu-sheng 已提交
12
* 通过[byte-buddy](https://github.com/raphw/byte-buddy),部分插件将通过动态字节码机制,避免代码侵入性,完成监控。
wu-sheng's avatar
wu-sheng 已提交
13

wu-sheng's avatar
wu-sheng 已提交
14 15 16 17 18 19 20
|插件名称|配置文件支持|动态代码机制|代码侵入模式|备注|
| ----------- |---------| ----------|----------|----------|
|web-plugin|web.xml| - | - | - |
|dubbo-plugin| dubbo/dubbox配置文件 | - | - | - |
|spring-plugin| spring配置文件 | - | - | - |
|jdbc-plugin| jdbc配置文件 | - | - | - |
|mysql-plugin| - | YES | - | - |
wu-sheng's avatar
wu-sheng 已提交
21
|httpClient-4.x-plugin| - | YES | - | - |
wu-sheng's avatar
wu-sheng 已提交
22
|httpClient-4.x-plugin-dubbox-rest-attachment| - | YES | - | 需引用httpClient-4.x-plugin |
wu-sheng's avatar
wu-sheng 已提交
23
|jedis-2.x-plugin| - | YES | - | - |
wu-sheng's avatar
wu-sheng 已提交
24 25
|httpclient-4.2.x-plugin| - | - | YES | 需要使用新提供的httpClient包装对象 |
|httpclient-4.3.x-plugin| - | - | YES | 需要使用新提供的httpClient包装对象 |
wu-sheng's avatar
wu-sheng 已提交
26 27

# 新版本能力规划
wu-sheng's avatar
wu-sheng 已提交
28
* 提供一定的日志数据分析和展现能力,减少或者避免使用团队的二次开发
wu-sheng's avatar
wu-sheng 已提交
29

wu-sheng's avatar
wu-sheng 已提交
30
# 主要贡献者
wu-sheng's avatar
wu-sheng 已提交
31 32
* 吴晟   [亚信](http://www.asiainfo.com/) wusheng@asiainfo.com
* 张鑫   [亚信](http://www.asiainfo.com/) zhangxin10@asiainfo.com
wu-sheng's avatar
wu-sheng 已提交
33

wu-sheng's avatar
wu-sheng 已提交
34 35
# 交流
* 联系邮箱:wu.sheng@foxmail.com
wu-sheng's avatar
wu-sheng 已提交
36
* QQ群:392443393,请注明“Sky Walking交流”
wu-sheng's avatar
wu-sheng 已提交
37
* 谁在使用Sky Walking?[点击进入](https://github.com/wu-sheng/sky-walking/issues/34)。同时请各位使用者反馈下,都在哪些项目中使用。
wu-sheng's avatar
wu-sheng 已提交
38

wu-sheng's avatar
wu-sheng 已提交
39 40 41
# 整体架构图
![整体架构图](http://wu-sheng.github.io/sky-walking/sample-code/images/skywalkingClusterDeploy.jpeg)

wu-sheng's avatar
wu-sheng 已提交
42 43 44
# 典型页面展现
## 实时调用链路
* 实时链路追踪展现
wu-sheng's avatar
wu-sheng 已提交
45
![追踪连路图1](http://wu-sheng.github.io/sky-walking/sample-code/screenshoot/callChain.png)
wu-sheng's avatar
wu-sheng 已提交
46
* 实时链路追踪详细信息查看
wu-sheng's avatar
wu-sheng 已提交
47
![追踪连路图2](http://wu-sheng.github.io/sky-walking/sample-code/screenshoot/callChainDetail.png)
wu-sheng's avatar
wu-sheng 已提交
48
* 实时链路追踪日志查看
wu-sheng's avatar
wu-sheng 已提交
49
![追踪连路图3](http://wu-sheng.github.io/sky-walking/sample-code/screenshoot/callChainLog.png)
wu-sheng's avatar
wu-sheng 已提交
50 51
* 实时链路异常告警邮件
![告警邮件](http://wu-sheng.github.io/sky-walking/sample-code/screenshoot/alarmMail.jpg)
wu-sheng's avatar
wu-sheng 已提交
52

wu-sheng's avatar
wu-sheng 已提交
53
## 分析汇总
wu-sheng's avatar
wu-sheng 已提交
54

wu-sheng's avatar
wu-sheng 已提交
55
# Quick Start
wu-sheng's avatar
wu-sheng 已提交
56
## 编译与部署
wu-sheng's avatar
补充  
wu-sheng 已提交
57
- 参考《[代码编译部署说明](BUILD_DOC.md)
wu-sheng's avatar
wu-sheng 已提交
58

59 60
## 引入核心SDK
无论试用哪种插件,都必须引入
wu-sheng's avatar
wu-sheng 已提交
61
```xml
wu-sheng's avatar
wu-sheng 已提交
62
<!-- API日志输出,客户端可指定所需的log4j2版本 -->
wu-sheng's avatar
wu-sheng 已提交
63
<!-- 2.4.1为开发过程所选用版本 -->
wu-sheng's avatar
wu-sheng 已提交
64 65 66 67 68
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.4.1</version>
</dependency>
wu-sheng's avatar
wu-sheng 已提交
69 70 71 72 73 74
<!-- 监控api,可监控插件不支持的调用 -->
<dependency>
    <groupId>com.ai.cloud</groupId>
    <artifactId>skywalking-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
wu-sheng's avatar
wu-sheng 已提交
75 76
```

wu-sheng's avatar
wu-sheng 已提交
77 78 79 80 81 82 83 84 85
## 使用全新的main class。原main class,以及参数作为参数传入
```shell
#原进程启动命令:
java com.company.product.Startup arg0 arg1

#全新的进程启动命令:
java com.ai.cloud.skywalking.plugin.TracingBootstrap com.company.product.Startup arg0 arg1
```

wu-sheng's avatar
wu-sheng 已提交
86
## 根据所需插件,配置应用程序
wu-sheng's avatar
补充  
wu-sheng 已提交
87
- 参考《[SDK用户指南](skywalking-sdk-plugin)
88
- 注意:插件不会引用所需的第三方组件(如Spring、dubbo、dubbox等),请自行引入所需的版本。
wu-sheng's avatar
wu-sheng 已提交
89

90

wu-sheng's avatar
wu-sheng 已提交
91
## 下载并设置授权文件
wu-sheng's avatar
wu-sheng 已提交
92 93
- 注册并登陆过skywalking-webui,创建应用。(一个用户代表一个逻辑集群,一个应用代表一个服务集群。如前后端应用应该设置两个应用,但归属一个用户)
- 下载授权文件,并在运行时环境中,将授权文件加入到CLASSPATH中
wu-sheng's avatar
wu-sheng 已提交
94 95

## 在运行时环境中设置环境变量
wu-sheng's avatar
wu-sheng 已提交
96
```
wu-sheng's avatar
wu-sheng 已提交
97
export SKYWALKING_RUN=true
wu-sheng's avatar
wu-sheng 已提交
98 99 100
```
- 设置完成后,可以在当前环境中启动业务应用系统

wu-sheng's avatar
wu-sheng 已提交
101
## 通过扩展log4j或log4j2,在应用日志中,显示trace-id
wu-sheng's avatar
wu-sheng 已提交
102 103
### log4j
- 编译并发布skywalking-log/log4j-1.x-plugin
wu-sheng's avatar
wu-sheng 已提交
104 105 106 107 108 109
```xml
<dependency>
    <groupId>com.ai.cloud</groupId>
    <artifactId>skywalking-log4j-1.x-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
wu-sheng's avatar
wu-sheng 已提交
110 111 112 113 114 115 116 117 118 119 120 121
```
- 配置log4j配置文件
```properties
log4j.appender.A1.layout=com.ai.cloud.skywalking.plugin.log.log4j.v1.x.TraceIdPatternLayout
#%x为traceid的转义符
log4j.appender.A1.layout.ConversionPattern=[%x] %-d{yyyy-MM-dd HH:mm:ss.SSS} %c %n[%p] %n%m%n
```

### log4j2
- 编译并发布skywalking-log/log4j-2.x-plugin
- 引用所需的日志插件
```xml
wu-sheng's avatar
wu-sheng 已提交
122 123 124 125 126 127
<dependency>
    <groupId>com.ai.cloud</groupId>
    <artifactId>skywalking-log4j-2.x-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
```
wu-sheng's avatar
wu-sheng 已提交
128 129 130 131 132 133
- 配置log4j2配置文件
```xml
<!--%tid为traceid的转义符-->
<PatternLayout  pattern="%d{HH:mm:ss.SSS} [%tid] [%t] %-5level %logger{36} - %msg%n"/>
```

wu-sheng's avatar
wu-sheng 已提交
134 135
- 日志示例
```
wu-sheng's avatar
wu-sheng 已提交
136
#tid:N/A,代表环境设置不正确或监控已经关闭
wu-sheng's avatar
wu-sheng 已提交
137 138 139 140
#tid: ,代表测试当前访问不在监控范围
#tid:1.0a2.1453065000002.c3f8779.27878.30.184,标识此次访问的tid信息,示例如下
[DEBUG] Returning handler method [public org.springframework.web.servlet.ModelAndView com.ai.cloud.skywalking.example.controller.OrderSaveController.save(javax.servlet.http.HttpServletRequest)] TID:1.0a2.1453192613272.2e0c63e.11144.58.1 2016-01-19 16:36:53.288 org.springframework.beans.factory.support.DefaultListableBeanFactory 
```
wu-sheng's avatar
wu-sheng 已提交
141

wu-sheng's avatar
wu-sheng 已提交
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
## 如何在追踪日志中记录日志上下文
- 使用sky walking提供的专用API,可以将日志保存到追踪日志中。示例如下:
```java
String businessKey = "phoneNumber:" + phoneNumber + ",resourceId:" + resourceId + ",mail:" + mail;
BusinessKeyAppender.setBusinessKey2Trace(businessKey);
```

## 如何在代码中获取traceid
- 通过API获取traceid
```java
Tracing.getTraceId();
```

## 还有其他方式获取traceid么?
- 通过web应用的http调用入口,通过返回的header信息,找到此次调用的traceid。前提:此web应用的url,已经使用skywalking进行监控。

wu-sheng's avatar
wu-sheng 已提交
158
# 源代码说明
wu-sheng's avatar
wu-sheng 已提交
159
* [HBase存储结构说明](https://github.com/wu-sheng/sky-walking/blob/master/skywalking-server/doc/hbase_table_desc.md)