Skywalking入門介紹,skywalking6.5.0 +mysql (windows) 搭建

一. 介紹

1. 基本信息

SkyWalking 建立於2015年,提供分佈式追蹤功能。從5.x開始,項目進化爲一個完成功能的Application Performance Monitoring系統。
他被用於追蹤、監控和診斷分佈式系統,特別是使用微服務架構,雲原生或容積技術。提供如下主要功能:html

  • 分佈式追蹤和上下文傳輸
  • 應用、實例、服務性能指標分析
  • 根源分析
  • 應用拓撲分析
  • 應用和服務依賴分析
  • 慢服務檢測
  • 性能優化

特色

  • 性能好:針對單實例5000tps的應用,在全量採集的狀況下,只增長 10% 的CPU開銷
  • 支持多語言探針
  • 支持自動及手動探針:其中手動探針經過OpenTrackingApi、@Trace註解、trackId集成到日誌中。

2. SkyWalking的主要部分及其功能

SkyWalking主要由三大部分組成:Agent,Collector,Web;前端

  • Agent:做用是使用JavaAgent字節碼加強技術將Agent的代碼織入程序中,完成Agent無代碼侵入地獲取程序內方法的上下文並進行加強和收集信息併發送給Collector;與Collector進行心跳,代表Agent客戶端的存活。
  • Collector:做用是維護存活的Agent實例,並收集從Agent發送至Collector的數據,進行處理及持久化;

Web:做用是將Collector收集的參數進行不一樣維度的展現java

鏈路追蹤的主要流程.png
 

下面是 SkyWalking 6.x 的架構圖:

說明: SkyWalking 的核心是數據分析和度量結果的存儲平臺,經過 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量數據,SkyWalking Collecter 對數據進行分析和聚合,存儲到 Elasticsearch、H二、MySQL、TiDB 等其一便可,最後咱們能夠經過 SkyWalking UI 的可視化界面對最終的結果進行查看。Skywalking 支持從多個來源和多種格式收集數據:多種語言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘測、Envoy 度量等數據格式。mysql

總體架構看似模塊有點多,但在實際上仍是比較清晰的,主要就是經過收集各類格式的數據進行存儲,而後展現。因此搭建 Skywalking 服務咱們須要關注的是 SkyWalking Collecter、SkyWalking UI 和 存儲設備,SkyWalking Collecter、SkyWalking UI 官方下載安裝包內已包含,最終咱們只需考慮存儲設備便可。git

SW整體能夠分爲四部分:
1.Skywalking Agent:使用Javaagent作字節碼植入,無侵入式的收集,並經過HTTP或者gRPC方式發送數據到Skywalking Collector。
2. Skywalking Collector :鏈路數據收集器,對agent傳過來的數據進行整合分析處理並落入相關的數據存儲中。
3. Storage:Skywalking的存儲,時間更迭,sw已經開發迭代到了6.x版本,在6.x版本中支持以ElasticSearch、Mysql、TiDB、H二、做爲存儲介質進行數據存儲。
4. UI :Web可視化平臺,用來展現落地的數據。github

Skywalking Agent配置

經過了解配置,能夠對一個組件功能有一個大體的瞭解。讓咱們一塊兒看一下skywalking的相關配置。
解壓開skywalking的壓縮包,在agent/config文件夾中能夠看到agent的配置文件。
從skywalking支持環境變量配置加載,在啓動的時候優先讀取環境變量中的相關配置。web

skywalking agent使用javaagent無侵入式的配合collector實現對分佈式系統的追蹤和相關數據的上下文傳遞。

Skywalking Collector關鍵配置
Collector支持集羣部署,zookeeper、kubernetes(若是你的應用是部署在容器中的)、consul(GO語言開發的服務發現工具)是sw可選的集羣管理工具,結合你們具體的部署方式進行選擇。詳細配置你們能夠去Skywalking官網下載介質包進行了解。

Collector端口設置sql

 

 downsampling: 採樣彙總統計維度,會分別按照分鐘、【小時、天、月】(可選)來統計各項指標數據。
