溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Skywalking微服務(wù)監(jiān)控分析

發(fā)布時(shí)間:2020-08-11 09:01:19 來(lái)源:ITPUB博客 閱讀:209 作者:EAWorld 欄目:軟件技術(shù)

Skywalking微服務(wù)監(jiān)控分析

轉(zhuǎn)載本文需注明出處:微信公眾號(hào)EAWorld,違者必究。

引言:

微服務(wù)框架落地后,分布式部署架構(gòu)帶來(lái)的問(wèn)題就會(huì)迅速凸顯出來(lái)。服務(wù)之間的相互調(diào)用過(guò)程中,如果業(yè)務(wù)出現(xiàn)錯(cuò)誤或者異常,如何快速定位問(wèn)題?如何跟蹤業(yè)務(wù)調(diào)用鏈路?如何分析解決業(yè)務(wù)瓶頸?...本文我們來(lái)看看如何解決以上問(wèn)題。

目錄:

一、SkyWalking初探

二、業(yè)務(wù)調(diào)用鏈路監(jiān)控

三、服務(wù)性能指標(biāo)監(jiān)控

四、服務(wù)告警

一、SkyWalking初探

Skywalking 簡(jiǎn)介

Skywalking是一款國(guó)內(nèi)開(kāi)源的應(yīng)用性能監(jiān)控工具,支持對(duì)分布式系統(tǒng)的監(jiān)控、跟蹤和診斷。

它提供了如下的主要功能特性:

Skywalking微服務(wù)監(jiān)控分析

Skywalking 技術(shù)架構(gòu)

Skywalking微服務(wù)監(jiān)控分析


SW總體可以分為四部分:

1.Skywalking Agent:使用Javaagent做字節(jié)碼植入,無(wú)侵入式的收集,并通過(guò)HTTP或者gRPC方式發(fā)送數(shù)據(jù)到Skywalking Collector。

2. Skywalking Collector :鏈路數(shù)據(jù)收集器,對(duì)agent傳過(guò)來(lái)的數(shù)據(jù)進(jìn)行整合分析處理并落入相關(guān)的數(shù)據(jù)存儲(chǔ)中。

3. Storage:Skywalking的存儲(chǔ),時(shí)間更迭,sw已經(jīng)開(kāi)發(fā)迭代到了6.x版本,在6.x版本中支持以ElasticSearch、Mysql、TiDB、H2、作為存儲(chǔ)介質(zhì)進(jìn)行數(shù)據(jù)存儲(chǔ)。

4. UI :Web可視化平臺(tái),用來(lái)展示落地的數(shù)據(jù)。

Skywalking Agent配置

通過(guò)了解配置,可以對(duì)一個(gè)組件功能有一個(gè)大致的了解。讓我們一起看一下skywalking的相關(guān)配置。

解壓開(kāi)skywalking的壓縮包,在agent/config文件夾中可以看到agent的配置文件。

從skywalking支持環(huán)境變量配置加載,在啟動(dòng)的時(shí)候優(yōu)先讀取環(huán)境變量中的相關(guān)配置。

Skywalking微服務(wù)監(jiān)控分析

  • agent.namespace: 跨進(jìn)程鏈路中的header,不同的namespace會(huì)導(dǎo)致跨進(jìn)程的鏈路中斷

  • agent.service_name:一個(gè)服務(wù)(項(xiàng)目)的唯一標(biāo)識(shí),這個(gè)字段決定了在sw的UI上的關(guān)于service的展示名稱(chēng)

  • agent.sample_n_per_3_secs: 客戶(hù)端采樣率,默認(rèn)是-1代表全采樣

  • agent.authentication: 與collector進(jìn)行通信的安全認(rèn)證,需要同collector中配置相同

  • agent.ignore_suffix: 忽略特定請(qǐng)求后綴的trace

  • collecttor.backend_service: agent需要同collector進(jìn)行數(shù)據(jù)傳輸?shù)腎P和端口

  • logging.level: agent記錄日志級(jí)別

