分佈式追蹤與監控:Skywalking 介紹

一、APM 介紹

APM(Application Performance Management)應用性能管理,通過各種探針採集並上報數據,收集關鍵指標,同時搭配數據展示以實現對應用程序性能管理和故障管理的系統化解決方案。

目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking,這裏主要介紹 SkyWalking ,它是一款優秀的國產 APM 工具,包括了分佈式追蹤、性能指標分析、應用和服務依賴分析等。

Zabbix、Premetheus、open-falcon 等監控系統主要關注服務器硬件指標與系統服務運行狀態等,而 APM 系統則更重視程序內部執行過程指標和服務之間鏈路調用情況的監控,APM 更有利於深入代碼找到請求響應 “慢” 的根本問題,與 Zabbix 之類的監控是互補關係。

二、分佈式鏈路追蹤

下圖是常見的微服務的框架,4 個實例,2 個 MySQL、1 個 Redis。實際上它有兩次完全不同的請求進來:有一次的一個請求會訪問 Redis,再去訪問 MySQL;另外一個可能走到另外的服務上,然後直接去 MySQL。整個分佈式追蹤的目的是什麼?是爲了讓我們最終在頁面上、UI 上、和數據上能夠復現這個過程。我們要拿到整個完整的鏈路,包括精確的響應時間,訪問的方法、訪問的 circle,訪問的 Redis 的 key 等,這些是我們在做分佈式追蹤的時候需要展現的一個完整的信息。

三、Apache Skywalking(Incubator) 簡介

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

Apache Skywalking(Incubator) 專門爲微服務架構和雲原生架構系統而設計並且支持分佈式鏈路追蹤的 APM 系統。Apache Skywalking(Incubator) 通過加載 探針 - 非侵入式 的方式收集應用調用鏈路信息,並對採集的調用鏈路信息進行分析,生成應用間關係和服務間關係以及服務指標。Apache Skywalking (Incubating) 目前支持多種語言,其中包括 Java,.Net Core,Node.js 和 Go 語言。另外社區還發展出了一個叫 OpenTracing 的組織,旨在推進調用鏈監控的一些規範和標準工作。

Skywalking 支持從 6 個可視化維度剖析分佈式系統的運行情況。

四、SkyWalking 原理架構圖

五、SkyWalking 核心模塊

SkyWalking 採用組件式開發,易於擴展,主要組件作用如下:

 1. Skywalking Agent:鏈路數據採集 tracing(調用鏈數據)和 metric(指標)信息並上報,上報通過 HTTP 或者 gRPC 方式發送數據到 Skywalking Collector。

 2. Skywalking Collector :鏈路數據收集器,對 agent 傳過來的 tracing 和 metric 數據進行整合分析通過 Analysis Core 模塊處理並落入相關的數據存儲中,同時會通過 Query Core 模塊進行二次統計和監控告警。

 3. Storage:Skywalking 的存儲,支持以 ElasticSearch、Mysql、TiDB、H2 等主流存儲作爲存儲介質進行數據存儲, H2 僅作爲臨時演示單機用。

 4. SkyWalking UI:Web 可視化平臺,用來展示落地的數據,目前官方採納了 RocketBot 作爲 SkyWalking 的主 UI。

本文通過 Docker 容器安裝 Skywalking,並示例整合 apisix 網關、Spring Boot 微服務項目進行 APM(Application Performance Management) 應用性能管理,檢測從接口網關到微服務實例、再到數據庫、緩存等存儲層之間的鏈路追蹤。

六、SkyWalking 服務端安裝

安裝環境:

操作系統:CentOS7,配置爲 4 核 8G

Docker 版本:Docker version 19.03.12, build 48a66213fe

安裝工具:docker-compose,版本:docker-compose version 1.26.2, build eefe0d31

skywalking 版本:8.1.0

elasticsearch 版本:7.5.0

1、創建目錄

mkdir -p /data/ent/skywalking
cd /data/ent/skywalking

2、編寫 docker-compose.yml

vim docker-compose.yml
#添加以下內容
version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
    healthcheck:
      test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
  skywalking-oap:
    image: apache/skywalking-oap-server:8.1.0-es7
    container_name: skywalking-oap
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    healthcheck:
      test: ["CMD-SHELL", "/skywalking/bin/swctl"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    environment:
      TZ: Asia/Shanghai
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
  skywalking-ui:
    image: apache/skywalking-ui:8.1.0
    container_name: skywalking-ui
    depends_on:
      - skywalking-oap
    links:
      - skywalking-oap
    restart: always
    ports:
      - 28080:8080
    environment:
      TZ: Asia/Shanghai
      SW_OAP_ADDRESS: skywalking-oap:12800

3、啓動服務

#啓動(docker和docker-compose的安裝不再詳介紹)
docker-compose up -d

4、開放端口

firewall-cmd --zone=public --add-port=11800/tcp --permanent
firewall-cmd --zone=public --add-port=12800/tcp --permanent
firewall-cmd --zone=public --add-port=28080/tcp --permanent
firewall-cmd --reload

5、訪問 skywalking ui 後臺,訪問地址爲:http:// 服務器 ip:28080

七、Skywalking Agent 安裝

以 java agent 爲例,下載 skywalking 項目,地址:https://www.apache.org/dyn/closer.cgi/skywalking/8.1.0/apache-skywalking-apm-es7-8.1.0.tar.gz

解壓下載後的文件,將 agent 文件夾複製至 java 項目下,執行 java 項目時,使用 javaagent 開啓 skywalking agent

java -javaagent:agent/skywalking-agent.jar=agent.service_name=sab-service,collector.backend_service=192.168.35.226:11800 -jar sab-manager.war  --spring.profiles.active=local_dev

其中,agent.service_name爲要註冊到skywalking的服務名稱,collector.backend_service爲skywalking grpc註冊地址。

啓動無報錯,在 skywalking ui 後臺可查看服務是否已註冊成功到 skywalking。

八、Skywalking UI 管理後臺介紹

1、首頁

2、儀表盤

查看全局服務基本性能指標

2.1、參數說明

2.1.1 Global 全局維度

2.1.2 Service 實例維度

2.1.3 Instance 實例維度

2.1.4 Endpoint 端點維度

3、拓撲圖

SkyWalking 能夠根據獲取的數據自動繪製服務之間的調用關係圖,並能識別常見的服務顯示在圖標上。每條連線的顏色反應了服務之間的調用延遲情況,可以非常直觀的看到服務與服務之間的調用狀態,連線中間的點能點擊,可顯示兩個服務之間鏈路的平均響應時間、吞吐率以及 SLA 等信息。

4、追蹤

顯示請求的響應內部執行情況,一個完整的請求都經過了哪些服務、執行了哪些代碼方法、每個方法的執行時間、執行狀態等詳細信息,快速定位代碼問題。

可通過選擇服務、實例、狀態和端點名稱來搜索調用鏈路,

可以點擊標記紅色的端點,查看異常信息

5、性能剖析

新建需要分析的端點,在左側列表顯示任務及對應的採樣請求,右側顯示端點鏈路及每個端點的堆棧信息。

6、告警

不同維度告警列表,可分爲服務、端點和實例。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/mNfZ2LrfUBySHrr8vvOOfA