Springboot: 2.1.7.RELEASESpringCloud: Greenwich.SR2java
[TOC]node
Skywalking與2016年11月2日由國人吳晟在Github上傳v1.0版本,用於提供分佈式鏈路追蹤功能,從5.x開始,成爲一個功能較爲完善的APM(Application Performance Management)系統,2019年4月17日從Apache孵化器畢業,正式成爲Apache頂級項目。提供分佈式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案。官方對本身介紹是專爲微服務,雲原生和基於容器(Docker,Kubernetes,Mesos)架構而設計。git
先看一下官方提供的架構圖,如圖:github
Skywalking整體由四個部分agent
、collector
、webapp-ui
、storage
組成。圖10-11從上到下是應用層接入,可使用無入侵性的agent
探針接入,經過HTTP或者gRPC講數據發送至Skywalking分析平臺collector
,collector
對接受到的數據進行聚合分析,最後存儲至storage
中,這裏支持多種存儲方式,比較經常使用的有H2和ElasticSearch,最後能夠由webapp-ui
對全部的數據進行展現。web
在介紹實戰以前,咱們先簡單介紹一下Skywalking部署構建方案。spring
這裏存儲方式筆者選擇使用ElasticSearch,具體版本是6.5.0,ElasticSearch的構建方式選擇使用Docker,直接使用Linux搭建有點複雜,不適合初學者,使用Docker構建簡單方便。docker
筆者構建的一些前置條件:數據庫
java:1.8
CentOS:7.6apache
若是當前CentOS上沒有Docker環境,可使用下面的語句快速構建:json
yum install docker
當構建成功後,可使用下面的語句查看當前Docker的版本:
docker -v
筆者這裏的輸出是:
Docker version 1.13.1, build 7f2769b/1.13.1
安裝好Docker之後,最好配置一下國內的鏡像站,不然在網絡很差的狀況下可能出現Docker下載失敗等狀況,可使用下面的語句來修改鏡像地址:
vi /etc/docker/daemon.json
筆者這裏使用的是阿里雲的鏡像加速,以下:
{ "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"] }
各位讀者能夠本身去阿里雲上開通本身的鏡像加速,具體很少作介紹。
使用Docker構建ElasticSearch6.5.0,首先,須要下載ElasticSearch6.5.0的鏡像,輸入如下命令:
docker pull elasticsearch:6.5.0
等待程序下載完成,完成後就能夠啓動鏡像了,命令以下:
docker run -d --restart=always --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.5.0
ElasticSearch的默認啓動內存是1g,若是當前服務器的內存不足1g,可使用參數-e ES_JAVA_OPTS="-Xms256m -Xmx256m"
限制ElasticSearch的啓動內存大小,完整的語句以下:
docker run -d --restart=always -e ES_JAVA_OPTS="-Xms256m -Xmx256m" --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.5.0
啓動成功之後可使用以下語句看一下是否啓動成功:
docker ps
結果如圖:
ElasticSearch6.5.0單節點版已經構建完成,爲了方便後續操做,須要修改一個ElasticSearch的命名,輸入命令docker exec -it es /bin/bash
進入容器文件目錄,輸入vi config/elasticsearch.yml
進入ElasticSearch配置文件,修改cluster.name
的值,筆者這裏修改成CollectorDBCluster
,修改完成後,保存當前修改,輸入exit
退出容器文件目錄,輸入docker restart es
重啓當前容器,在瀏覽器輸入http://192.168.44.128:9200/,看到以下信息能夠證實ElasticSearch6.5.0單節點版已經在正常的運行了。
{ "name" : "V-N2_ZQ", "cluster_name" : "CollectorDBCluster", "cluster_uuid" : "r9bFZ90WRyqSpMz80u61Yg", "version" : { "number" : "6.5.0", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "816e6f6", "build_date" : "2018-11-09T18:58:36.352602Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Skywalking構建,進入Skywalking官網,進入下載頁面(http://skywalking.apache.org/... ),如圖:
由於咱們是要在CentOS上運行,因此這裏選擇Linux二進制版,就是已經編譯好的版本,無需咱們本身編譯,下載至咱們的CentOS後,解壓能夠看到目錄結構,如圖:
startup.sh
。
修改storage.elasticsearch.nameSpace
爲咱們前面構建ElasticSearch設置的cluster.name
,筆者這裏的值爲CollectorDBCluster
,同時修改storage.elasticsearch.clusterNodes
爲咱們當前構建的ElasticSearch的地址。
Skywalking中默認使用的端口有8080、11800、12800,請保證這些端口未被佔用,如需修改,能夠修改config
目錄中的application.yml
和webapp
目錄中的webapp.yml
。
接下來啓動collector和webapp-ui,進入bin目錄中,執行命令./startup.sh
,如:
打開瀏覽器訪問http://192.168.44.128:8080/,能夠看到webapp-ui的儀表盤,如圖:
Skywalking部署到這裏就結束了,下面咱們開始介紹Spring Cloud如何與Skywalking整合使用。
先簡單介紹一下案例內容,咱們將建立4個工程,分別爲Zuul-Service、Eureka-Service、Consumer-Service和Provider-Service,請求經過Zuul-Service訪問至Consumer-Service再訪問至Provider-Service完成一次鏈路調用。
總體架構圖如圖:
具體實現代碼列出,各位讀者能夠參考GitHub倉庫(https://github.com/meteor1993...),下面咱們介紹Spring Cloud是如何與Skywalking整合的。
這裏咱們須要使用到Skywalking的探針agent,咱們在工程chapter15的跟目錄中新建一個文件夾,命名爲skywalking
,講剛纔解壓的Skywalking中的agent整個文件夾copy到skywalking
,這裏咱們啓動時只須要配置javaagen命令加載agent探針便可,在idea中使用須要修改啓動配置,點擊右上角的Edit Configurations...
,在打開的窗口中選擇Environment->VM Options
,配置以下腳本:
-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=zuul-service -Dskywalking.collector.backend_service=192.168.44.128:11800
如圖:
還可使用java -jar的方式來加載agent探針,咱們將整個maven項目打包,運行mvn install的命令,使用java -jar的方式來啓動,啓動命令中增長啓動參數,以下:
-javaagent:D:\Development\SpringCloudLearning\chapter15\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=consumer-service -Dskywalking.collector.backend_service=192.168.44.128:11800 -jar zuul-0.0.1-SNAPSHOT.jar
順次啓動四個工程後,使用瀏覽器訪問:http://localhost:8080/client/hello?name=spring,多刷新幾回後,咱們再使用瀏覽器訪問http://192.168.44.128:8080/,如:
點擊上邊欄的拓撲圖,能夠看到當前咱們工程的一個依賴拓撲關係,如:
點擊上邊欄的追蹤,能夠看到左邊是當前全部的訪問請求,隨便點擊一個,能夠在右邊看到一個詳細的鏈路追蹤過程,如:
點擊鏈路,能夠看到一些標記信息,包含端點、跨度類型、成功仍是失敗,以及一些Exception信息,如圖:
點擊儀表盤頁面的Service,能夠看到一些服務相關的信息,如平均響應時間、平均吞吐量、平均時延統計,如圖:
點擊儀表盤頁面的Endpoint,能夠看到一些端點相關的信息,如圖:
點擊儀表盤頁面的Instance,能夠看到一些JVM相關的信息,如圖:
至此,Spring Cloud與Skywalking的介紹就結束了,感興趣的朋友能夠前往Github的官方網站進行查詢。
這裏總結一下整個案例的啓動順序:
以上啓動順序供各位讀者參考,請各位讀者最好按照以上順序啓動,由於不一樣的組件以前實際上是有相互依賴關係的,若是隨意更改啓動順序可能會形成某些未知問題。