經過設置TTL相關配置項能夠對數據進行自動清理。
Skywalking 在6.X中簡化了配置。collector提供了gRPC和HTTP兩種通訊方式。
UI使用rest http通訊,agent在大多數場景下使用grpc方式通訊,在語言不支持的狀況下會使用http通訊。
關於綁定IP和端口須要注意的一點是,經過綁定IP,agent和collector必須配置對應ip才能夠正常通訊。數據庫

Collector存儲配置
在application.yml中配置的storage模塊配置中選擇要使用的數據庫類型,並填寫相關的配置信息。apache

Collector Receiver
Receiver是Skywalking在6.x提出的新的概念,負責從被監控的系統中接受指標數據。用戶徹底能夠參照OpenTracing規範來上傳自定義的監控數據。Skywalking官方提供了service-mesh、istio、zipkin的相關能力。

 

 如今Skywalking支持服務端採樣,配置項爲sampleRate,比例採樣,若是配置爲5000則採樣率就是50%。

關於採樣設置的一點注意事項

關於服務採樣配置的一點建議,若是Collector以集羣方式部署,好比:Acollector和Bcollector,建議Acollector.sampleRate = Bcollector.sampleRate。若是採樣率設置不相同可能會出現數據丟失問題。

 

 假設Agent端將全部數據發送到後端Collector處,A採樣率設置爲30%,B採樣率爲50%。

假設有30%的數據,發送到A上,這些數據被所有正確接受並存儲,極端狀況(與指望的採樣數據量相同)下,若是剩下20%待採樣的數據發送到了B,這個時候一切都是正常的,若是這20%中有一部分數據被送到了A那麼,這些數據將是被忽略的,由此就會形成數據丟失。

2、業務調用鏈路監控

Service Topology監控

調用鏈路監控能夠從兩個角度去看待。咱們先從總體上來認識一下咱們所監控的系統。
經過給服務添加探針併產生實際的調用以後,咱們能夠經過Skywalking的前端UI查看服務之間的調用關係。
咱們簡單模擬一次服務之間的調用。新建兩個服務,service-provider以及service-consumer,服務之間簡單的經過Feign Client 來模擬遠程調用。

 

從圖中能夠看到:

有兩個服務節點:provider & consumer
有一個數據庫節點:localhost【mysql】
一個註冊中心節點

consumer消費了provider提供出來的接口。

一個系統的拓撲圖讓咱們清晰的認識到系統之間的應用的依賴關係以及當前狀態下的業務流轉流程。細心的可能發現圖示節點consumer上有一部分是紅色的,紅色是什麼意思呢?
紅色表明當前流經consumer節點的請求有一斷時間內是響應異常的。當節點所有變紅的時候證實服務現階段內就完全不可用了。運維人員能夠經過Topology迅速發現某一個服務潛在的問題,並進行下一步的排查並作到預防。

Skywalking Trace監控

Skywalking經過業務調用監控進行依賴分析,提供給咱們了服務之間的服務調用拓撲關係、以及針對每一個endpoint的trace記錄。

咱們在以前看到consumer節點服務中發生了錯誤,讓咱們一塊兒來定位下錯誤是發生在了什麼地方又是什麼緣由呢?

 

在每一條trace的信息中均可以看到當前請求的時間、GloableId、以及請求被調用的時間。咱們分別看一看正確的調用和異常的調用。

Trace調用鏈路監控

圖示展現的是一次正常的響應,這條響應總耗時19ms,它有4個span:

span1 /getStore = 19ms  響應的總流轉時間
span2 /demo2/stores = 14ms  feign client 開始調用遠程服務後的響應的總時間
span3 /stores = 14ms 接口服務響應總時間
span4 Mysql = 1ms  服務提供端查詢數據庫的時間

這裏span2和span3的時間表現相同,實際上是不一樣的,由於這裏時間取了整。

在每一個Span中能夠查看當前Span的相關屬性。

 組件類型: SpringMVC、Feign                  
 Span狀態: false
 HttpMethod: GET
 Url: http://192.168.16.125:10002/demo2/stores

這是一次正常的請求調用Trace日誌,可能咱們並不關心正常的時候,畢竟一切正常不就是咱們期待的麼!

