skywalking 安装_如何使用skywalking 进行全链路监控
本文涉及內(nèi)容
- skywalking 全鏈路監(jiān)控
- skywalking 的參數(shù)配置
- skywalking UI 監(jiān)控視角與指標(biāo)介紹
- 一些很有用的點(diǎn)
skywalking 全鏈路監(jiān)控
下圖是我從網(wǎng)上找到的一個(gè)比較常見的微服務(wù)架構(gòu),看得出來使用的是 spring cloud 框架組件,后端服務(wù)是 java。我所謂的全鏈路監(jiān)控是 從 Nginx 到數(shù)據(jù)庫 這個(gè)鏈路的監(jiān)控。
我們知道 skywalking 可以通過 agent 比較方便的監(jiān)控到后端的 java 應(yīng)用。有關(guān) skywalking 的安裝請(qǐng)參考官方文檔[1]
以下是幾個(gè)界面截圖:通過 skywalking , 我們可以從服務(wù)入口開始一直監(jiān)控到數(shù)據(jù)庫,甚至是數(shù)據(jù)庫的 sql 以及參數(shù)都可以一覽無余(sql 參數(shù)顯示需要單獨(dú)配置,后面會(huì)講)。
然而我們并沒有監(jiān)控到請(qǐng)求的上游源頭,即 Nginx 入口,如果我們將從 Nginx 入口來的并且經(jīng)由 java 服務(wù)最終到數(shù)據(jù)庫的請(qǐng)求全部監(jiān)控起來,就完成了請(qǐng)求的全鏈路監(jiān)控。上面我們處理了下半段,現(xiàn)在我們來處理上半段。
skywalking-nginx-lua[2] 這是 skywalking 的另一個(gè)項(xiàng)目,可以通過它來對(duì)nginx進(jìn)行監(jiān)控。skywalking-nginx-lua 是使用lua來織入 agent 的。所以要求你的 nginx 要么有 lua 模塊,要么用 openResty 這樣的自帶 Lua 功能模塊的軟件。
我使用的是openResty,只需要加以下配置就可以實(shí)現(xiàn)監(jiān)控(注意中文注釋部分):
http?{????lua_package_path?"/Path/to/.../skywalking-nginx-lua/lib/skywalking/?.lua;;";????#?Buffer?represents?the?register?inform?and?the?queue?of?the?finished?segment????lua_shared_dict?tracing_buffer?100m;????#?Init?is?the?timer?setter?and?keeper????#?Setup?an?infinite?loop?timer?to?do?register?and?trace?report.????init_worker_by_lua_block?{????????local?metadata_buffer?=?ngx.shared.tracing_buffer????????--?Set?service?name????????metadata_buffer:set('serviceName',?'User?Service?Name')????????--?Instance?means?the?number?of?Nginx?deployment,?does?not?mean?the?worker?instances????????metadata_buffer:set('serviceInstanceName',?'User?Service?Instance?Name')????????#這是你的skywalking?server地址????????require("client"):startBackendTimer("http://127.0.0.1:12800")????}????server?{????????listen?8080;????????location?/ingress?{????????????default_type?text/html;????????????rewrite_by_lua_block?{????????????????------------------------------------------------------????????????????--?NOTICE,?this?should?be?changed?manually????????????????--?This?variable?represents?the?upstream?logic?address????????????????--?Please?set?them?as?service?logic?name?or?DNS?name????????????????--????????????????--?Currently,?we?can?not?have?the?upstream?real?network?address????????????????------------------------------------------------------????????????????require("tracer"):start("upstream?service")????????????????--?If?you?want?correlation?custom?data?to?the?downstream?service????????????????--?require("tracer"):start("upstream?service",?{custom?=?"custom_value"})????????????}????????????#?這是你的目標(biāo)下游服務(wù),比如java的微服務(wù)網(wǎng)關(guān)????????????proxy_pass?http://127.0.0.1:8080/backend;????????????body_filter_by_lua_block?{????????????????if?ngx.arg[2]?then????????????????????require("tracer"):finish()????????????????end????????????}????????????log_by_lua_block?{????????????????require("tracer"):prepareForReport()????????????}????????}????}}下面是幾個(gè)監(jiān)控到的nginx數(shù)據(jù)的截圖
至此我們就完成了整個(gè)鏈路的監(jiān)控。
skywalking 的參數(shù)配置
一些中文文檔
- agent的文檔[3]
- ui的文檔[4]
通過修改agent/config/agenet.config 文件得到的能力
根據(jù)文檔 https://github.com/apache/skywalking/blob/v8.0.0/docs/en/setup/service-agent/java-agent/README.md 得知
- 1 可以獲取 sql中的參數(shù),默認(rèn)是獲取不到的。當(dāng)然還要設(shè)置參數(shù)最大長(zhǎng)度。但獲取參數(shù)有可能引起性能問題。
- 2 收集http參數(shù)
- 3 skywalking-oap 的配置文件中關(guān)于數(shù)據(jù)存儲(chǔ)時(shí)長(zhǎng)的配置
主要是這四行
enableDataKeeperExecutor:?${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true}?#?Turn?it?off?then?automatically?metrics?data?delete?will?be?close.dataKeeperExecutePeriod:?${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5}?#?How?often?the?data?keeper?executor?runs?periodically,?unit?is?minuterecordDataTTL:?${SW_CORE_RECORD_DATA_TTL:3}?#?Unit?is?daymetricsDataTTL:?${SW_CORE_RECORD_DATA_TTL:7}?#?Unit?is?dayskywalking UI 監(jiān)控視角與指標(biāo)介紹
cpm 每分鐘請(qǐng)求數(shù)
cpm 全稱 call per minutes,是吞吐量(Throughput)指標(biāo)。下圖是拼接的全局、服務(wù)、實(shí)例和接口的吞吐量及平均吞吐量。
第一條185cpm=185/60=3.08個(gè)請(qǐng)求/秒。
SLA 服務(wù)等級(jí)協(xié)議
SLA 全稱 Service-Level Agreement,直譯為 “服務(wù)等級(jí)協(xié)議”,用來表示提供服務(wù)的水平。在IT中,SLA可以衡量平臺(tái)的可用性,下面是N個(gè)9的計(jì)算:
因此,全年只要發(fā)生一次較大規(guī)模宕機(jī)事故,4個(gè)9肯定沒戲,一般平臺(tái)3個(gè)9差不多。但2個(gè)9就基本不可用了,相當(dāng)于全年有87.6小時(shí)不可用,每周(一個(gè)月按4周算)有1.825小時(shí)不可用。下圖是服務(wù)、實(shí)例、接口的SLA,一般看年度、月度即可。
Percent Response 百分位數(shù)統(tǒng)計(jì)
表示采集樣本中某些值的占比,Skywalking 有 p50、p75、p90、p95、p99 一些列值。其中的 “p99:390” 表示 99% 請(qǐng)求的響應(yīng)時(shí)間在390ms以內(nèi)。而99%一般用于拋掉一些極端值,表示絕大多數(shù)請(qǐng)求。
Slow Endpoint 慢端點(diǎn)
Endpoint 表示具體的服務(wù),例如一個(gè)接口。下面是全局Top N的數(shù)據(jù),通過這個(gè)可以觀測(cè)平臺(tái)性能情況。
Heatmap 熱力圖
Heapmap 可譯為熱力圖、熱度圖都可以,其中顏色越深,表示請(qǐng)求數(shù)越多,這和GitHub Contributions很像,commit越多,顏色越深。橫坐標(biāo)是響應(yīng)時(shí)間,鼠標(biāo)放上去,可以看到具體的數(shù)量。通過熱力圖,一方面可以直觀感受平臺(tái)的整體流量,另一方面也可以感受整體性能。
apdex
是一個(gè)衡量服務(wù)器性能的標(biāo)準(zhǔn)。apdex有三個(gè)指標(biāo):
- 滿意:請(qǐng)求響應(yīng)時(shí)間小于等于T。
- 可容忍:請(qǐng)求響應(yīng)時(shí)間大于T,小于等于4T。
- 失望:請(qǐng)求響應(yīng)時(shí)間大于4T。
T:自定義的一個(gè)時(shí)間值,比如:500ms。apdex = (滿意數(shù) + 可容忍數(shù)/2)/ 總數(shù)。例如:服務(wù)A定義T=200ms,在100個(gè)采樣中,有20個(gè)請(qǐng)求小于200ms,有60個(gè)請(qǐng)求在200ms到800ms之間,有20個(gè)請(qǐng)求大于800ms。計(jì)算apdex = (20 + 60/2)/100 = 0.5。
一些很有用的點(diǎn)
在拓?fù)鋱D中
紅色代表當(dāng)前節(jié)點(diǎn)的請(qǐng)求有一段時(shí)間內(nèi)是響應(yīng)異常的。當(dāng)節(jié)點(diǎn)全部變紅的時(shí)候證明服務(wù)現(xiàn)階段內(nèi)就徹底不可用了。我們可以通過Topology迅速發(fā)現(xiàn)某一個(gè)服務(wù)潛在的問題,并進(jìn)行下一步的排查并做到預(yù)防。
仔細(xì)看線是有流向的,有單向和雙向的,單向有從左至右的或從右至左的,這樣你就知道你的服務(wù)是誰依賴了誰。雙向的就證明你的服務(wù)有循環(huán)引用依賴問題。
在最新版本8.1中有endpoint端口依賴的分析,可以分析出接口級(jí)別的依賴關(guān)系,可以知道某接口是被誰調(diào)用,它又調(diào)用了誰。
關(guān)注公眾號(hào) 獲取更多精彩內(nèi)容
參考資料
[1]
skywalking官方文檔: https://github.com/apache/skywalking/blob/master/docs/en/setup/README.md
[2]
skywalking-nginx-lua項(xiàng)目地址: https://github.com/apache/skywalking-nginx-lua/
[3]
skywalking-agent文檔: https://skyapm.github.io/document-cn-translation-of-skywalking/zh/8.0.0/setup/service-agent/java-agent/
[4
skywalking-ui 文檔: https://skyapm.github.io/document-cn-translation-of-skywalking/zh/8.0.0/ui/
總結(jié)
以上是生活随笔為你收集整理的skywalking 安装_如何使用skywalking 进行全链路监控的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wxpython制作表格界面_wxpyt
- 下一篇: python nonlocal的用法_简