Skywalking部署及使用

前言

首先有必要說明一下為什么使用skywalking泳挥。

我對(duì)zipkin忿偷、catskywalking這幾個(gè)較為主流的監(jiān)控產(chǎn)品做了一些調(diào)研和對(duì)比,其中zipkin是我項(xiàng)目中之前已經(jīng)在使用的,我也寫過一些相關(guān)的文章深员,而cat僅是通過資料收集并沒有實(shí)際的使用负蠕,可能會(huì)與實(shí)際情況有一定偏差蛙埂,整理以后情況匯總?cè)缦卤恚?/p>

項(xiàng)目 Cat Zipkin Skywalking
調(diào)用鏈可視化
聚合報(bào)表 非常豐富 較豐富
服務(wù)依賴圖 簡(jiǎn)單 簡(jiǎn)單
埋點(diǎn)方式 侵入式 侵入式 非侵入,字節(jié)碼增強(qiáng)
VM監(jiān)控指標(biāo)
支持語言 java/.net 豐富 java/.net/Nodejs/php/go
存儲(chǔ)機(jī)制 mysql(報(bào)表)遮糖、本地文件/HDFS(調(diào)用鏈) 內(nèi)存绣的、es、mysql等 H2欲账、es
社區(qū)支持 主要在國(guó)內(nèi) 國(guó)外主流 Apache支持
使用案例 美團(tuán)屡江、攜程、陸金所 京東赛不、阿里定制后不開源 華為惩嘉、小米、當(dāng)當(dāng)踢故、微眾銀行
APM
開發(fā)基礎(chǔ) eBay cal Google Dapper Google Dapper
是否支持webflux
Github stars(2019.12) 12.3K 12.2K 11.8K

然后根據(jù)上表說一下為什么我選擇用Skywalking來替換掉已經(jīng)在用的zipkin文黎,主要理由有以下幾點(diǎn):

  1. 我的微服務(wù)體系選用的服務(wù)網(wǎng)關(guān)是spring-cloud-gateway,是基于webflux實(shí)現(xiàn)的殿较,很多監(jiān)控并不支持耸峭,比如我司使用的商業(yè)化監(jiān)控產(chǎn)品-聽云,從資料來看cat也不支持淋纲;
  2. 我想要監(jiān)控接口級(jí)別的指標(biāo)劳闹,如吞吐量、p99等洽瞬,這些是目前zipkin不足的地方本涕,而Skywalking這方面做得不錯(cuò);
  3. Skywalking是非侵入式的伙窃,通過-javaagent機(jī)制運(yùn)行時(shí)注入菩颖,即使以后更換監(jiān)控方案也不需要對(duì)代碼大動(dòng)干戈。

Skywalking架構(gòu)

我使用的是最新版6.5.0对供,該版本下Skywalking主要分為oap位他、webapp和agent三部分,oap和webapp分別用于匯總數(shù)據(jù)和展示产场,這兩塊共同組成了Skywalking的平臺(tái)鹅髓;agent是探針,部署在需要收集數(shù)據(jù)的應(yīng)用服務(wù)器上京景,并將數(shù)據(jù)同步到Skywalking的平臺(tái)窿冯。

oap配置

在github的Skywalking項(xiàng)目中下載最新版安裝包apache-skywalking-apm-6.5.0.tar.gz

tar -zxvf apache-skywalking-apm-6.5.0.tar.gz

在服務(wù)器上解壓該安裝包,并進(jìn)入config文件夾确徙,對(duì)application.yml進(jìn)行設(shè)置醒串,主要設(shè)置如下幾個(gè)部分

cluster:
  standalone:

我為了試用部署的單機(jī)模式执桌,所以使用默認(rèn)的standalon,集群部署的話還支持zookeeper芜赌、consul仰挣、etcdnacos等缠沈。

core:
  default:
    # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
    # Receiver: Receive agent data, Level 1 aggregate
    # Aggregator: Level 2 aggregate
    role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
    restHost: ${SW_CORE_REST_HOST:0.0.0.0}
    restPort: ${SW_CORE_REST_PORT:12800}
    restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
    gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
    gRPCPort: ${SW_CORE_GRPC_PORT:11800}

這里的restPortgRPCPort分別代表通過rest方式和graphql方式訪問的端口膘壶,沒有特殊需求建議按默認(rèn)配置。

storage:
  elasticsearch:
    nameSpace: ${SW_NAMESPACE:""} #會(huì)相應(yīng)修改es中存儲(chǔ)的索引的前綴
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:172.28.51.150:9200} #es訪問地址
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"} #支持http和https
#    trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
#    trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
    user: ${SW_ES_USER:"elastic"}
    password: ${SW_ES_PASSWORD:"XXXXX"}
    indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
    # Those data TTL settings will override the same settings in core module.
    recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day
    otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day
    monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month
    # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
    bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests
    flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
    concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
    resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
    metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
    segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}

存儲(chǔ)可以支持es洲愤,H2和mysql颓芭,官方比較推薦的是es,所以我也根據(jù)自己的es進(jìn)行了配置柬赐。需要說明的是這里只支持6.3.2 ~ 7.0.0 (excluded)版本的es亡问,使用7.x.x版本的es需要另外下載apache-skywalking-bin-es7.tar.gz包。

另外肛宋,為了性能考慮州藕,官方建議在es的elasticsearch.yml配置中增加以下內(nèi)容

