1.SkyWalking 是什么?
分布式系統的應用程序性能監視工具,專為微服務、云原生架構和基于容器(Docker、K8s、Mesos)架構而設計。
提供分布式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案。
2.SkyWalking 有哪些功能?
- 多種監控手段。可以通過語言探針和 service mesh 獲得監控是數據。
- 多個語言自動探針。包括 Java,.NET Core 和 Node.JS。
- 輕量高效。無需大數據平臺,和大量的服務器資源。
- 模塊化。UI、存儲、集群管理都有多種機制可選。
- 支持告警。
- 優秀的可視化解決方案。
3.整體架構
整個架構,分成上、下、左、右四部分:
考慮到讓描述更簡單,我們舍棄掉 Metric 指標相關,而著重在 Tracing 鏈路相關功能。
- 上部分?Agent?:負責從應用中,收集鏈路信息,發送給 SkyWalking OAP 服務器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 數據信息。而我們目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 數據,傳遞給服務器。
- 下部分?SkyWalking OAP?:負責接收 Agent 發送的 Tracing 數據信息,然后進行分析(Analysis Core) ,存儲到外部存儲器( Storage ),最終提供查詢( Query )功能。
- 右部分?Storage?:Tracing 數據存儲。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多種存儲器。而我們目前采用的是 ES ,主要考慮是 SkyWalking 開發團隊自己的生產環境采用 ES 為主。
- 左部分?SkyWalking UI?:負責提供控臺,查看鏈路等等。
4.搭建 SkyWalking 單機環境
4.1使用各種數據庫作為skywalking數據存儲的地方,可以是es,mysql,h2等
4.2在官網下載skywalking?
Index of /dist/skywalkinghttps://archive.apache.org/dist/skywalking/
?
?將下載好的包上傳至服務器,并解壓
mkdir -p /Users/yunai/skywalking
cd /Users/yunai/skywalking
tar -zxvf 文件名
$ ls -ls4 drwxr-xr-x 8 root root 4096 Sep 9 15:09 agent # SkyWalking Agent4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 bin # 執行腳本4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 config # SkyWalking OAP Server 配置文件
32 -rwxr-xr-x 1 root root 28903 Sep 9 14:32 LICENSE4 drwxr-xr-x 3 root root 4096 Sep 9 15:44 licenses
32 -rwxr-xr-x 1 root root 31850 Sep 9 14:32 NOTICE
16 drwxr-xr-x 2 root root 16384 Sep 9 15:22 oap-libs # SkyWalking OAP Server4 -rw-r--r-- 1 root root 1978 Sep 9 14:32 README.txt4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 webapp # SkyWalking UI
?4.3 啟動步驟
正文
Skywalking
整體分為 3 個部分:agent
,backend
,UI
agent
?代理,應用啟動的時候后,通過該agent
收集數據并上報backend
。backend
?數據收集器,agent
收集的數據會發送給backend
,然后數據處理后入庫。ui
也就是提供可視化服務的界面。
在安裝前,請在官方網址進行下載:下載地址,下載的時候,請一定注意了不是第一行的Source Code
而是第二行的Binary Distribution
。
backend
如上所述:backend
的目的是收集agent
的上報的數據,然后持久化到存儲中,起到承上啟下的功能,所以首先安裝backend
。
前置知識
與之先關的目錄和文件主要是如下幾個:
bin
目錄下的oapService.sh
,它就是?backend
?的啟動腳本config
目錄下的application.yml
,它是backend
的配置信息oap-libs
是backend
啟動需要的所有jar
包logs
目錄下的skywalking-oap-server.log
是啟動后的日志文件。
啟動步驟
以下內容是 基于MySQL
作為存儲來講解的。
第一步:修改config
下的配置文件application.yml
storage.selector
修改為mysql
,默認是用于演示的h2
,你也可以選擇自己的存儲介質。- 然后找到
store
下的?mysql
節點 - 修改
mysql.properties
中基本信息:jdbcUrl
/dataSource.user
/dataSource.password
2020年08月10日 補充
低估了 skywalking 使用數據空間的能力,差點導致了生產事故,幸好收到了短信提示,及時處理。這里補充下注意事項
在 該配置文件下還有:
recordDataTTL
和metricsDataTTL
,表示的數據數據保存的時間,單位是天,分別為 3天 和 7天。我這個服務有 3 個服務節點,12 個小時就占用了18G 的內存空間,這樣算下來,基本上一個節點一小時最起碼就占用了 0.5G 的空間。
所以請大家一定要注意評估你數據庫的存儲空間!
第二步:將mysql
的驅動包,拷貝到opa-libs
目錄中。官方可沒有自帶mysql
的驅動包,所以請自行下載后拷貝到這個目錄。
mysql8
一定要找對應的mysql8
的?jar
?包,不要找mysql5.7
的驅動包,MySql8驅動mysql5.7
的數據庫,最好也是5.7
的(理論上 8 的也是兼容),MySQL5.7驅動
如果上述流程完成后,嘗試運行bin
目錄下的oapService.sh
sh oapService.sh
然后查看logs/skywalking-oap-server.log
的日志,如果失敗會有日志,接下來你就見招拆招吧。
啟動后,你可以通過如下幾種方式觀察是否成功。
第一就是可以通過查看端口運行情況判定:
lsof -i:12800 #數據上報端口,很重要的端口
lsof -i:11800
如果端口被占用,日志又沒有錯誤保存,那么基本啟動成功了。
第二就是查看jdbcUrl
對應的數據庫是否已經默認創建好了數據表。
Bug1
我在本文的時候,發現日志報錯了一個錯誤,提示:Data too long for column 'statement' at row 1
。
簡單查了下應該是Segment
表的字段statement
,原本是?200的長度,我將其改為 2000后,該問題目前為止沒有再輸出。
還有就是top_n_database_staement
有這個字段,我暫時也將其修改到了2000
。
同時提了issue
官方也很快做出了響應,建議修改為2000
。直達地址
Bug2
提示:Specified key was too long; max key length is 767 bytes
最簡單的方法就是將參數:innodb_large_prefix
修改為ON
,其他方法請自行百度了解
ui
該組件將數據可視化出來,供大家更直觀的查看數據。
前置知識
與之關聯的目錄和文件大體如下:
bin
下的webappService.sh
為UI
的啟動腳本webapp
目錄,其中包括了 2 個重要的東西webapp.yml
,包括?UI
啟動的端口和上報地址skywalking-webapp.jar
,啟動 jar包
- logs下的文件
webapp.log
啟動步驟
第一步:修改webapp.yml
,其默認的端口是經典的8080
,所以還是修改為一個特殊點的端口,避免啟動出錯。
第二部:修改collecotr.ribbon.listofServers
的?ip
實際運行的?ip
第三步:通過 bin 下的webappService.sh
啟動
sh webappService.sh
不要看到控制臺輸出SkyWalking Web Application started successfully!
就認為 OK 了。
還是要自己看看日志webapp.log
有沒有報錯內容。、
agent
agent
?的作用是同應用一起啟動,將應用的指標數據上傳。agent
?我記得是可以共享的,就是所有的應用都用同一個?agent
,但是為了安全,還是建議每個應用一個?agent
。
與之相關的目錄為agent
,其中最關鍵的就是agent/config/agent.config
這個配置文件
以下是使用步驟:
- 拷貝一份
agent
到任意一個你喜歡的地方,我喜歡放在 jar包的同級目錄。 - 修改
agent.config
中的參數agent.service_name
修改實際的,同一個應用多個實例,其?service_name
相同agent.instance_name
每個實例都應該是唯一的,建議自行修改,這樣UI上可視化后,更有意義。collector.backend_service
修改為實際的backend
所在主機的ip
和端口。
- 在 jar包啟動腳本中添加如下命令
-javaagent:/xxx/agent/skywalking-agent.jar