如果能跟蹤每個請求,中間請求經過哪些微服務,請求耗時,網路延遲,業務邏輯耗時等。我們就能更好地分析系統瓶頸、解決系統問題,因此鏈路跟蹤很重要。
想在無程式碼入侵前提下實現:
檢視服務之間鏈路呼叫關係;
把各個微服務分散的日誌收集起來;
監控分析系統情況;
用SkyWalking吧,它不會讓你失望。
skywalking介紹
國人開源的產品,主要開發人員來自於華為,2019年SkyWalking加入Apache成為頂級專案,支援Java、.Net、NodeJs等探針,資料儲存支援h2、Mysql、Elasticsearch等。採用位元組碼注入的方式實現無程式碼侵入,功能全面,效能優秀,且對雲原生支援,目前增長勢頭強勁,社群活躍,其鏈路追蹤,效能監控,日誌收集、告警等功能被開發者廣泛使用,遺憾中文文件很少,使用不便。
介紹參考:https://www.jianshu.com/p/ffa...
官網:https://skywalking.apache.org
github:https://github.com/apache/sky...
中文文件:https://skyapm.github.io/docu...
前言
網上很多文件不全,踩了很多坑。
本指南為單機安裝,安裝的系統為centos7.6。
確保伺服器通外網。
安裝涉及到的版本:
儲存 :elasticsearch 7.10.2
服務端:skywalking-oap-server 8.9.0
前端介面:skywalking-ui 8.9.0
探針:skywalking-agent 8.9.0
不建議太低版本,功能不全。
1. 安裝
這裡介紹單價壓縮包安裝和單機docker安裝
1.1 單機壓縮包安裝
1.1.1 下載
地址: http://skywalking.apache.org/... 或 https://archive.apache.org/di...
1.1.2 解壓
tar -zxvf apache-skywalking-apm-8.9.0.tar.gz
1.1.3 修改配置
確保如下埠可用:
11800:和Skywalking通訊的gRPC埠;12800:和Skywalking通訊的HTTP埠;8080:UI所佔用的埠 。
如果埠被佔用,在它的config目錄下,編輯它的配置檔案 application.yml ,修改埠。
配置詳解:https://blog.csdn.net/lizz861...
1.1.4 關於儲存
建議用elasticsearch ,安裝方法請自行搜尋。
1.1.5 啟動
進入它的bin目錄下,sh startup.sh 即可。
訪問 http://ip:8080 看到頁面成功。
1.2 單機docker-compose安裝
確保系統已經安裝docker和docker-compose。
1.2.1 建立目錄
建立目錄:mkdir /home/elasticsearch/data
這個目錄是存放es資料的地方,不一定是home下,只不過我的home下儲存空間較多,建議你也放到儲存空間較大的目錄下,但是千萬記得要同步修改下面skywalking-docker-compose_3.3.yaml檔案中的路徑(下圖示紅的)。
1.2.2 配置檔案
下載地址:https://pan.baidu.com/s/1rlfk...
或者自己編寫:
mkdir /usr/local/skywalking
cd /usr/local/skywalking
vim skywalking-docker-compose_3.3.yaml
複製貼上以下內容
version: '3.3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
container_name: elasticsearch
restart: always
ports:
- 9200:9200
environment:
- "discovery.type=single-node" #單機模式啟動
- "TZ=Asia/Shanghai" # 設定時區
- "bootstrap.memory_lock=true" #鎖定實體記憶體地址,防止es記憶體被交換出去,也就是避免es使用swap交換分割槽,頻繁的交換,會導致IOPS變高
- "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" # 設定jvm記憶體大小
volumes:
- /home/elasticsearch/data:/usr/share/elasticsearch/data
ulimits:
memlock:
soft: -1
hard: -1
skywalking-oap-server:
image: apache/skywalking-oap-server:8.9.0
container_name: skywalking-oap-server
depends_on:
- elasticsearch
links:
- elasticsearch
restart: always
ports:
- 11800:11800
- 12800:12800
environment:
SW_CORE_RECORD_DATA_TTL: 7 #記錄資料的有效期,單位天
SW_CORE_METRICS_DATA_TTL: 7 #分析指標資料的有效期,單位天
SW_STORAGE: elasticsearch #指定儲存為es,此引數可以傳到skywalking中的配置
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200 #指定es服務埠
TZ: Asia/Shanghai
skywalking-ui:
image: apache/skywalking-ui:8.9.0
container_name: skywalking-ui
depends_on:
- skywalking-oap-server
links:
- skywalking-oap-server
restart: always
ports:
- 8080:8080
environment:
SW_OAP_ADDRESS: http://skywalking-oap-server:12800
TZ: Asia/Shanghai
1.2.3 啟動
在上面配置檔案同級目錄下執行命令:
docker-compose -f skywalking-docker-compose_3.3.yaml up -d
等待幾分鐘出現下面提示說明成功
*Starting elasticsearch ... done
Recreating skywalking-oap-server ... done
Recreating skywalking-ui ... done*
1.2.4 訪問
http://ip:8080
第一次啟動頁面載入較慢,等待1-3分鐘,出現如下介面,說明成功。
1.2.5 注意事項
1、skywalking-docker-compose_3.3.yaml配置檔案中的 埠都是可以修改的,如果預設埠有衝突,請修改埠,並且確認新埠可用。
2、如果http://ip:8080無法訪問,大機率是埠問題,可以先telnet一下,然後檢查自己的伺服器是否有防火牆,是否沒開放埠,或者有其他網路限制。
3、如果http://ip:8080可以訪問,但是展示不全,請等待1-3分鐘,如果還是顯示不全,可能是後端或者es不通,請檢查/home/elasticsearch/data目錄是否有足夠的許可權,確保es對此目錄有讀寫許可權,否則會出現未知異常。另外其他自己有定義或者對映的目錄也要有足夠許可權。
4、資料儲存時間
SW_CORE_RECORD_DATA_TTL: 7 #記錄資料的有效期,單位天
SW_CORE_METRICS_DATA_TTL: 7 #分析指標資料的有效期,單位天
根據自己的實際需求修改,重啟後生效。
5、命令
停止:docker-compose -f skywalking-docker-compose_3.3.yaml stop
啟動:docker-compose -f skywalking-docker-compose_3.3.yaml up -d
2. 使用
在上面服務端安裝好了以後,還需要客戶端結合探針skywalking-agent才能產生資料。
有資料效果如下圖:
先下載探針並解壓:https://archive.apache.org/di...
下載8.9.0版本跟服務端版本要保持一直。
這裡介紹關於Java探針使用三種常用方式
不管哪種方式都需要在你的啟動指令中加入以下內容:
-javaagent:你的探針絕對路徑\skywalking-agent.jar -Dskywalking.agent.service_name=你的服務名稱 -Dskywalking.collector.backend_service=ip:11800
注意:你自己的服務jar包一定要放到最後;ip埠是你的skywalking後臺上傳資料的ip埠;其中的skywalking-agent.jar路徑,服務名,ip埠都要以你的實際為準(下圖示紅的)。
2.1 方式一:IDEA使用探針
idea中配置示例:
2.2 方式二:jar包方式使用探針
用java -jar或者nohup或者用指令碼啟動,示例:
java -javaagent:/home/skywalking/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=admin -Dskywalking.collector.backend_service=192.168.99:11800 -jar admin.jar &
2.3 方式三:docker方式使用探針
修改你的Dockerfile檔案,
加入兩行:
COPY skywalking-agent /usr/local/agent
"java -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=admin -Dskywalking.collector.backend_service=172.17.0.1:11800
這裡有幾點注意:
1.docker COPY只能複製同級目錄下的檔案,所以,一定要把探針放到Dockerfile所在目錄下。
2.skywalking-agent一定是整個資料夾裡,不僅僅是skywalking-agent.jar。
3.-javaagent:後的路徑為docker容器的內部路徑。
4.-Dskywalking.collector.backend_service後的ip 有幾種情況:
容器部署的,比如docker,127.0.0.1只是容器內有效,不能代表宿主機本機,所以即使在同一臺機器也不能寫127.0.0.1,可以試試,是不通的。
172.17.0.1這個ip是docker預設虛擬網路卡的閘道器ip,透過這個ip,請求可以達到宿主機,當然寫實際的物理ip也是可以的,但是考慮到很多專案是交付性的,skywalking的地址總是不同,都要改挺麻煩的,寫172.17.0.1就通用了,前提是在同一臺機器哦。
3. 結尾
- 上面涉及到skywalking的一些配置,都是透過傳參的方式,其實在skywalking和探針資料夾下面的配置檔案都是修改的,但是比較死板,不靈活。具體操作可以自行搜尋文件,這裡不再贅述。
- skywalking收集資料是非同步的,不用擔心影響自己服務效能,skywalking佔用資源很小,單機效能很強,放心使用,如果單機不能滿足,可以考慮叢集方式,比如部署幾臺skywalking然後透過haproxy代理,配置放在nacos等,具體請自行搜尋方案。
- skywalking-agent的目錄下,optional-plugins是可選追蹤外掛,plugins是預設追蹤外掛,如果覺得預設的不夠,沒有涵蓋到自己想要追蹤的,可以複製optional-plugins裡面的增加到plugins,當然覺得有些不想看到也可以減少外掛,裡面的jar基本上都能見名知意,改變後,客戶端服務重啟生效。
同時需要做日誌追蹤請看這裡:
https://segmentfault.com/a/11...