skywalking agent使用javaagent無(wú)侵入式的配合collector實(shí)現(xiàn)對(duì)分布式系統(tǒng)的追蹤和相關(guān)數(shù)據(jù)的上下文傳遞。

Skywalking Collector關(guān)鍵配置

Collector支持集群部署,zookeeper、kubernetes(如果你的應(yīng)用是部署在容器中的)、consul(GO語(yǔ)言開(kāi)發(fā)的服務(wù)發(fā)現(xiàn)工具)是sw可選的集群管理工具,結(jié)合大家具體的部署方式進(jìn)行選擇。詳細(xì)配置大家可以去Skywalking官網(wǎng)下載介質(zhì)包進(jìn)行了解。

Collector端口設(shè)置

Skywalking微服務(wù)監(jiān)控分析

  • downsampling: 采樣匯總統(tǒng)計(jì)維度,會(huì)分別按照分鐘、【小時(shí)、天、月】(可選)來(lái)統(tǒng)計(jì)各項(xiàng)指標(biāo)數(shù)據(jù)。

  • 通過(guò)設(shè)置TTL相關(guān)配置項(xiàng)可以對(duì)數(shù)據(jù)進(jìn)行自動(dòng)清理。

Skywalking 在6.X中簡(jiǎn)化了配置。collector提供了gRPC和HTTP兩種通信方式。

UI使用rest http通信,agent在大多數(shù)場(chǎng)景下使用grpc方式通信,在語(yǔ)言不支持的情況下會(huì)使用http通信。

關(guān)于綁定IP和端口需要注意的一點(diǎn)是,通過(guò)綁定IP,agent和collector必須配置對(duì)應(yīng)ip才可以正常通信。

Collector存儲(chǔ)配置

在application.yml中配置的storage模塊配置中選擇要使用的數(shù)據(jù)庫(kù)類(lèi)型,并填寫(xiě)相關(guān)的配置信息。

Skywalking微服務(wù)監(jiān)控分析

Collector Receiver

Receiver是Skywalking在6.x提出的新的概念,負(fù)責(zé)從被監(jiān)控的系統(tǒng)中接受指標(biāo)數(shù)據(jù)。用戶(hù)完全可以參照OpenTracing規(guī)范來(lái)上傳自定義的監(jiān)控?cái)?shù)據(jù)。Skywalking官方提供了service-mesh、istio、zipkin的相關(guān)能力。

Skywalking微服務(wù)監(jiān)控分析

現(xiàn)在Skywalking支持服務(wù)端采樣,配置項(xiàng)為sampleRate,比例采樣,如果配置為5000則采樣率就是50%。

關(guān)于采樣設(shè)置的一點(diǎn)注意事項(xiàng)

關(guān)于服務(wù)采樣配置的一點(diǎn)建議,如果Collector以集群方式部署,比如:Acollector和Bcollector,建議Acollector.sampleRate = Bcollector.sampleRate。如果采樣率設(shè)置不相同可能會(huì)出現(xiàn)數(shù)據(jù)丟失問(wèn)題。

Skywalking微服務(wù)監(jiān)控分析

假設(shè)Agent端將所有數(shù)據(jù)發(fā)送到后端Collector處,A采樣率設(shè)置為30%,B采樣率為50%。

假設(shè)有30%的數(shù)據(jù),發(fā)送到A上,這些數(shù)據(jù)被全部正確接受并存儲(chǔ),極端情況(與期望的采樣數(shù)據(jù)量相同)下,如果剩下20%待采樣的數(shù)據(jù)發(fā)送到了B,這個(gè)時(shí)候一切都是正常的,如果這20%中有一部分?jǐn)?shù)據(jù)被送到了A那么,這些數(shù)據(jù)將是被忽略的,由此就會(huì)造成數(shù)據(jù)丟失。

二、業(yè)務(wù)調(diào)用鏈路監(jiān)控

Service Topology監(jiān)控

