SkyWalking 搭建及簡單使用(Linux)

1.需求

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

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

  • SkyWalking:中國人吳晟(華爲)開源的一款分佈式追蹤,分析,告警的工具,如今是Apache旗下開源項目,對雲原生支持,目前增加勢頭強勁,社區活躍,中文文檔沒有語言障礙。
  • Zipkin:Twitter公司開源的一個分佈式追蹤工具,被Spring Cloud Sleuth集成,使用普遍而穩定,須要在應用程序中埋點,對代碼侵入性強
  • Pinpoint:一個韓國團隊開源的產品,探針收集的數據粒度很是細,但性能損耗大,因其出現的時間較長,完成度很高。
  • Cat:美團大衆點評開源的一款分佈式鏈路追蹤工具。須要在應用程序中埋點,對代碼侵入性強。

        項目不想侵入其餘的代碼,工具儘可能損耗性能低,工具的社區活越,文檔完善也是考慮的必要條件,通過如下表格部分參數對比,相對來講,SkyWalking更佔優,所以團隊採用SkyWalking做爲APM工具。node

工具名稱 代碼入侵方式 性能 ui 使用人數 粒度 告警 依賴分析 traceID查詢
SkyWalking 無侵入 豐富 方法級
Pinpoint 無侵入 豐富 方法級
Zipkin 侵入低 通常 接口級
Cat 侵入高 豐富 較多 代碼級

 

 

 

 

 

 

 

3.工具簡介

官方有兩句話介紹SkyWalking:linux

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

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

SkyWalking 總體架構數據庫

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

考慮到讓描述更簡單,咱們捨棄掉 Metric 指標相關,而着重在 Tracing 鏈路相關功能。bootstrap

  • 上部分 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.搭建步驟單機版

由於對工具可用性要求不高,工具掛掉不會影響系統,因此採用單機版。vim

  • 第一步,搭建一個 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服務器,解壓文件

tar -zxvf elasticsearch-7.2.0-linux-x86_64.tar.gz //解壓壓縮包
cd elasticsearch-7.2.0 //進入目錄
mkdir data //建立data文件夾,保存數據

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

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。

./bin/elasticsearch -d

5.啓動失敗報錯:經過日誌能夠發現,es不容許linux經過root用戶啓動,緣由是出於系統安全考慮設置的條件。因爲Elasticsearch能夠接收用戶輸入的腳本而且執行,爲了系統安全考慮,直接使用root權限會帶來很大風險,因此咱們建立一個elsearch用戶

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]
    ... 6 more

6.建立Elasticsearch啓動用戶,並設置權限等

groupadd elsearch
useradd elsearch -g elsearch -p elasticsearch
chown -R elsearch:elsearch elasticsearch-7.2.0

7.使用elsearch用戶,再次嘗試啓動

cd elasticsearch-7.2.0
su elsearch
./bin/elasticsearch -d

8.啓動失敗,有兩個錯誤,是由於有兩個參數的值過小

ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch 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]

  問題解決辦法

# 第一個問題:修改/etc/security/limits.conf文件,添加或修改以下行
hard    nofile           65536
soft    nofile           65536

# 第二個問題:修改 /etc/sysctl.conf 文件,添加以下行
vm.max_map_count=262144

9.使用elsearch用戶,再次嘗試啓動(Elasticsearch默認內存是1G,由於個人服務器內存是足夠的,沒有修改配置)

# 修改內存大小 config/jvm.options
-Xms200m
-Xmx200m

10.查看是否啓動成功:訪問ip:9200,出現如下信息即爲啓動成功

{
  "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服務器,解壓文件

tar -zxvf apache-skywalking-apm-es7-8.0.0.tar.gz
cd apache-skywalking-apm-es7-8.0.0

4.3 SkyWalking OAP 搭建

1.修改 OAP 配置文件 config/application.yml

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

$ bin/oapService.sh

SkyWalking OAP started successfully!

4.4 SkyWalking UI 搭建

1.因爲SkyWalking UI的默認地址是8080,與不少中間件有衝突,能夠修改一下

# 修改webapp/webapp.yml
server:
  port: 18080

2.啓動 SkyWalking UI 服務

$ bin/webappService.sh

SkyWalking Web Application started successfully!

4.5 SkyWalking Agent

1.修改探針默認配置 agent/config/agent.config

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。經過設置啓動參數的方式檢測系統,沒有代碼侵入。

# 在服務的啓動命令中添加參數javaagent、Dskywalking.agent.service_name
nohup java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=a  -jar a.jar > a.log 2>&1 &

5.效果展現

儀表盤:能夠查看服務性能,接口整體耗時,數據庫sql執行耗時排行等等

拓撲圖:能夠查看已經檢測的服務及服務之間的關係

追蹤:能夠看到服務調用的路徑

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

剛接觸SkyWalking還有不少的功能細節須要再深刻了解,若是發現有問題,歡迎你們指教。

相關文章
相關標籤/搜索