2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器;
针对分布式系统的应用性能监控系统,特别针对微服务、cloud native和容器化(Docker, Kubernetes, Mesos)架构, 其核心是个分布式追踪系统;
使用java探针字节码增加技术,实现对整个应用的监控 ;
对应用零侵入。
作用
Apm,链路追踪,告警。
对比
|
Cat |
Zipkin |
Pinpoint |
skywalking |
依赖 |
Java 6,7,8 Maven 3.2.3+ mysql5.6 Linux 2.6以及之上(2.6内核才可以支持epoll) |
Java 6,7,8 Maven3.2+ rabbitMQ
|
Java 6,7,8 maven3+ Hbase0.94+
|
Java 6,7,8 maven3.0+ nodejs zookeeper elasticsearch
|
实现方式 |
代码埋点(拦截器,注解,过滤器等) |
拦截请求,发送(http,mq)数据至zipkin服务 |
java探针,字节码增强 |
java探针,字节码增强 |
颗粒度 |
代码级 |
接口级 |
方法级 |
方法级 |
页面UI |
***** |
** |
***** |
**** |
存储选择 |
Mysql,hdfs |
In-memory,mysql,cassandra,elasticsearch |
Hbase |
Elasticsearch,h2 |
通信方式 |
- |
http,mq |
Thrift |
GRPC |
MQ监控 |
不支持 |
不支持 |
不支持 |
RocketMq,kafka |
全局调用统计 |
支持 |
不支持 |
支持 |
支持 |
Trace查询 |
不持支 |
支持 |
不支持 |
支持 |
报警 |
支持 |
不支持 |
支持 |
支持 |
Jvm监控 |
不支持 |
不支持 |
支持 |
支持 |
Star数 |
9.4K |
11.1K |
8.8K |
8.8K |
优点 |
功能完善 |
spring-cloud-sleuth可以很好的集成zipkin , 代码无侵入,集成非常简单 , 社区更加活跃。 对外提供有query接口,更加容易二次开发
|
完全无侵入, 仅需修改启动方式,界面完善,功能细致。 |
完全无侵入,界面完善,支持应用拓扑图及单个调用链查询。 功能比较完善(zipkin + pinpoint)
|
缺点 |
代码侵入性较强,需要埋点 文档比较混乱,文档与发布版本的符合性较低,需要依赖点评私服 (或者需要把他私服上的jar手动下载下来,然后上传到我们的私服上去)。
|
默认使用的是http请求向zipkin上报信息,耗性能。 跟sleuth结合可以使用rabbitMQ的方式异步来做,增加了复杂度,需要引入rabbitMQ 。 数据分析比较简单。
|
不支持查询单个调用链, 对外表现的是整个应用的调用生态。 二次开发难度较高
|
3.2版本之前BUG较多 ,网上反映兼容性较差 . 3.2新版本的反映情况较少 依赖较多。
|
文档 |
网上资料较少,仅官网提供的文档,比较乱 |
文档完善 |
文档完善 |
文档完善 |
开发者 |
大众点评 |
Twiter |
Naver |
吴晟(华为开发者) ,目前已经加入Apache孵化器 |
使用公司 |
大众点评,携程,陆金所,同程旅游,猎聘网,拼多多 |
Twiter |
Naver |
华为,alibaba cloud,天源迪科,当当网,京东金融 |
安装
官网地址:
http://skywalking.apache.org/
http://incubator.apache.org/projects/skywalking.html
GitHub:
https://github.com/OpenSkywalking/skywalking-netcore
下载地址:
http://skywalking.apache.org/downloads/
可以从上述地址下载,也可以直接到github上下载,选择最新版本,运行环境:jdk7,jdk8,tomcat7,tomcat8(tomcat针对web项目),建议安装使用过程,多看github上的doc文档;
Skywalking支持两种存储方式:H2和ES,本教程使用ES作存储
安装所需环境:JDK,ES(安装es:https://www.cnblogs.com/lizichao1991/p/7809156.html)
上述环境安装成功后,从官网下载安装tar包
解压:
tar -xvzf apache-skywalking-apm-incubating-5.0.0-GA.tar.gz -C /usr/local/
进入到软件主目录
cd /usr/local/apache-skywalking-apm-incubating/
$ ls
agent bin collector-libs config DISCLAIMER LICENSE licenses NOTICE README.txt webapp
相关文件介绍:
Agent:java客户端程序目录
Bin:服务端程序启动脚本(包括windows和linux)
Config:配置文件所在目录
Webapp:服务端程序所在服务
使用
启动skywalking服务端
确保10800,11800,12800,8080端口没有被占用(skywalking默认端口,可以更改)
修改skywalking主配置文件:skywalking主配置说明.docx
启动服务
sh bin/startup.sh
访问dashboard,服务端程序所在服务器的地址+8080端口访问,默认用户名密码:admin/admin
启动成功后,访问界面如上图所示
部署客户端
客户端程序就是agent整个目录,一个客户端对应一个anent文件,配置文件在agent/config/agent.config
agent.application_code=APPNAME
collector.servers=192.168.6.102:10800
主要修改当前客户端所在app的名称和访问collector的地址,启动客户端服务的时候在JVM增加启动参数:
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
参数值为skywalking-agent.jar的绝对路径
高级特性
插件全部放置在 /plugins 目录中.新的插件,也只需要在启动阶段,放在目录中,就自动生效,删除则失效;Log默认使用文件输出到 /logs目录中.
界面介绍拓步图
实例图
系统监控图
调用链路Span图
服务图
原理系统架构图功能清单图
Javaagent,asm(字节码增强),代理,切面,反射
服务端配置说明
cluster:
# The Zookeeper cluster for collector cluster management.
zookeeper:
hostPort: localhost:2181
sessionTimeout: 100000
naming:
# Host and port used for agent config
jetty:
# 配置agent发现collector集群,host必须要系统真实网络ip地址. agent --(HTTP)--> collector
host: localhost
port: 10800
contextPath: /
remote:
gRPC:
# 配置collector节点在集群中相互通信,host必须要系统真实网络ip地址. collectorN --(gRPC) --> collectorM
host: localhost
port: 11800
agent_gRPC:
gRPC:
# 配置agent上传(链路跟踪和指标)数据到collector,host必须要系统真实网络ip地址. agent--(gRPC)--> collector
host: localhost
port: 11800
agent_jetty:
jetty:
# 配置agent上传(链路跟踪和指标)数据到collector,host必须要系统真实网络ip地址. agent--(HTTP)--> collector
# SkyWalking native Java/.Net/node.js agents don't use this.
# Open this for other implementor.
host: localhost
port: 12800
contextPath: /
analysis_register:
default:
analysis_jvm:
default:
analysis_segment_parser:
default:
bufferFilePath: ../buffer/
bufferOffsetMaxFileSize: 10M
bufferSegmentMaxFileSize: 500M
ui:
jetty:
# 配置UI访问collector,host必须要系统真实网络ip地址.
host: localhost
port: 12800
contextPath: /
# 配置Elasticsearch 集群连接信息
storage:
elasticsearch:
clusterName: CollectorDBCluster
clusterTransportSniffer: true
clusterNodes: localhost:9300
indexShardsNumber: 2
indexReplicasNumber: 0
highPerformanceMode: true
# 设置统计指标数据的失效时间,当指标数据失效时系统将数据自动删除.
traceDataTTL: 90 # 单位为分
minuteMetricDataTTL: 45 # 单位为分
hourMetricDataTTL: 36 # 单位为小时
dayMetricDataTTL: 45 # 单位为天
monthMetricDataTTL: 18 # 单位为月
configuration:
default:
# namespace: xxxxx
# 告警阀值
applicationApdexThreshold: 2000
serviceErrorRateThreshold: 10.00
serviceAverageResponseTimeThreshold: 2000
instanceErrorRateThreshold: 10.00
instanceAverageResponseTimeThreshold: 2000
applicationErrorRateThreshold: 10.00
applicationAverageResponseTimeThreshold: 2000
# 热力图配置,修改配置后需要删除热力指标统计表,由系统重建
thermodynamicResponseTimeStep: 50
thermodynamicCountOfResponseTimeSteps: 40
客户端配置说明
# 当前的应用编码,最终会显示在webui上。
# 建议一个应用的多个实例,使用有相同的application_code。请使用英文
agent.application_code=Your_ApplicationName
# 每三秒采样的Trace数量
# 默认为负数,代表在保证不超过内存Buffer区的前提下,采集所有的Trace
# agent.sample_n_per_3_secs=-1
# 设置需要忽略的请求地址
# 默认配置如下
# agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg
# 探针调试开关,如果设置为true,探针会将所有操作字节码的类输出到/debugging目录下
# skywalking团队可能在调试,需要此文件
# agent.is_open_debugging_class = true
# 对应Collector的config/application.yml配置文件中 agent_server/jetty/port 配置内容
# 例如:
# 单节点配置:SERVERS="127.0.0.1:8080"
# 集群配置:SERVERS="10.2.45.126:8080,10.2.45.127:7600"
collector.servers=127.0.0.1:10800
# 日志文件名称前缀
logging.file_name=skywalking-agent.log
# 日志文件最大大小
# 如果超过此大小,则会生成新文件。
# 默认为300M
logging.max_file_size=314572800
# 日志级别,默认为DEBUG。
logging.level=DEBUG
相关链接
https://blog.csdn.net/u012394095/article/details/79700200
https://blog.csdn.net/jilo88/article/details/81355265
https://blog.51cto.com/270142877/2331569?source=dra
https://juejin.im/post/5ab5b0e26fb9a028e25d7fcb