調(diào)用鏈路監(jiān)控可以從兩個(gè)角度去看待。我們先從整體上來(lái)認(rèn)識(shí)一下我們所監(jiān)控的系統(tǒng)。

通過(guò)給服務(wù)添加探針并產(chǎn)生實(shí)際的調(diào)用之后,我們可以通過(guò)Skywalking的前端UI查看服務(wù)之間的調(diào)用關(guān)系。

我們簡(jiǎn)單模擬一次服務(wù)之間的調(diào)用。新建兩個(gè)服務(wù),service-provider以及service-consumer,服務(wù)之間簡(jiǎn)單的通過(guò)Feign Client 來(lái)模擬遠(yuǎn)程調(diào)用。

Skywalking微服務(wù)監(jiān)控分析

從圖中可以看到:

  • 有兩個(gè)服務(wù)節(jié)點(diǎn):provider & consumer

  • 有一個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn):localhost【mysql】

  • 一個(gè)注冊(cè)中心節(jié)點(diǎn)

consumer消費(fèi)了provider提供出來(lái)的接口。

一個(gè)系統(tǒng)的拓?fù)鋱D讓我們清晰的認(rèn)識(shí)到系統(tǒng)之間的應(yīng)用的依賴(lài)關(guān)系以及當(dāng)前狀態(tài)下的業(yè)務(wù)流轉(zhuǎn)流程。細(xì)心的可能發(fā)現(xiàn)圖示節(jié)點(diǎn)consumer上有一部分是紅色的,紅色是什么意思呢?

紅色代表當(dāng)前流經(jīng)consumer節(jié)點(diǎn)的請(qǐng)求有一斷時(shí)間內(nèi)是響應(yīng)異常的。當(dāng)節(jié)點(diǎn)全部變紅的時(shí)候證明服務(wù)現(xiàn)階段內(nèi)就徹底不可用了。運(yùn)維人員可以通過(guò)Topology迅速發(fā)現(xiàn)某一個(gè)服務(wù)潛在的問(wèn)題,并進(jìn)行下一步的排查并做到預(yù)防。

Skywalking Trace監(jiān)控

Skywalking通過(guò)業(yè)務(wù)調(diào)用監(jiān)控進(jìn)行依賴(lài)分析,提供給我們了服務(wù)之間的服務(wù)調(diào)用拓?fù)潢P(guān)系、以及針對(duì)每個(gè)endpoint的trace記錄。

我們?cè)谥翱吹絚onsumer節(jié)點(diǎn)服務(wù)中發(fā)生了錯(cuò)誤,讓我們一起來(lái)定位下錯(cuò)誤是發(fā)生在了什么地方又是什么原因呢?

Skywalking微服務(wù)監(jiān)控分析

在每一條trace的信息中都可以看到當(dāng)前請(qǐng)求的時(shí)間、GloableId、以及請(qǐng)求被調(diào)用的時(shí)間。我們分別看一看正確的調(diào)用和異常的調(diào)用。

Trace調(diào)用鏈路監(jiān)控


Skywalking微服務(wù)監(jiān)控分析

圖示展示的是一次正常的響應(yīng),這條響應(yīng)總耗時(shí)19ms,它有4個(gè)span:

  • span1 /getStore = 19ms  響應(yīng)的總流轉(zhuǎn)時(shí)間

  • span2 /demo2/stores = 14ms  feign client 開(kāi)始調(diào)用遠(yuǎn)程服務(wù)后的響應(yīng)的總時(shí)間

  • span3 /stores = 14ms 接口服務(wù)響應(yīng)總時(shí)間

  • span4 Mysql = 1ms  服務(wù)提供端查詢(xún)數(shù)據(jù)庫(kù)的時(shí)間

這里span2和span3的時(shí)間表現(xiàn)相同,其實(shí)是不同的,因?yàn)檫@里時(shí)間取了整。

