SkyWalking 分佈式追蹤系統

隨着微服務架構的流行,一些微服務架構下的問題也會越來越突出,比如一個請求會涉及多個服務,而服務本身可能也會依賴其他服務,整個請求路徑就構成了一個網狀的調用鏈,而在整個調用鏈中一旦某個節點發生異常,整個調用鏈的穩定性就會受到影響,所以會深深的感受到 “銀彈” 這個詞是不存在的,每種架構都有其優缺點 。

service map

面對以上情況, 我們就需要一些可以幫助理解系統行爲、用於分析性能問題的工具,以便發生故障的時候,能夠快速定位和解決問題,這就是所謂的APM(應用性能管理)。

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

下面是 SkyWalking 5.x 的架構圖,6.x 會有些變化,目前還沒有 Release。

5.x architecture

說明:通過在應用程序中添加 SkyWalking Agent,就可以將接口、服務、數據庫、MQ等進行追蹤,將追蹤結果通過 HTTP 或 gRPC 發送到 SkyWalking Collecter,SkyWalking Collecter 經過分析和聚合,將結果存儲到 Elasticsearch 或 H2,SkyWalking 同時提供了一個 SkyWalking UI 的可視化界面,UI 以 GraphQL + HTTP 方式獲取存儲數據進行展示。

上面的架構圖看似模塊有點多,但在實際使用時我們並不需要關注太多的實現方式,HTTP、gRPC 、GraphQL 這些都是其內部架構使用到的技術,我們只需安裝 SkyWalking Collecter、Elasticsearch 或 H2,然後在需要追蹤的服務內配置少量的代碼(Java 項目通過修改 JVM 參數即可),最後通過 SkyWalking UI 查看結果。

下面基於 Windows 環境使用 SkyWalking-netcore 來介紹一下 SkyWalking,可以把 SkyWalking-netcore 是 SkyWalking 的 .NET Core Agent。

環境要求

  1. JDK8+
  2. Elasticsearch 5.x
  3. 8080,10800,11800,12800 端口不被佔用

Elasticsearch下載安裝 參考官方教程, 安裝完成後需要對 config/elasticsearch.yml 做如下修改:

# 修改
# 如果 cluster.name 不設置爲 CollectorDBCluster ,則需要修改 SkyWalking 的配置文件
cluster.name: CollectorDBCluster   
network.host: 0.0.0.0
# 增加
thread_pool.bulk.queue_size: 1000

如果是 linux 環境,Elasticsearch 安裝可能沒有那麼順利,請參考 Linux 環境下安裝 Elasticsearch 5.x、6.x 問題彙總

下載 SkyWalking

SkyWalking 個人建議直接下載官方編譯好的,下載地址

啓動 SkyWalking

skywalking config

config/application.yml 內有所有的默認配置,可以發現默認是使用 Elasticsearch 進行數據存儲的,所以在啓動 SkyWalking 之前,確保 Elasticsearch 已啓動。

SkyWalking 的啓動包括兩部分,一個是 SkyWalking Collector ,一個是 SkyWalking UI,SkyWalking 解壓後的 bin 目錄:

skywalking bin

bat 爲 windows 環境使用,sh 爲 linux 環境使用,我們可以分別其他 collectorService 和 webappService,也可以通過 startup 一次性全部啓動,從 startup 中的命令可以知道其實就是分別啓動 collectorService 和 webappService。

如果一切順利(不順利請多看幾遍 快速入門),這時候就可以通過 http://localhost:8080 來查看 SkyWalking UI 了(默認全是0,截圖是測試效果),默認賬號/密碼:admin/admin。

skywalking ui

Java 項目接入

參考 部署 skywalking javaagent,skywalking-agent.jar 位於下載包的 agent 目錄下,具體效果這裏就不測試了

skywalking java agent

.NET Core 項目接入

參考 skywalking-netcore

新建一個.NET Core API 項目,安裝 Nuget 包:

Install-Package SkyWalking.AspNetCore

修改 Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    //......
    services.AddSkyWalking(option =>
    {
        option.ApplicationCode = "WebAPIService1";
        option.DirectServers = "localhost:11800";
    });
}

這時候啓動程序,請求的追蹤結果就會被記錄下來,通過 SkyWalking UI 查看

skywalking ui request log

單個服務的效果並不明顯,看不出請求跨度、鏈路關係,下面是一個多服務的例子(下載源碼),依賴關係圖如下:

service request map

目前 SkyWalking 的 .NET Core Agent 支持通過 HttpClient 發送的請求和 通過 EntityFramework 進行數據庫操作的跟蹤,其他的作者在支持的路上。根據以上的關係圖搭建好項目後,訪問接口後結果如下:

skywalking ui spans

一共有4各跨度,先訪問 WenAPIService1,然後發送 HttpClient 請求,轉到 WenAPIService2,WenAPIService2 執行操作 DB 的命令,每個跨度的耗時一目瞭然。

skywalking ui topology map

服務關係的拓撲圖,調用鏈路徑也非常清晰。

SkyWalking UI 使用上並不複雜,搭建好之後每個操作使用一下就瞭解了。

參考鏈接

Apache SkyWalking
SkyWalking-github
SkyWalking-netcore
SkyWalking-sample

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章