利用SkyWalking對(duì)分布式應(yīng)用進(jìn)行監(jiān)控

1. 概述

1.1 SkyWalking 是什么?

FROM http://skywalking.apache.org/
分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具笼平,專為微服務(wù)园骆、云原生架構(gòu)和基于容器(Docker、K8s寓调、Mesos)架構(gòu)而設(shè)計(jì)锌唾。
提供分布式追蹤、服務(wù)網(wǎng)格遙測分析夺英、度量聚合和可視化一體化解決方案晌涕。
—— 官網(wǎng)

1.2 目的

本文主要利用SkyWalking對(duì)分布式應(yīng)用進(jìn)行請(qǐng)求鏈路監(jiān)控,為后續(xù)的性能優(yōu)化提供指南痛悯。

1.3 參考鏈接

1.4 版本

本文使用skywalking版本為最新的8.1.0

2. 安裝

本文使用 skywalking-docker倉庫的腳本進(jìn)行安裝試用余黎。首先進(jìn)入倉庫,選擇你需要的版本载萌,下載對(duì)應(yīng)的 docker-compose.yml 文件到本地惧财。

可根據(jù)實(shí)際情況,對(duì)docker-compose.yml文件進(jìn)行適當(dāng)?shù)男薷摹?/strong>

此處扭仁,我們默認(rèn)不該動(dòng)任何內(nèi)容垮衷。

啟動(dòng)容器:

docker-compose -d

首次執(zhí)行的話,可能需要拉取鏡像乖坠,請(qǐng)耐心等待搀突。

啟動(dòng)完成。訪問 http://127.0.0.1:8080熊泵,正常訪問即表示安裝成功仰迁。

3. 集成

3.1 下載skywalking程序

此處我們使用8.1.0版本甸昏。訪問https://github.com/apache/skywalking/releases,點(diǎn)擊下載8.1.0版本的壓縮包徐许。

下載 完成后施蜜,進(jìn)行解壓,項(xiàng)目目錄如下:

項(xiàng)目文件目錄

后續(xù)绊寻,我們主要關(guān)注agent文件夾花墩,這里面包含了探針代理工具包、相關(guān)插件及其配置文件澄步。

3.2 本地集成

我們以idea作為開發(fā)工具冰蘑,進(jìn)行agent的集成。

首先村缸,我們準(zhǔn)備一個(gè)Spring boot應(yīng)用祠肥;
然后配置jvm的啟動(dòng)參數(shù);

編輯啟動(dòng)配置文件
配置jvm參數(shù)
# 代理包絕對(duì)路徑
-javaagent:/your/path/apache-skywalking-apm-bin/agent/skywalking-agent.jar
# 項(xiàng)目名稱
-Dskywalking.agent.service_name=demo
# sw后臺(tái)服務(wù)地址
-Dskywalking.collector.backend_service=127.0.0.1:11800

全部配置參數(shù)參見:agent安裝與配置

最后啟動(dòng)并訪問測試http服務(wù)梯皿,稍等一會(huì)兒仇箱,skywalking的頁面即可看到監(jiān)控信息。

監(jiān)控頁面

3.3 遠(yuǎn)程集成

遠(yuǎn)程應(yīng)用的集成东羹,需要注意的是剂桥,要把“agent整個(gè)文件夾”復(fù)制到遠(yuǎn)程服務(wù)器,然后按照本地集成的方法属提,將jvm啟動(dòng)參數(shù)配置到容器的配置文件权逗,例如tomcat的“bin/catalina.sh ”文件中。

JAVA_OPTS="$JAVA_OPTS -javaagent:/home/demo/sharefile/ext_lib/agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo -Dskywalking.collector.backend_service=192.168.0.104:11800"

3.4 自定義增強(qiáng)監(jiān)控

文檔地址

自定義增強(qiáng)功能冤议,可以通過xml配置的方式斟薇,實(shí)現(xiàn)對(duì)方法(端點(diǎn))的監(jiān)控。例如:我們需用監(jiān)控socket請(qǐng)求的信息恕酸,但是目前skywalking沒有監(jiān)控socket的插件堪滨,所以我們可以用自定義增強(qiáng)的方法來采集處理請(qǐng)求的方法。

如何配置

實(shí)現(xiàn)對(duì)類的自定義增強(qiáng)需要以下幾步蕊温。

  1. 激活插件袱箱,將插件從optional-plugins/apm-customize-enhance-plugin.jar移動(dòng)到plugin/apm-customize-enhance-plugin.jar。
  2. 在agent.config中配置plugin.customize.enhance_file寿弱,指明增強(qiáng)規(guī)則文件犯眠,比如/absolute/path/to/customize_enhance.xml。
  3. 在customize_enhance.xml中配置增強(qiáng)規(guī)則症革。