在每個(gè)Span中可以查看當(dāng)前Span的相關(guān)屬性。

  •  組件類(lèi)型: SpringMVC、Feign                  

  •  Span狀態(tài): false

  •  HttpMethod: GET

  •  Url

    http://192.168.16.125:10002/demo2/stores

Skywalking微服務(wù)監(jiān)控分析

這是一次正常的請(qǐng)求調(diào)用Trace日志,可能我們并不關(guān)心正常的時(shí)候,畢竟一切正常不就是我們期待的么!

我們?cè)賮?lái)看下,異常狀態(tài)下我們的Trace以及Span又是什么樣的呢。

Skywalking微服務(wù)監(jiān)控分析

發(fā)生錯(cuò)誤的調(diào)用鏈中Span中的is error標(biāo)識(shí)變?yōu)閠rue,并且在名為L(zhǎng)ogs的TAB中可以看到錯(cuò)誤發(fā)生的具體原因。根據(jù)異常情況我們就可以輕松定位到影響業(yè)務(wù)的具體原因,從而快速定位問(wèn)題,解決問(wèn)題。

通過(guò)Log我們看到連接被拒,那么可能是我們的網(wǎng)絡(luò)出現(xiàn)了問(wèn)題(可能性小,因?yàn)閷?shí)際情況如果網(wǎng)絡(luò)出現(xiàn)問(wèn)題我們連這個(gè)trace都看不到了),也有可能是服務(wù)端配置問(wèn)題無(wú)法正確建立連接。通過(guò)異常日志,我們迅速就找到了問(wèn)題的關(guān)鍵。

實(shí)際情況是,我把服務(wù)方停掉了,做了一次簡(jiǎn)單的模擬??梢?jiàn),通過(guò)拓?fù)鋱D示我們可以清晰的看到眾多服務(wù)中哪個(gè)服務(wù)是出現(xiàn)了問(wèn)題的,通過(guò)trace日志我們可以很快就定位到問(wèn)題所在,在最短的時(shí)間內(nèi)解決問(wèn)題。

三、服務(wù)性能指標(biāo)監(jiān)控 

Skywalking還可以查看具體Service的性能指標(biāo),根據(jù)相關(guān)的性能指標(biāo)可以分析系統(tǒng)的瓶頸所在并提出優(yōu)化方案。

Skywalking 性能監(jiān)控

在服務(wù)調(diào)用拓?fù)鋱D上點(diǎn)擊相應(yīng)的節(jié)點(diǎn)我們可以看到該服務(wù)的

  • SLA: 服務(wù)可用性(主要是通過(guò)請(qǐng)求成功與失敗次數(shù)來(lái)計(jì)算)

  • CPM: 每分鐘調(diào)用次數(shù)

  • Avg Response Time: 平均響應(yīng)時(shí)間

Skywalking微服務(wù)監(jiān)控分析

從應(yīng)用整體外部來(lái)看我們可以監(jiān)測(cè)到應(yīng)用在一定時(shí)間段內(nèi)的

  1. 服務(wù)可用性指標(biāo)SLA

  2. 每分鐘平均響應(yīng)數(shù)

  3. 平均響應(yīng)時(shí)間

  4. 服務(wù)進(jìn)程PID

  5. 服務(wù)所在物理機(jī)的IP、HostName、Operation System

Service JVM信息監(jiān)控

Skywalking微服務(wù)監(jiān)控分析

還可以監(jiān)控到Service運(yùn)行時(shí)的CPU、堆內(nèi)存、非堆內(nèi)存使用率、以及GC情況。這些信息來(lái)源于JVM。注意這里的數(shù)據(jù)可不是機(jī)器本身的數(shù)據(jù)。

四、服務(wù)告警

前文我們提到了通過(guò)查看拓?fù)鋱D以及調(diào)用鏈路可以定位問(wèn)題,可是運(yùn)維人員又不可能一直盯著這些數(shù)據(jù),那么我們就需要告警能力,在異常達(dá)到一定閾值的時(shí)候主動(dòng)的提示我們?nèi)ゲ榭聪到y(tǒng)狀態(tài)。

