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服務器,解壓檔案
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還有很多的功能細節需要再深入了解,如果發現有問題,歡迎大家指教,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/574.html
標籤:其他
上一篇:開源軟體存在漏洞導致系統崩潰
