1. 程式人生 > 實用技巧 >SkyWalking 搭建及簡單使用(Linux)(轉載)

SkyWalking 搭建及簡單使用(Linux)(轉載)

1.需求

公司專案採用微服務的架構,服務很多,人工監控是不可能的,專案的訪問量很大,想通過日誌查詢某個方法中效能的問題也是非常困難的。但是系統的效能問題是不能忽視的。系統性能檢測的問題如鯁在喉,經過長時間的查詢資料,功夫不負有心人,終於發現幾個比較好的開源的APM(Application Performance Management)檢測工具。

2.常見apm參考對比及工具選型

  • SkyWalking:中國人吳晟(華為)開源的一款分散式追蹤,分析,告警的工具,現在是Apache旗下開源專案,對雲原生支援,目前增長勢頭強勁,社群活躍,中文文件沒有語言障礙。
  • Zipkin:Twitter公司開源的一個分散式追蹤工具,被Spring Cloud Sleuth整合,使用廣泛而穩定,需要在應用程式中埋點,對程式碼侵入性強
  • Pinpoint:一個韓國團隊開源的產品,探針收集的資料粒度非常細,但效能損耗大,因其出現的時間較長,完成度很高。
  • Cat:美團大眾點評開源的一款分散式鏈路追蹤工具。需要在應用程式中埋點,對程式碼侵入性強。

專案不想侵入其他的程式碼,工具儘量損耗效能低,工具的社群活越,文件完善也是考慮的必要條件,經過以下表格部分引數對比,相對來說,SkyWalking更佔優,因此團隊採用SkyWalking作為APM工具。

工具名稱 程式碼入侵方式 效能 ui 使用人數 粒度 告警 依賴分析 traceID查詢
SkyWalking 無侵入 豐富 方法級
Pinpoint
無侵入 豐富 方法級
Zipkin 侵入低 一般 介面級
Cat 侵入高 豐富 較多 程式碼級

3.工具簡介

官方有兩句話介紹SkyWalking:

SkyWalking是分散式系統的應用程式效能監視工具,專為微服務、雲原生架構和基於容器(Docker、K8S、Mesos)架構而設計

SkyWalking是觀察性分析平臺和應用效能管理系統。提供分散式追蹤、服務網格遙測分析、度量聚合和視覺化一體化解決方案

SkyWalking 整體架構

整個架構,分成上、下、左、右四部分:

考慮到讓描述更簡單,我們捨棄掉 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.搭建步驟單機版

因為對工具可用性要求不高,工具掛掉不會影響系統,所以採用單機版。

  • 第一步,搭建一個 Elasticsearch 服務。
  • 第二步,下載 SkyWalking 軟體包。
  • 第三步,搭建一個 SkyWalking OAP 服務。
  • 第四步,搭建一個 SkyWalking UI 服務。
  • 第五步,啟動系統服務,並配置 SkyWalking Agent。

4.1 Elasticsearch 搭建

1.下載elasticsearch-7.2.0,下載地址:https://www.elastic.co/cn/downloads/elasticsearch

2.上傳下載的壓縮包到linux伺服器,解壓檔案

1 2 3 tar-zxvf elasticsearch-7.2.0-linux-x86_64.tar.gz//解壓壓縮包 cdelasticsearch-7.2.0//進入目錄 mkdirdata//建立data資料夾,儲存資料

3.修改Elasticsearch配置:config/elasticsearch.yml

1 2 3 4 5 6 7 8 9 10 11 12 cluster.name: apm-application node.name: node-1 path.data:/app/elasticsearch/elasticsearch-7.2.0/data path.logs:/app/elasticsearch/elasticsearch-7.2.0/logs # ES監聽的ip地址 network.host: 0.0.0.0 cluster.initial_master_nodes: ["node-1"] # 需要開啟跨域才能給elasticsearch-head,kibana等連線 http.cors.enabled:true http.cors.allow-origin:"*" http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

4.嘗試啟動Elasticsearch。

1 ./bin/elasticsearch-d

5.啟動失敗報錯:通過日誌可以發現,es不允許linux通過root使用者啟動,原因是出於系統安全考慮設定的條件。由於Elasticsearch可以接收使用者輸入的指令碼並且執行,為了系統安全考慮,直接使用root許可權會帶來很大風險,所以我們建立一個elsearch使用者

1 2 3 4 5 6 Caused by: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-7.2.0.jar:7.2.0] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-7.2.0.jar:7.2.0] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-7.2.0.jar:7.2.0] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-7.2.0.jar:7.2.0] ... 6more

6.建立Elasticsearch啟動使用者,並設定許可權等

1 2 3 groupadd elsearch useraddelsearch -g elsearch -p elasticsearch chown-R elsearch:elsearch elasticsearch-7.2.0

7.使用elsearch使用者,再次嘗試啟動

1 2 3 cdelasticsearch-7.2.0 suelsearch ./bin/elasticsearch-d

8.啟動失敗,有兩個錯誤,是因為有兩個引數的值太小