在Sywalking 6.x版本中新增了對(duì)服務(wù)狀態(tài)的告警能力。它通過(guò)webhook的方式讓我們可以自定義我們告警信息的通知方式。諸如:郵件通知、微信通知、短信通知等。

Skywalking 服務(wù)告警

先來(lái)看一下告警的規(guī)則配置。在alarm-settings.xml中可以配置告警規(guī)則,告警規(guī)則支持自定義。

Skywalking微服務(wù)監(jiān)控分析

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

  1. service_resp_time_rule:告警規(guī)則名稱(chēng) ***_rule (規(guī)則名稱(chēng)可以自定義但是必須以’_rule’結(jié)尾

  2. indicator-name:指標(biāo)數(shù)據(jù)名稱(chēng): 定義參見(jiàn)http://t.cn/EGhfbmd

  3. op: 操作符: > , < , = 【當(dāng)然你可以自己擴(kuò)展開(kāi)發(fā)其他的操作符】

  4. threshold:目標(biāo)值:指標(biāo)數(shù)據(jù)的目標(biāo)數(shù)據(jù) 如sample中的1000就是服務(wù)響應(yīng)時(shí)間,配合上操作符就是大于1000ms的服務(wù)響應(yīng)

  5. period: 告警檢查周期:多久檢查一次當(dāng)前的指標(biāo)數(shù)據(jù)是否符合告警規(guī)則

  6. counts: 達(dá)到告警閾值的次數(shù)

  7. silence-period:忽略相同告警信息的周期

  8. message:告警信息

  9. webhooks:服務(wù)告警通知服務(wù)地址

Skywalking通過(guò)HttpClient的方式遠(yuǎn)程調(diào)用在配置項(xiàng)webhooks中定義的告警通知服務(wù)地址。

Skywalking微服務(wù)監(jiān)控分析

了解了SW所傳送的數(shù)據(jù)格式我們就可以對(duì)告警信息進(jìn)行接收處理,實(shí)現(xiàn)我們需要的告警通知服務(wù)啦!

我們將一個(gè)服務(wù)停掉,并將另外一個(gè)服務(wù)的某個(gè)對(duì)外暴露的接口讓他休眠一定的時(shí)間。然后調(diào)用一定的次數(shù)觀察服務(wù)的狀態(tài)信息以及告警情況。

Skywalking微服務(wù)監(jiān)控分析

總結(jié):


本文簡(jiǎn)單的通過(guò)skwaylking的配置來(lái)對(duì)skywlaking的功能進(jìn)行一次初步的了解,對(duì)skwaylking新提出的概念以及新功能進(jìn)行簡(jiǎn)單的詮釋?zhuān)奖愦蠹伊私夂褪褂?。通過(guò)使用APM工具,可以讓我們方便的查看微服務(wù)架構(gòu)中系統(tǒng)瓶頸以及性能問(wèn)題等。

精選提問(wèn):

問(wèn)1:想問(wèn)問(wèn)選型的時(shí)候用pinpoint還是SK好?

答:選型問(wèn)題

1.要結(jié)合具體的業(yè)務(wù)場(chǎng)景, 比如你的代碼運(yùn)行環(huán)境 是java、php、net還是什么。2.pinpoint在安裝部署上要比skywalking略微復(fù)雜3.pinpoint和sw支持的組件列表是不同的。

https://github.com/apache/incubator-skywalking/blob/master/docs/en/setup/service-agent/java-agent/Supported-list.md你可以參照這里的支持列表對(duì)比下pinpoint的支持對(duì)象做一個(gè)簡(jiǎn)單對(duì)比。

4.sw經(jīng)過(guò)測(cè)試在并發(fā)量較高的情況下比pinpoint的吞吐量更好一些。

問(wèn)2:有沒(méi)有指標(biāo)統(tǒng)計(jì),比如某個(gè)url 的top10 請(qǐng)求、響應(yīng)最慢的10個(gè)請(qǐng)求?某個(gè)服務(wù)在整個(gè)鏈條中的耗時(shí)占比?

