介紹
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:
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
|
相關鏈接