咱們再來看下,異常狀態下咱們的Trace以及Span又是什麼樣的呢。

發生錯誤的調用鏈中Span中的is error標識變爲true,而且在名爲Logs的TAB中能夠看到錯誤發生的具體緣由。根據異常狀況咱們就能夠輕鬆定位到影響業務的具體緣由,從而快速定位問題,解決問題。

經過Log咱們看到鏈接被拒,那麼多是咱們的網絡出現了問題(可能性小,由於實際狀況若是網絡出現問題咱們連這個trace都看不到了),也有多是服務端配置問題沒法正確創建鏈接。經過異常日誌,咱們迅速就找到了問題的關鍵。

實際狀況是,我把服務方停掉了,作了一次簡單的模擬。可見,經過拓撲圖示咱們能夠清晰的看到衆多服務中哪一個服務是出現了問題的,經過trace日誌咱們能夠很快就定位到問題所在,在最短的時間內解決問題。

3、服務性能指標監控 

Skywalking還能夠查看具體Service的性能指標,根據相關的性能指標能夠分析系統的瓶頸所在並提出優化方案。

Skywalking 性能監控

在服務調用拓撲圖上點擊相應的節點咱們能夠看到該服務的

SLA: 服務可用性(主要是經過請求成功與失敗次數來計算)
CPM: 每分鐘調用次數
Avg Response Time: 平均響應時間

從應用總體外部來看咱們能夠監測到應用在必定時間段內的

服務可用性指標SLA
每分鐘平均響應數
平均響應時間
服務進程PID
服務所在物理機的IP、HostName、Operation System

Service JVM信息監控

還能夠監控到Service運行時的CPU、堆內存、非堆內存使用率、以及GC狀況。這些信息來源於JVM。注意這裏的數據可不是機器自己的數據。

4、服務告警

前文咱們提到了經過查看拓撲圖以及調用鏈路能夠定位問題,但是運維人員又不可能一直盯着這些數據,那麼咱們就須要告警能力,在異常達到必定閾值的時候主動的提示咱們去查看系統狀態。

在Sywalking 6.x版本中新增了對服務狀態的告警能力。它經過webhook的方式讓咱們能夠自定義咱們告警信息的通知方式。諸如:郵件通知、微信通知、短信通知等。

Skywalking 服務告警

先來看一下告警的規則配置。在alarm-settings.xml中能夠配置告警規則,告警規則支持自定義。

 

一份告警配置由如下幾部分組成:

service_resp_time_rule:告警規則名稱 ***_rule (規則名稱能夠自定義可是必須以’_rule’結尾
indicator-name:指標數據名稱: 定義參見http://t.cn/EGhfbmd
op: 操做符: > , < , = 【固然你能夠本身擴展開發其餘的操做符】
threshold:目標值:指標數據的目標數據 如sample中的1000就是服務響應時間,配合上操做符就是大於1000ms的服務響應
period: 告警檢查週期:多久檢查一次當前的指標數據是否符合告警規則
counts: 達到告警閾值的次數
silence-period:忽略相同告警信息的週期
message:告警信息
webhooks:服務告警通知服務地址

Skywalking經過HttpClient的方式遠程調用在配置項webhooks中定義的告警通知服務地址。

 

瞭解了SW所傳送的數據格式咱們就能夠對告警信息進行接收處理,實現咱們須要的告警通知服務啦!

咱們將一個服務停掉,並將另一個服務的某個對外暴露的接口讓他休眠必定的時間。而後調用必定的次數觀察服務的狀態信息以及告警狀況。

總結:

本文簡單的經過skwaylking的配置來對skywlaking的功能進行一次初步的瞭解,對skwaylking新提出的概念以及新功能進行簡單的詮釋,方便你們瞭解和使用。經過使用APM工具,可讓咱們方便的查看微服務架構中系統瓶頸以及性能問題等。

 

 

2、如何安裝SkyWalking(Java)(本機)

一、在安裝SkyWalking以前,須要選擇數據的存在方式並進行搭建環境,SkyWalking支持兩種存儲方式:H二、mysql和ES

二、獲取Apache的最新發布的穩定版本或者下載github上面的源碼在穩定版本的tag上進行編譯完成以後會獲取到以下圖所示的文件結構

 

下載skywalking6.0.0
http://skywalking.apache.org/downloads/

http://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/6.5.0/apache-skywalking-apm-6.5.0.zip,解壓便可。

下載jdk8
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
經測試高於jdk8不支持。

三、安裝collector模塊

修改collector的配置:找到config目錄下的application.yml文件,找到如下的配置,

MySQL配置方法:

找個mysql-connector-java-5.1.47.jar
放入apache-skywalking-apm-incubating\oap-libs
經測試mysql/j版本是6.x.x和8.x.x會有問題

mysql配置
打開apache-skywalking-apm-incubating\config\application.yml
註釋掉storage:h2 解鎖mysql
打開apache-skywalking-apm-incubating\config\datasource-settings.properties
修改mysql的配置

加入dataSource.useSSL=false (可選)

 mysql: properties: jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://10.200.110.4:3306/duan"} dataSource.user: ${SW_DATA_SOURCE_USER:duan} dataSource.password: ${SW_DATA_SOURCE_PASSWORD:123456} dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true} dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250} dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048} dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true} dataSource.useSSL: false metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000} 

ES配置方法:

storage: elasticsearch: clusterName: CollectorDBCluster //修改集羣名稱爲你的ES的集羣名稱
    clusterNodes: localhost:9300  //修改集羣節點爲你的ES的集羣節點地址

而後啓動bin目錄下的startup.sh就能夠將collector和Web模塊啓動起來了。訪問本地的8080端口便可登陸頁面,帳號密碼都爲admin。

 

覈對webapp
apache-skywalking-apm-incubating\webapp\webapp.yml
server:
port爲網站端口,默認的8080容易與其餘軟件衝突,建議改一下好比18080
server:
ip設置爲0.0.0.0 (可選)
collector:ribbon:listOfServers設置爲127.0.0.1:12800(多個以逗號隔開)

保證18080,10800,11800,12800端口不被佔用

啓動前先初始化 執行oapServiceInit.bat

而後執行:startup.bat,啓動skywalking

 

web模塊若是啓動正常,能夠經過訪問:http://10.200.110.100:18080/,看到以下頁面:

 

 

 collector模塊若是啓動正常,會在MySQL中建立不少表及數據:

 

 

 

 

 

 

建立windows服務
複製oapService.bat爲oapService1.bat
註釋::start "%OAP_PROCESS_TITLE%" 注意,後面%_EXECJAVA%開始的部分不要註釋掉
複製webappService.bat爲webappService1.bat
註釋::start "%WEBAPP_PROCESS_TITLE%" 注意,後面%_EXECJAVA%開始的部分不要註釋掉
而後用nssm將其發佈成windows服務
nssm install SkywalkingOap
nssm install SkywalkingWebapp

 

 

四、agent

4.一、agent配置

使用javaagent無侵入式的配合collector實現對分佈式系統的追蹤和相關數據的上下文傳遞。

配置文件位置
apache-skywalking-apm-incubating\agent\config\agent.config

配置說明

  • agent.namespace: 跨進程鏈路中的header,不一樣的namespace會致使跨進程的鏈路中斷
  • agent.service_name:一個服務(項目)的惟一標識,這個字段決定了在sw的UI上的關於service的展現名稱--是應用程序名(//改成你的項目名字)
  • agent.sample_n_per_3_secs: 客戶端採樣率,默認是-1表明全採樣
  • agent.authentication: 與collector進行通訊的安全認證,須要同collector中配置相同
  • agent.ignore_suffix: 忽略特定請求後綴的trace
  • collecttor.backend_service: agent須要同collector進行數據傳輸的IP和端口--是agent的地址
  • logging.level: agent記錄日誌級別

這個配置可在.net core程序中重寫

3.二、agent啓動

D:\gitspace\appsflyer-reflux\build\libs>java -javaagent:D:\soft\skywalking\apache-skywalking-apm-bin\agent\skywalking-agent.jar -jar appsflyer-reflux-201905241004.jar
相關文章
相關標籤/搜索