答:1.sw自帶有響應(yīng)最慢的請(qǐng)求top10統(tǒng)計(jì)針對(duì)所有的endpoint的統(tǒng)計(jì)。

2.針對(duì)每個(gè)url的top10統(tǒng)計(jì),sw本身沒(méi)有做統(tǒng)計(jì),數(shù)據(jù)都是現(xiàn)成的通過(guò)簡(jiǎn)單的檢索就可以搜到你想要的結(jié)果。

3.沒(méi)有具體的耗時(shí)占比,但是有具體總鏈路時(shí)間統(tǒng)計(jì)以及某個(gè)服務(wù)的耗時(shí)統(tǒng)計(jì),至于占比自己算吧,可以看ppt中的調(diào)用鏈路監(jiān)控的span時(shí)間解釋。

問(wèn)3:能不能具體說(shuō)一下在你們系統(tǒng)中的應(yīng)用?

答:EOS8LA版本中,我們整合sw對(duì)應(yīng)用提供拓?fù)?、調(diào)用鏈路、性能指標(biāo)的監(jiān)控、并在sw數(shù)據(jù)的基礎(chǔ)上增加系統(tǒng)的維度。

當(dāng)服務(wù)數(shù)很龐大的時(shí)候,整體的拓?fù)淦鋵?shí)就是一張密密麻麻的蜘蛛網(wǎng)。我們可以通過(guò)系統(tǒng)來(lái)選擇具體某個(gè)系統(tǒng)下的應(yīng)用。

8LA中SW是5.0.0alpha版本,受限于sw功能,我們并沒(méi)有提供告警能力,這在之后會(huì)是我們的考慮目標(biāo)。

問(wèn)4:業(yè)務(wù)訪問(wèn)日志大概每天100G,kubernetes 環(huán)境中部署,使用穩(wěn)定嗎?

答:監(jiān)控?cái)?shù)據(jù)沒(méi)有長(zhǎng)時(shí)間的存儲(chǔ)必要,除非你有特定的需求。它有一定的時(shí)效性,你可以設(shè)置ttl自動(dòng)清除過(guò)時(shí)信息。100g,es集群還是能輕松支撐的。

問(wèn)5:和pinpoint相比有什么優(yōu)勢(shì)嗎?

答:1.部署方式、使用方式簡(jiǎn)單

2.功能特性支持的更多

3.高并發(fā)性能會(huì)更好一些

問(wèn)6:skywalking的侵入式追蹤功能方便進(jìn)行單服務(wù)鏈的服務(wù)追蹤。但是跨多臺(tái)服務(wù)器多項(xiàng)目的整體服務(wù)鏈追蹤是否有整體設(shè)計(jì)考慮?

答:sw本身特性就是對(duì)分布式系統(tǒng)的追蹤,他是無(wú)侵入式的。無(wú)關(guān)你的應(yīng)用部署在多少臺(tái)服務(wù)器上。

問(wèn)7:應(yīng)用在加上代理之后性能會(huì)下降。請(qǐng)問(wèn)您有什么解決方法嗎?

答:性能下降是在所難免的,但是據(jù)我了解,以及官方的測(cè)試,他的性能影響是很低的。這是sw的測(cè)試數(shù)據(jù)供你參考。

https://skywalkingtest.github.io/Agent-Benchmarks/README_zh.html。

問(wèn)8:有異構(gòu)系統(tǒng)需求的話(huà)可以用sw嗎?

答:只要skywalking的探針支持的應(yīng)該都是可以的。

問(wèn)9:sw對(duì)于商用的web中間件,如bes、tongweb、websphere、weblogic的支持如何?

答:商業(yè)組件支持的比較少,因?yàn)樯婕暗较嚓P(guān)license的問(wèn)題,sw項(xiàng)目組需要獲得他們的支持來(lái)進(jìn)行數(shù)據(jù)上報(bào),據(jù)我了解,支持不是很好。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI