介绍
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,天源迪科,当当网,京东金融 |
安装
官网地址:
GitHub:
下载地址:
可以从上述地址下载,也可以直接到github上下载,选择最新版本,运行环境:jdk7,jdk8,tomcat7,tomcat8(tomcat针对web项目),建议安装使用过程,多看github上的doc文档;
Skywalking支持两种存储方式:H2和ES,本教程使用ES作存储
安装所需环境:JDK,ES(安装es: )
上述环境安装成功后,从官网下载安装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主配置文件:
启动服务
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 |
相关链接