thread_pool.index.queue_size: 1000 #只適用于ElasticSearch 6
thread_pool.write.queue_size: 1000 #適用于ElasticSearch 6 and 7

index.max_result_window: 1000000 #trace頁面出錯(cuò)時(shí)記得設(shè)置

webapp配置

webapp的配置文件在/webapp/webapp.yml

server:
  port: 8080 #訪問頁面使用的端口

collector:
  path: /graphql
  ribbon:
    ReadTimeout: 10000
    # Point to all backend's restHost:restPort, split by ,
    listOfServers: 127.0.0.1:12800

這里默認(rèn)使用graphql方式訪問oap的數(shù)據(jù)收集端口,因此監(jiān)聽的是12800端口悼吱,并且因?yàn)槲野裲ap和webapp部署在同一臺(tái)服務(wù)器上慎框,地址默認(rèn)就使用了127.0.0.1。

平臺(tái)啟動(dòng)

/bin目錄下已經(jīng)有了完備的腳本后添,可以通過startup .sh同時(shí)啟動(dòng)oap和webapp進(jìn)程笨枯,該腳本實(shí)際做的事情也就是調(diào)用同目錄下的oapService.shwebappService.sh腳本,腳本內(nèi)容如下所示遇西。因此如果我們考慮分開部署這兩個(gè)進(jìn)程的話可以單獨(dú)調(diào)用對(duì)應(yīng)的腳本來運(yùn)行馅精。

#!/usr/bin/env sh

PRG="$0"
PRGDIR=`dirname "$PRG"`
OAP_EXE=oapService.sh
WEBAPP_EXE=webappService.sh

"$PRGDIR"/"$OAP_EXE"

"$PRGDIR"/"$WEBAPP_EXE"

agent的使用

agent的使用需要將/agent整個(gè)目錄拷貝到對(duì)應(yīng)需要監(jiān)控的服務(wù)器上,并修改/agent/config下的agent.config配置

# 不同的namespace會(huì)導(dǎo)致調(diào)用鏈路追蹤中斷
agent.namespace=${SW_AGENT_NAMESPACE:hmall}

# 頁面上展示的service的名稱粱檀,也可以通過-Dskywalking.agent.service_name=xxx指定
agent.service_name=${SW_AGENT_NAME:gateway}

# 平臺(tái)的調(diào)用地址洲敢,也可以通過-Dskywalking.collector.backend_service=127.0.0.1:80指定
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:172.28.51.141:11800}

# 忽略指定后綴的請(qǐng)求收集
agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg}


# 每3秒的采樣率,負(fù)數(shù)代表100%
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}

需要重點(diǎn)關(guān)注的配置如上所示茄蚯,修改完成后在啟動(dòng)java進(jìn)程時(shí)增加-javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar以加載agent压彭。

插件使用

默認(rèn)情況agent是不支持對(duì)spring-cloud-gateway的監(jiān)控的,需要插件的支持渗常。我們要將optional-plugins下的插件apm-spring-cloud-gateway-2.x-plugin-6.5.0.jar拷貝到plugins下壮不,使agent可以加載到該插件,其他一些需要額外插件支持的中間件和框架也是同理操作皱碘。

總結(jié)

skywalking.jpg
skywalking2.jpg

部署完成以后效果如圖询一,基本可以滿足我的指標(biāo)監(jiān)控需求,值得一提的是如果配置一切正常卻沒有數(shù)據(jù)顯示的話,一定要檢查右下角的時(shí)間軸對(duì)不對(duì)健蕊,不要問我是怎么知道的菱阵。。缩功。

目前的部署和使用還是基于虛擬機(jī)的晴及,由于我的項(xiàng)目在生產(chǎn)環(huán)境已經(jīng)上容器了,后續(xù)應(yīng)用到線上前會(huì)研究一下如何在容器中部署和使用skywalking以及如何和注冊(cè)中心結(jié)合達(dá)到高可用掂之。當(dāng)然抗俄,告警規(guī)則的配置也需要琢磨一下。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末世舰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子槽卫,更是在濱河造成了極大的恐慌跟压,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歼培,死亡現(xiàn)場(chǎng)離奇詭異震蒋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)躲庄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門查剖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人噪窘,你說我怎么就攤上這事笋庄。” “怎么了倔监?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵直砂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我浩习,道長(zhǎng)静暂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任谱秽,我火速辦了婚禮洽蛀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疟赊。我一直安慰自己郊供,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布听绳。 她就那樣靜靜地躺著颂碘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上头岔,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天塔拳,我揣著相機(jī)與錄音,去河邊找鬼峡竣。 笑死靠抑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的适掰。 我是一名探鬼主播颂碧,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼类浪!你這毒婦竟也來了载城?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤费就,失蹤者是張志新(化名)和其女友劉穎诉瓦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體力细,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睬澡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眠蚂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煞聪。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逝慧,靈堂內(nèi)的尸體忽然破棺而出昔脯,到底是詐尸還是另有隱情,我是刑警寧澤馋艺,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布栅干,位于F島的核電站,受9級(jí)特大地震影響捐祠,放射性物質(zhì)發(fā)生泄漏碱鳞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一踱蛀、第九天 我趴在偏房一處隱蔽的房頂上張望窿给。 院中可真熱鬧,春花似錦率拒、人聲如沸崩泡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽角撞。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谒所,已是汗流浹背热康。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留劣领,地道東北人姐军。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尖淘,于是被迫代替她去往敵國(guó)和親奕锌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容