1 2 3 ERROR: [2] bootstrap checks failed [1]: maxfiledescriptors [4096]forelasticsearch process is too low, increase to at least [65536] [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

問題解決辦法

1 2 3 4 5 6 # 第一個問題:修改/etc/security/limits.conf檔案,新增或修改如下行 hard nofile 65536 soft nofile 65536 # 第二個問題:修改 /etc/sysctl.conf 檔案,新增如下行 vm.max_map_count=262144

9.使用elsearch使用者,再次嘗試啟動(Elasticsearch預設記憶體是1G,因為我的伺服器記憶體是足夠的,沒有修改配置)

1 2 3 # 修改記憶體大小 config/jvm.options -Xms200m -Xmx200m

10.檢視是否啟動成功:訪問ip:9200,出現以下資訊即為啟動成功

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 { "name":"node-1", "cluster_name":"apm-application", "cluster_uuid":"*******************", "version": { "number":"7.2.0", "build_flavor":"default", "build_type":"tar", "build_hash":"615e27c", "build_date":"2019-06-20T15:54:18.811730Z", "build_snapshot":false, "lucene_version":"8.0.0", "minimum_wire_compatibility_version":"6.8.0", "minimum_index_compatibility_version":"6.0.0-beta1" }, "tagline":"You Know, for Search" }

4.2下載 SkyWalking 軟體包

1.下載SkyWalking官方包,下載地址:http://skywalking.apache.org/downloads/,我們下載作業系統對應的釋出版。這裡,我們選擇apache-skywalking-apm-es7-8.0.0.tar.gz版本想使用 Elasticsearch 7.X 版本作為儲存。

2.上傳下載的壓縮包到linux伺服器,解壓檔案

1 2 tar-zxvf apache-skywalking-apm-es7-8.0.0.tar.gz cdapache-skywalking-apm-es7-8.0.0

4.3SkyWalking OAP 搭建

1.修改 OAP 配置檔案config/application.yml

1 2 3 4 5 6 7 8 9 vim config/application.yml # 配置檔案中預設選擇的是H2資料來源,切換成elasticsearch7,把elasticsearch7配置成自己安裝的資訊 # 重點修改 storage 配置項,通過 storage.selector 配置項來設定具體使用的儲存器。 # storage.elasticsearch 配置項,設定使用 Elasticsearch6.X 版本作為儲存器。 # 可以主要修改nameSpace、clusterNodes兩個配置即可,設定使用的Elasticsearch的叢集和名稱空間。 # storage.elasticsearch7配置項,設定使用Elasticsearch7.X 版本作為儲存器。 storage: selector: ${SW_STORAGE:elasticsearch7}

2.啟動OAP

1 2 3 $ bin/oapService.sh SkyWalking OAP started successfully!

4.4SkyWalking UI 搭建

1.由於SkyWalking UI的預設地址是8080,與很多中介軟體有衝突,可以修改一下

1 2 3 # 修改webapp/webapp.yml server: port: 18080

2.啟動 SkyWalking UI 服務

1 2 3 $ bin/webappService.sh SkyWalking Web Application started successfully!

4.5SkyWalking Agent

1.修改探針預設配置agent/config/agent.config

1 2 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.0.4:11800} agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:1}

取樣率修改

agent.sample_n_per_3_secs配置說明:

在訪問量較少時,鏈路全量收集不會對系統帶來太大負擔,能夠完整的觀測到系統的執行狀況。但是在訪問量較大時,全量的鏈路收集,對鏈路收集的客戶端(agent探針)、服務端(SkyWalking OAP)、儲存器(例如說 Elastcsearch)都會帶來較大的效能開銷,甚至會影響應用的正常執行。在訪問量級較大的情況下,往往會選擇抽樣取樣,只收集部分鏈路資訊。SkyWalking Agent 在 agent/config/agent.config 配置檔案中,定義了 agent.sample_n_per_3_secs 配置項,設定每 3 秒可收集的鏈路資料的數量。

2.放置探針:我們需要將agent目錄,拷貝到 Java 應用所在的伺服器上。這樣,Java 應用才可以配置使用該 SkyWalking Agent。通過設定啟動引數的方式檢測系統,沒有程式碼侵入。

1 2 # 在服務的啟動命令中新增引數javaagent、Dskywalking.agent.service_name nohupjava -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=a -jar a.jar > a.log 2>&1 &

5.效果展示

儀表盤:可以檢視服務效能,介面總體耗時,資料庫sql執行耗時排行等等

拓撲圖:可以檢視已經檢測的服務及服務之間的關係

追蹤:可以看到服務呼叫的路徑

追蹤:可以看到整個鏈路中每一個步驟的耗時情況,其中可以看到方法中各個sql執行耗時及對應的sql,可以有針對的優化sql

原文連結:https://www.cnblogs.com/diShuiZhiYi/p/13451254.html

剛接觸SkyWalking還有很多的功能細節需要再深入瞭解,如果發現有問題,歡迎大家指教。