日誌收集和鏈路追蹤:skywalking

烏雲發表於2022-11-24

如果能跟蹤每個請求,中間請求經過哪些微服務,請求耗時,網路延遲,業務邏輯耗時等。我們就能更好地分析系統瓶頸、解決系統問題,因此鏈路跟蹤很重要。

想在無程式碼入侵前提下實現:
檢視服務之間鏈路呼叫關係;
把各個微服務分散的日誌收集起來;
監控分析系統情況;
用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檔案中的路徑(下圖示紅的)。
11.jpg

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分鐘,出現如下介面,說明成功。
12.jpg

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才能產生資料。
有資料效果如下圖:
18.jpg

先下載探針並解壓:https://archive.apache.org/di...
下載8.9.0版本跟服務端版本要保持一直。
13.jpg

這裡介紹關於Java探針使用三種常用方式
不管哪種方式都需要在你的啟動指令中加入以下內容:

-javaagent:你的探針絕對路徑\skywalking-agent.jar -Dskywalking.agent.service_name=你的服務名稱 -Dskywalking.collector.backend_service=ip:11800

注意:你自己的服務jar包一定要放到最後;ip埠是你的skywalking後臺上傳資料的ip埠;其中的skywalking-agent.jar路徑,服務名,ip埠都要以你的實際為準(下圖示紅的)。
16.jpg

2.1 方式一:IDEA使用探針

idea中配置示例:
15.jpg

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 有幾種情況:
17.jpg
容器部署的,比如docker,127.0.0.1只是容器內有效,不能代表宿主機本機,所以即使在同一臺機器也不能寫127.0.0.1,可以試試,是不通的。
172.17.0.1這個ip是docker預設虛擬網路卡的閘道器ip,透過這個ip,請求可以達到宿主機,當然寫實際的物理ip也是可以的,但是考慮到很多專案是交付性的,skywalking的地址總是不同,都要改挺麻煩的,寫172.17.0.1就通用了,前提是在同一臺機器哦。

3. 結尾

  1. 上面涉及到skywalking的一些配置,都是透過傳參的方式,其實在skywalking和探針資料夾下面的配置檔案都是修改的,但是比較死板,不靈活。具體操作可以自行搜尋文件,這裡不再贅述。
  2. skywalking收集資料是非同步的,不用擔心影響自己服務效能,skywalking佔用資源很小,單機效能很強,放心使用,如果單機不能滿足,可以考慮叢集方式,比如部署幾臺skywalking然後透過haproxy代理,配置放在nacos等,具體請自行搜尋方案。
  3. skywalking-agent的目錄下,optional-plugins是可選追蹤外掛,plugins是預設追蹤外掛,如果覺得預設的不夠,沒有涵蓋到自己想要追蹤的,可以複製optional-plugins裡面的增加到plugins,當然覺得有些不想看到也可以減少外掛,裡面的jar基本上都能見名知意,改變後,客戶端服務重啟生效。
    19.jpg

同時需要做日誌追蹤請看這裡:
https://segmentfault.com/a/11...

相關文章