介绍
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