<?xml version="1.0" encoding="UTF-8"?>
<enhanced>
    <class class_name="test.apache.skywalking.testcase.customize.service.TestService1">
        <method method="staticMethod()" operation_name="/is_static_method" static="true"/>
        <method method="staticMethod(java.lang.String,int.class,java.util.Map,java.util.List,[Ljava.lang.Object;)" operation_name="/is_static_method_args" static="true">
            <operation_name_suffix>arg[0]</operation_name_suffix>
            <operation_name_suffix>arg[1]</operation_name_suffix>
            <operation_name_suffix>arg[3].[0]</operation_name_suffix>
            <tag key="tag_1">arg[2].['k1']</tag>
            <tag key="tag_2">arg[4].[1]</tag>
            <log key="log_1">arg[4].[2]</log>
        </method>
        <method method="method()" static="false"/>
        <method method="method(java.lang.String,int.class)" operation_name="/method_2" static="false">
            <operation_name_suffix>arg[0]</operation_name_suffix>
            <tag key="tag_1">arg[0]</tag>
            <log key="log_1">arg[1]</log>
        </method>
        <method method="method(test.apache.skywalking.testcase.customize.model.Model0,java.lang.String,int.class)" operation_name="/method_3" static="false">
            <operation_name_suffix>arg[0].id</operation_name_suffix>
            <operation_name_suffix>arg[0].model1.name</operation_name_suffix>
            <operation_name_suffix>arg[0].model1.getId()</operation_name_suffix>
            <tag key="tag_os">arg[0].os.[1]</tag>
            <log key="log_map">arg[0].getM().['k1']</log>
        </method>
    </class>
    <class class_name="test.apache.skywalking.testcase.customize.service.TestService2">
        <method method="staticMethod(java.lang.String,int.class)" operation_name="/is_2_static_method" static="true">
            <tag key="tag_2_1">arg[0]</tag>
            <log key="log_1_1">arg[1]</log>
        </method>
        <method method="method([Ljava.lang.Object;)" operation_name="/method_4" static="false">
            <tag key="tag_4_1">arg[0].[0]</tag>
        </method>
        <method method="method(java.util.List,int.class)" operation_name="/method_5" static="false">
            <tag key="tag_5_1">arg[0].[0]</tag>
            <log key="log_5_1">arg[1]</log>
        </method>
    </class>
</enhanced>

文件中的配置說明。

配置 說明
class_name 要被增強(qiáng)的類
method 類的攔截器方法
operation_name 如果進(jìn)行了配置鸯旁,將用它替代默認(rèn)的operation_name
operation_name_suffix 表示在operation_name后添加動(dòng)態(tài)數(shù)據(jù)
static 方法是否為靜態(tài)方法
tag 將在local span中添加一個(gè)tag噪矛。key的值需要在XML節(jié)點(diǎn)上表示量蕊。
log 將在local span中添加一個(gè)log。key的值需要在XML節(jié)點(diǎn)上表示艇挨。
arg[x] 表示輸入的參數(shù)值残炮。比如args[0]表示第一個(gè)參數(shù)。
.[x] 當(dāng)正在被解析的對(duì)象是Array或List缩滨,你可以用這個(gè)表達(dá)式得到對(duì)應(yīng)index上的對(duì)象势就。
.['key'] 當(dāng)正在被解析的對(duì)象是Map, 你可以用這個(gè)表達(dá)式得到map的key。

B雎0搿!重要注意點(diǎn)2嗑蕖>顺!
K境馈;史蕖!重要注意點(diǎn)L谷浴w⑺浮!
7痹a;摹!重要注意點(diǎn)6屠搿F糖汀!

  1. 上邊第2步汽纠,配置plugin.customize.enhance_file=路徑卫键,此處路徑必須是xml文件的絕對(duì)路徑;
  2. 上邊第3步虱朵,配置method值時(shí)莉炉,例如“method(java.lang.String,int.class)”,方法參數(shù)之間碴犬,不能有空格絮宁。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猿诸,一起剝皮案震驚了整個(gè)濱河市隙弛,隨后出現(xiàn)的幾起案子锁荔,更是在濱河造成了極大的恐慌滩届,老刑警劉巖旬陡,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件优妙,死亡現(xiàn)場離奇詭異逻淌,居然都是意外死亡惜纸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門忍饰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贪嫂,“玉大人,你說我怎么就攤上這事艾蓝×Τ纾” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵赢织,是天一觀的道長亮靴。 經(jīng)常有香客問我,道長敌厘,這世上最難降的妖魔是什么台猴? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮俱两,結(jié)果婚禮上饱狂,老公的妹妹穿的比我還像新娘。我一直安慰自己宪彩,他們只是感情好休讳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尿孔,像睡著了一般俊柔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上活合,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天雏婶,我揣著相機(jī)與錄音,去河邊找鬼白指。 笑死留晚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的告嘲。 我是一名探鬼主播错维,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼橄唬!你這毒婦竟也來了赋焕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤仰楚,失蹤者是張志新(化名)和其女友劉穎隆判,沒想到半個(gè)月后犬庇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜜氨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年械筛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捎泻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片飒炎。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖笆豁,靈堂內(nèi)的尸體忽然破棺而出郎汪,到底是詐尸還是另有隱情,我是刑警寧澤闯狱,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布煞赢,位于F島的核電站,受9級(jí)特大地震影響哄孤,放射性物質(zhì)發(fā)生泄漏照筑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一瘦陈、第九天 我趴在偏房一處隱蔽的房頂上張望凝危。 院中可真熱鬧,春花似錦晨逝、人聲如沸蛾默。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽支鸡。三九已至,卻和暖如春趁窃,著一層夾襖步出監(jiān)牢的瞬間牧挣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工醒陆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瀑构,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓统求,卻偏偏與公主長得像检碗,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子码邻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351