微服務(wù)技術(shù)解決方案_第1頁
微服務(wù)技術(shù)解決方案_第2頁
微服務(wù)技術(shù)解決方案_第3頁
微服務(wù)技術(shù)解決方案_第4頁
微服務(wù)技術(shù)解決方案_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

微服務(wù)技術(shù)解決方案

目錄

1.微服務(wù)需求分析和架構(gòu)設(shè)計.................................................4

2.微服務(wù)分布式事務(wù)處理.....................................................11

3.自動化測試框架...........................................................13

3.1.說明.................................................................14

3.2.使用.................................................................16

4.微服務(wù)監(jiān)控...............................................................16

5.微服務(wù)與docker.................................................................................................37

6.微服務(wù)與devops................................................................................................44

7.Openshift實現(xiàn)devops......................................................................................47

7.1.平臺概述.............................................................47

7.2.Openshift自動構(gòu)建應(yīng)用..............................................53

7.3.Openshift安裝.......................................................59

7.4.使用方法.............................................................63

場景1:開發(fā)團隊使用運維團隊提供的鏡像...............................63

場景2:生產(chǎn)項目拉取開發(fā)項目產(chǎn)生的鏡像...............................66

場景3:用Jenkins實現(xiàn)AB(應(yīng)用的名字叫AB)部署....................92

2

8.Vue前端..................................................................104

9.數(shù)據(jù)庫mysql.........................................................................................................................................106

10.代碼管理.................................................................107

11.基礎(chǔ)開發(fā)平臺.............................................................109

12.大數(shù)據(jù)處理...............................................................111

13.微服務(wù)的價值.............................................................111

3

微服務(wù)是目前最先進的開發(fā)方式,使用springcloud.boot開發(fā)微服務(wù)非常成熟,如

何對一個產(chǎn)品進行微服務(wù)開發(fā),這里給出詳細指導(dǎo)。

1.微服務(wù)需求分析和架構(gòu)設(shè)計

微服務(wù)是目前最先進的架構(gòu)設(shè)計思想,在許多國內(nèi)外大互聯(lián)網(wǎng)公司得到成功的應(yīng)用,

其核心是化繁為簡、化整為零,把應(yīng)用分解為小的服務(wù)模塊進行獨立開發(fā)。微服務(wù)的這

一特點使其便于部署到容器,對整個開發(fā)、測試、運維都發(fā)生了革命性影響,有力地支

持了devops開發(fā),便于敏捷開發(fā)和自動化測試,利于獨立部署、維護升級和故障處理,

提高效率和質(zhì)量,帶來了一系列優(yōu)勢。那么,微服務(wù)有哪些奧秘呢?下面從技術(shù)原理上

進行剖析。

化整為零的思路不是開發(fā)一個巨大的單體式的應(yīng)用,而是將應(yīng)用分解為小的、互相

連接的微服務(wù)。一個微服務(wù)一般完成某個特定的功能,比如下單管理、客戶管理等等。

每一個微服務(wù)都是微型六角形應(yīng)用,都有自己的業(yè)務(wù)邏輯和適配器。一些微服務(wù)還會發(fā)

布API給其它微服務(wù)和應(yīng)用客戶端使用。其它微服務(wù)完成一個WebUI,運行時,每一個

實例可能是一個云VM或者是Docker容器。

SpringCloud是微服務(wù)開發(fā)的優(yōu)秀框架,在springBoot的基礎(chǔ)上進行開發(fā),Spring

Cloud為開發(fā)者提供了在分布式系統(tǒng)(如配置管理、服務(wù)發(fā)現(xiàn)、斷路器、智能路由、

微代理、控制總線、一次性Token、全局鎖、決策競選、分布式會話和集群狀態(tài))操作

的開發(fā)工具。使用SpringCloud開發(fā)者可以快速實現(xiàn)上述這些模式。

4

智篁校血產(chǎn)品做服務(wù)開發(fā)架構(gòu)圖|

00

1務(wù)酬照

H心業(yè)務(wù)修務(wù)用

、

0需

0與

災(zāi)

應(yīng)

0系

0

微服務(wù)的特點在于根據(jù)業(yè)務(wù)提煉不同的服務(wù),系統(tǒng)經(jīng)過拆分,根據(jù)不同的功能劃分

出基礎(chǔ)服務(wù)和核心服務(wù)。各子系統(tǒng)調(diào)用多個核心服務(wù)完成功能,核心服務(wù)調(diào)用多個基礎(chǔ)

服務(wù)。核心服務(wù)之間和基礎(chǔ)服務(wù)之間不能互相調(diào)用。一般服務(wù)模塊只能訪問自己的數(shù)據(jù)

庫,對其他數(shù)據(jù)庫的數(shù)據(jù),通過調(diào)用其服務(wù)提供的接口完成。

要搞好服務(wù)抽象,確定服務(wù)邊界,確定合適的服務(wù)粒度,服務(wù)高內(nèi)聚、低耦合,充分復(fù)

用,還需要合理劃分服務(wù)的數(shù)據(jù)庫,實現(xiàn)高度自治。

服務(wù)的訪問分3種方式:

1.采用rest方式同步調(diào)用服務(wù),支持不同語言和環(huán)境。

5

2.采用消息方式異步并行調(diào)用服務(wù),提高性能和可用性。

3.采用asynTemplate異步調(diào)用服務(wù),通過future獲取結(jié)果。

4使用rpc方法訪問,性能最優(yōu),google的grpc很棒。

根據(jù)業(yè)務(wù)的特點,靈活采用上面的方法調(diào)用服務(wù),有效地提升系統(tǒng)性能。

微服務(wù)支持00D、DDD,根據(jù)業(yè)務(wù)場景而定架構(gòu)模式,ODD對于簡單業(yè)務(wù)應(yīng)用

合適,對于復(fù)雜的業(yè)務(wù)應(yīng)用,采用面向領(lǐng)域設(shè)計DDD合適,Axon支持DDD的CQRS

模式,和springcloud一起開發(fā)。

采用springboot開發(fā)功能、springcloudribbon實現(xiàn)負載均衡、config處理

配置、zuul做api網(wǎng)關(guān)、eureka做服務(wù)注冊、histrix限流、Sleuth處理log、dashbord、

actuator,elk監(jiān)控、mysql存儲、rabbitmq處理消息、redis處理緩存、前端用ngnix

實現(xiàn)負載均衡和緩存、rancher+k8s實現(xiàn)docker部署運行、太極框架處理分布式事務(wù)。

服務(wù)A段務(wù)B

Ribbon/FeignRibbon/Feign

(Reauest

Z

IStrverOl1Server

通過—可見試口訪問

赧旁.回§船旁的結(jié)構(gòu)

—一類似T網(wǎng)關(guān)對其不可見

管超砒ureka上注冊促供一個供外

的赧務(wù)8.92

部35用的統(tǒng)一

入口

6

AMQPHTTPIHTTP

監(jiān)控

日志

Docker。服務(wù)注冊Q服務(wù)發(fā)現(xiàn)

?復(fù)雜度可控:在將應(yīng)用分解的同時,規(guī)避了原本復(fù)雜度無止境的積累。每一個湖員務(wù)

專注于單一功能,并通過定義良好的接口清晰表述服務(wù)邊界。由于體積小、復(fù)雜度低,

每個微服務(wù)可由一個小規(guī)模開發(fā)團隊完全掌控,易于保持高可維護性和開發(fā)效率。

?獨立部署:由于微服務(wù)具備獨立的運行進程,所以每個微服務(wù)也可以獨立部署。當(dāng)某

個微服務(wù)發(fā)生變更時無需編譯、部署整個應(yīng)用。由微服務(wù)組成的應(yīng)用相當(dāng)于具備一系列

可并行的發(fā)布流程,使得發(fā)布更加高效,同時降低對生產(chǎn)環(huán)境所造成的風(fēng)險,最終縮短

應(yīng)用交付周期。

?技術(shù)選型靈活:微服務(wù)架構(gòu)下,技術(shù)選型是去中心化的。每個團隊可以根據(jù)自身服務(wù)

的需求和行業(yè)發(fā)展的現(xiàn)狀,自由選擇最適合的技術(shù)棧。由于每個微服務(wù)相對簡單,當(dāng)需

要對技術(shù)棧進行升級時所面臨的風(fēng)險較低,甚至完全重構(gòu)一個微服務(wù)也是可行的。

?容錯:當(dāng)某一組建發(fā)生故障時,在單一進程的傳統(tǒng)架構(gòu)下,故障很有可能在進程內(nèi)擴

散,形成應(yīng)用全局性的不可用。在微服務(wù)架構(gòu)下,故障會被隔離在單個服務(wù)中。若設(shè)計

良好,其他服務(wù)可通過重試、平穩(wěn)退化等機制實現(xiàn)應(yīng)用層面的容錯。

7

?擴展:單塊架構(gòu)應(yīng)用也可以實現(xiàn)橫向擴展,就是將整個應(yīng)用完整的復(fù)制到不同的節(jié)點。

當(dāng)應(yīng)用的不同組件在擴展需求上存在差異時,糊員務(wù)架構(gòu)便體現(xiàn)出其靈活性,因為每個

服務(wù)可以根據(jù)實際需求獨立進行擴展。

做微服務(wù)架構(gòu)設(shè)計規(guī)劃,主要分為以下步驟:

?1整體架構(gòu)設(shè)計

?2業(yè)務(wù)領(lǐng)域抽象、建模

?3服務(wù)規(guī)劃與層次劃分、數(shù)據(jù)庫設(shè)計與劃分

?4服務(wù)內(nèi)流程、數(shù)據(jù)、契約(接口)定義和技術(shù)選型。

8

配置查看/推送

降級

限流

9

1

在基礎(chǔ)交付設(shè)施自動化上,如下圖所示,體現(xiàn)在自動化、容器化交付這個流程中,

在平臺化的背景下把團隊思維轉(zhuǎn)換為DevOps式的,依托Docker和k8s完成了PaaS

平臺的對接,同時和QA一起協(xié)作完成持續(xù)交付流程的建立。

樵像

BundleService

ServiceRuntime

AgentEnv

SystemEnv

MetiInfo

Application

Runtia*tnv

Container

PAAS平臺

自動化溶器化交付艇

10

基于對業(yè)務(wù)的抽象分解,在計算服務(wù)層內(nèi)部,就可以進行更加細分的層次規(guī)劃,先

是垂直拆分為展現(xiàn)層、計算層、數(shù)據(jù)資源3大縱層,核心的計算層又細分為3個層次,

包括業(yè)務(wù)流程處理層,通過組裝下層服務(wù)完成功能;業(yè)務(wù)邏輯組件是自包含,跨產(chǎn)品線、

高度復(fù)用的組件;下面公共服務(wù)組件是一些通用服務(wù)。然后水平劃分為多個服務(wù)簇。如

下圖所示。

端到端UI

現(xiàn)WEB-UIAPI

層權(quán)限驗證上下文營理融安全視圖封裝服務(wù)路由

,

水平拆分,橫向成簇

2.微服務(wù)分布式事務(wù)處理

目前微服務(wù)事務(wù)解決方案有3個:一、結(jié)合MQ消息中間件實現(xiàn)的可靠消息最終一

致性二、TCC補償性事務(wù)解決方案三、最大努力通知型方案第一種方案:可靠消息最終

一致性,需要業(yè)務(wù)系統(tǒng)結(jié)合MQ消息中間件實現(xiàn),在實現(xiàn)過程中需要保證消息的成功

發(fā)送及成功消費。即需要通過業(yè)務(wù)系統(tǒng)控制MQ的消息狀態(tài)第二種方案:TCC補償性,

分為三個階段TRYING-CONFIRMING-CANCELING。每個階段做不同的處理。TRYING

11

階段主要是對業(yè)務(wù)系統(tǒng)進行檢測及資源預(yù)留CONFIRMING階段是做業(yè)務(wù)提交,通過

TRYING階段執(zhí)行成功后,再執(zhí)行該階段。默認如果TRYING階段執(zhí)行成功,

CONFIRMING就一定能成功。CANCELING階段是回對業(yè)務(wù)做回滾,在TRYING階段

中,如果存在分支事務(wù)TRYING失敗,則需要調(diào)用CANCELING將已預(yù)留的資源進行

釋放。第三種方案:最大努力通知型,這種方案主要用在與第三方系統(tǒng)通訊時,比如:

調(diào)用微信或支付寶支付后的支付結(jié)果通知。這種方案也是結(jié)合MQ進行實現(xiàn),例如:

通過MQ發(fā)送http請求,設(shè)置最大通知次數(shù)。達到通知次數(shù)后即不再通知。

微服務(wù)的關(guān)鍵難點在于分布式事務(wù)處理,根據(jù)CAP理論,微服務(wù)架構(gòu)采用最終一致

性EventualConsistency實現(xiàn)數(shù)據(jù)的一致性,這需要采用基于Eventprocess分布式事

務(wù)處理完成。為此需要創(chuàng)新地設(shè)計新的方法來完成事務(wù)的處理。我設(shè)計并開發(fā)了基于EP

的業(yè)務(wù)系統(tǒng)補償事務(wù)處理框架一太極分布式事務(wù)處理框架(TJDTH),可以有效地解決

這個問題,其優(yōu)勢在于提高了事務(wù)的成功率,故障一鍵恢復(fù),開發(fā)方便,簡單實用?,F(xiàn)

在的項目都是00D架構(gòu),可以很簡單地轉(zhuǎn)換為微服務(wù)架構(gòu),也都可以采用TJDTH太極

分布式事務(wù)處理框架處理事務(wù)。

當(dāng)建立微服務(wù)時,我們被強迫面對狀態(tài)的最終一致性問題,這是因為每個微服務(wù)都

擁有自己的數(shù)據(jù)庫資源,每個數(shù)據(jù)庫都配置了不同的一致性和可用性權(quán)衡策略。

最終一致性是一種用于描述在分布式系統(tǒng)中數(shù)據(jù)的操作模型,在分布式系統(tǒng)中狀態(tài)

是被復(fù)制然后跨網(wǎng)絡(luò)多節(jié)點保存,在關(guān)系數(shù)據(jù)庫集群中,最終一致性被用來在集群多個

節(jié)點之間協(xié)調(diào)數(shù)據(jù)復(fù)制的寫操作,數(shù)據(jù)庫集群中這種寫操作挑戰(zhàn)是:各個節(jié)點接受到的

寫操作必須嚴格按照復(fù)制的次序進行,這個次序是有時間損耗的,從這個角度看,數(shù)據(jù)

庫在集群節(jié)點之間的這種狀態(tài)復(fù)制還是可以被認為是

一種最終一致性,所有節(jié)點狀態(tài)在未來某個時刻最終匯聚到一個一致性狀態(tài),也就

12

是說,最終達成狀態(tài)一致性。當(dāng)構(gòu)建微服務(wù)時,最終一致性是開發(fā)者DBA和架構(gòu)師頻

繁打交道的問題,當(dāng)開始在分布式系統(tǒng)中進行狀態(tài)處理時,頭疼問題更加嚴重。

結(jié)合目前事務(wù)處理的精華,開發(fā)了太極分布式事務(wù)處理框架TJDPH,采用可靠消

息服務(wù)和補償處理機制,巧妙地運用數(shù)據(jù)庫的事務(wù)處理能力,對服務(wù)操作結(jié)果進行判斷,

調(diào)用應(yīng)用系統(tǒng)自身的事務(wù)處理功能,從而有效地解決微服務(wù)的分布式事務(wù)處理問題。通

過使用緩存,解決服務(wù)調(diào)用的冥等性和消息的冥等性,在事務(wù)處理時,采用異步并行調(diào)

用和消息調(diào)用對應(yīng)的服務(wù),提高了性能。TJDPH是一個非常優(yōu)秀的框架,優(yōu)勢在于提

高了應(yīng)用的成功率啟動進行分布式事務(wù)處理,事務(wù)處理速度快提高了數(shù)據(jù)的一致性,

把對事務(wù)的處理由不可控變?yōu)榭煽?,需要人工處理的故障可一鍵完成,簡單快捷,實現(xiàn)

事務(wù)處理的自動化,框架提供SDK,開發(fā)使用方便,高效實用,可以支持任何微服務(wù)架

構(gòu)的項目,而且可以運用于任何其他項目,是一個業(yè)界領(lǐng)先的世界級成果。

3.自動化測試框架

自動化測試可以一定程度上減輕測試人員負擔(dān),提高測試效率,并且通過自動化還

可以實現(xiàn)可靠性測試和性能測試。微服務(wù)對devops、jenkins提供良好的支持,利于

自動化測試和快速構(gòu)建發(fā)布,支持故障的快速排出。自動化測試可以快速自動完成大量

測試用例,節(jié)約巨大的人工測試成本,?同時它需要擁有專業(yè)開發(fā)技能的人才能完成開發(fā),

且需要大量時間進行維護(在需求經(jīng)常變化的情況下)。安全測試很重要,可以采用

CAL9000等工具測試web安全。用Selenium+Cucumber來完成自動化測試,采用

BDD方式進行微服務(wù)自動化測試,主要用到下面的軟件:

語言:Java8

框架:SpringBoot、cloud

13

構(gòu)建工具:maven

WebDriver:Selenium.Cucumber

單元測試框架:Junit

3.1.說明

Selenium是目前用的最廣泛的WebUI自動化測試框架。

Selenium也是一個用于Web應(yīng)用程序測試的工具。Selenium測試直接運行在瀏

覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括正、MozillaFirefox,chorme

等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應(yīng)用程序看是否能

夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測試系統(tǒng)功能——創(chuàng)建衰退測試檢驗軟件

功能和用戶需求。支持自動錄制動作和自動生成。Net、Java、Perl等不同語言的測試

腳本。Selenium是Thoughtworks專門為Web應(yīng)用程序編寫的一個驗收測試工具。

Selenium是一套完整的Web應(yīng)用程序測試系統(tǒng),它包含了測試的錄制

(SeleniumIDE)、編寫及運行(SeleniumRemoteControl)和測試的并行處理

(SeleniumGridXSelenium的核心SeleniumCore基于JsUnit,完全由JavaScript

編寫,因此可運行于任何支持JavaScript的瀏覽器上。與WatiN相同,Selenium也

是一款同樣使用ApacheLicense2.0協(xié)議發(fā)布的開源框架。

Selenium測試直接在瀏覽器中運行,就像真實用戶所做的一樣。Selenium測試可

以在Windows.Linux和MacintoshAnd上的InternetExplorer.Mozilla和

Firefox,chrome中運行。其他測試工具都不能覆蓋如此多的平臺。

使用Selenium和在瀏覽器中運行測試還有很多其他好處。下面是主要的兩大好處:

通過編寫模仿用戶操作的Selenium測試腳本,可以從終端用戶的角度來測試應(yīng)用

14

程序。

通過在不同瀏覽器中運行測試,更容易發(fā)現(xiàn)瀏覽器的不兼容性。

Selenium的核心,也稱browserbot,是用JavaScript編寫的。這使得測試腳本

可以在受支持的瀏覽器中運行。browserbot負責(zé)執(zhí)行從測試腳本接收到的命令,測

試腳本要么是用HTML的表布局編寫的,要么是使用一種受支持的編程語言編寫的。

使用junit對服務(wù)進行單元測試,再先使用Selenium寫一個簡單的行為級別的ui

測試,然后再結(jié)合Cucumber完成測試,進行自動化測試。

Android測試.使用UIAutomator測試自動化框架。這款工具是谷歌最近發(fā)布的。

它支持從4.1開始的安卓版本。這樣就得再選擇另一個安卓應(yīng)用測試工具來做早期版本

自動化測試。UIAutomator能夠與各種Android軟件產(chǎn)品交互,包括系統(tǒng)中的應(yīng)用。

這使UIAutomator可以鎖定和解鎖智能手機或平板電腦。

通過這個工具創(chuàng)建的腳本可以在許多不同的安卓平臺上執(zhí)行。它可以重現(xiàn)復(fù)雜的用

戶操作動作。UIAutomator也可以利用一個設(shè)備的外部按鍵,如回放鍵、音量調(diào)節(jié)鍵、

開關(guān)鍵來控制。它可以集成測試框架TestNG。在這種情況下,UIAutomator可以生

成豐富和詳細的報告,類似于Ranorex生成報告。另外,這個工具搜索功能非???。

軟件測試專家發(fā)現(xiàn)UIAutomator是一款適用于許多Android平臺的移動應(yīng)用測試。

它是一款最適合安卓應(yīng)用測試的工具之一,因為它是由谷歌專門為這個操作系統(tǒng)發(fā)布的。

目前,安卓操作系統(tǒng)設(shè)備上約66%使用的是安卓4.1。這就是為什么許多自動化測試工

程師決定UIAutomator是最合適的解決方案。

自動化從冒煙測試做起,用例設(shè)計要盡可能簡潔,多做封裝,以便降低維護成本。

同時實現(xiàn)自動化的持續(xù)集成,更早介入測試,更早發(fā)現(xiàn)問題。在此基礎(chǔ)之上,我們還可

以通過自動化配合獲取性能數(shù)據(jù)的腳本來實現(xiàn)對應(yīng)用程序的性能測試。這些工作可以使

15

得我們的測試覆蓋更廣,測試力度更深,更好的檢測和監(jiān)控產(chǎn)品質(zhì)量。

3.2.使用

<dependency>

<groupld>info.cukes</groupld>

<artifactld>cucumber-spring</artifactld>

<version>1.2.5</version>

</dependency>

<dependency><groupld>org.seleniumhq.selenium</groupld>

<artifactld>selenjum-java</artifactld>

(version>2.52.0〈/version>

</dependency>

4.微服務(wù)監(jiān)控

Spring-Cloud-Sleuth是SpringCloud的組成部分之一,為SpringCloud應(yīng)用

實現(xiàn)了一種分布式追蹤解決方案其兼容了Zipkin,HTrace和log-based追蹤。Google

的普羅米修斯proemtheus是一個優(yōu)秀的監(jiān)控平臺,這是一個開源的服務(wù)監(jiān)控系統(tǒng)和

時間序列數(shù)據(jù)庫,支持物理機、虛擬機、容器的監(jiān)控,使用方便靈活,報警、展示功能

豐富。特性:

?高維度數(shù)據(jù)模型

?自定義查詢語言

?可視化數(shù)據(jù)展示

16

?高效的存儲策略

?易于運維

?提供各種客戶端開發(fā)庫

?警告和報警

?數(shù)據(jù)導(dǎo)出

Springcloud的sleuth特點:

Span:基本工作單元,例如,在一個新建的span中發(fā)送一個RPC等同于發(fā)送一個

回應(yīng)請求給RPC,span通過一個64位ID唯一標識,trace以另一個64位ID表示,

span還有其他數(shù)據(jù)信息,比如摘要、時間戳事件、關(guān)鍵值注釋(tags)、span的ID、以

及進度ID(通常是IP地址)

span在不斷的啟動和停止,同時記錄了時間信息,當(dāng)你創(chuàng)建了一個span,你必須

在未來的某個時刻停止它。

Trace:一系列spans組成的一個樹狀結(jié)構(gòu),例如,如果你正在跑一個分布式大數(shù)據(jù)

工程,你可能需要創(chuàng)建一個trace。

Annotation:用來及時記錄一個事件的存在,一些核心annotations用來定義一個

17

請求的開始和結(jié)束

產(chǎn)品需要產(chǎn)生log,記錄產(chǎn)品的運行情況,使用elasticsearch+logstash+kibba來

完成監(jiān)控。

Logstash的Grok模式:

filter{

#patternmatchinglogbackpattern

grok{

match=>{"message"=>"%{TIMESTAMPJSO8601:timestamp}\s

+%{LOGLEVEL:severity}\s+\[%{DATA:service},%{DATA:trace},%{DATA:span},%{D

ATA:exportable}\]\s+%{DATA:pid}---\s+\[%{DATA:thread}\]\s+%{DATA:class}\s

+:\s+%{GREEDYDATA:rest)"}

)

)

JSONLogbackwithLogstash

為了方便獲取Logstash,通常保存log在JSON文件中而不是text文件中,配置方法

如下:

依賴建立

?確保Logback在classpath^(ch.qos.logbackJogback-core)

?增力口LogstashLogback編碼-version4.6的例子:

net.logstash.logback:logstash-logback-encoder:4.6

18

Logback建立

以下是一個Logback配置的例子:

?使用JSON格式記錄應(yīng)用信息到build/${}.json文件

?有兩個添加注釋源-console和標準log文件

?與之前章節(jié)使用相同的log模式

<?xmlversion="1.0"encoding="UTF-8"?>

<configuration>

<includeresource="org/springframework/boot/logging/logback/defaults.x

ml"/>

<springPropertyscope="context"name="springAppName"source="sprin

"/>

<!—Exampleforloggingintothebuildfolderofyourproject-->

<propertyname="LOG_FILE"value="${BUILD_FOLDER:-build}/${springApp

Name}"/>

<propertyname="CONSOLE_LOG_PATTERN"

value="%clr(%d{yyyy-MM-ddHH:mm:ss.SSS}){faint}%clr(${LOG_LEV

EL_PATTERN:-%5p})%clr([${springAppName:-},%X{X-B3-TraceId:-),%X{X-B3-S

panId:-},%X{X-Span-Export:-}]){yellow}%dr(${PID:-}){magenta}%clr(—){fain

t}%clr([%15.15t]){faint}%clr(%-40.40logger{39}){cyan}%clr(:){faint}%m%n${L

0G_EXCEPTI0N_C0NVERSI0N_W0RD:-%wEx}7>

19

<!—Appendertologtoconsole—>

<appendername="console"class="ch.qos.logback.core.ConsoleAppender

">

<filterclass="ch.qos.logback.classic.filter.ThresholdFilter">

<!—Minimumloggingleveltobepresentedintheconsolelogs-

->

<level>INFO</level>

</filter>

<encoder>

<pattern>${CONSOLE_LOG_PATTERN)</pattern>

<charset>utf8</charset>

</encoder>

</appender>

<!—Appendertologtofile—>

<appendername="flatfile"class="ch.qos.logback.core.rolling.RollingFileAp

pender">

<file>${LOG_FILE}</file>

<rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy

">

<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.gz</fileNamePatter

20

n>

<maxHistory>7</maxHistory>

</rollingPolicy>

<encoder>

<pattern>${CONSOLE_LOG_PATTERN}</pattern>

<charset>utf8</charset>

</encoder>

</appender>

<!—AppendertologtofileinaJSONformat—>

<appendername="logstash"class="ch.qos.logback.core.rolling.RollingFile

Appender">

<file>${LOG_FILE}.json</file>

<rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy

">

<fileNamePattern>${LOG_FILE}.json.%d{yyyy-MM-dd}.gz</fileNamePa

ttern>

<maxHistory>7</maxHistory>

</rollingPolicy>

<encoderclass="net.logstash.logback.encoder.LoggingEventCompositeJ

sonEncoder">

<providers>

21

<timestamp>

<timeZone>UTC</timeZone>

</timestamp>

<pattern>

<pattern>

(

"severity":"%level",

"service":"${springAppName:-}",

"trace":"%X{X-B3-Traceld:-}",

"span":"%X{X-B3-Spanld:-}",

"exportable":"%X{X-Span-Export:-}",

"pid":"${PID:-}n,

"thread":"%thread",

"class":n%logger{40}",

"rest":"%message"

)

</pattern>

</pattern>

</providers>

</encoder>

</appender>

22

<rootlevel="INF0">

<!—<appender-refref="console"/>—>

<appender-refref="logstash"/>

<!—<appender-refref="flatfile"/>—>

</root>

</configuration>

添加進工程

僅Sleuth(log收集)

如果僅需要SpringCloudSleuth而不需要Zipkin集成,只需要增加spring-cloud-

starter-sleuth模塊到你工程中

1.為了不手動添加版本號,更好的方式是通過SpringBOM添加

dependencymanagement

2.添加依賴到spring-cloud-starter-sleuth

<dependencyManagement>(1)

<dependencies>

<dependency>

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-dependencies</artifactld>

<version>Brixton.RELEASE</version>

<type>pom</type>

<scope>import</scope>

23

</dependency>

</dependencies>

</dependencyManagement>

<dependency>(2)

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-starter-sleuth</artifactId>

</dependency>

1.為了不手動添加版本號,更好的方式是通過SpringBOM添加

dependencymanagement

2.添加依賴到spring-cloud-starter-sleuth

dependencyManagement{(1)

imports{

mavenBom"org.springframework.cloud:spring-cloud-dependencies:Brixt

on.RELEASE"

)

)

dependencies{(2)

compile"org.springframework.cloud:spring-cloud-starter-sleuth"

)

24

通過HTTP使用基于Zipkin的Sleuth

如果你需要Sleuth和Zipkin,只需要添加spring-cloud-starter-zipkin依賴

1.為了不手動添加版本號,更好的方式是通過SpringBOM添加

dependencymanagement

2.添加依賴至(Jspring-cloud-starter-zipkin

<dependencyManagement>(1)

<dependencies>

<dependency>

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-dependencies</artifactld>

<version>Brixton.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

<dependency>(2)

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-starter-zipkin</artifactld>

</dependency>

25

1.為了不手動添加版本號,更好的方式是通過SpringBOM添加

dependencymanagement

2.添加依賴至!Jspring-cloud-starter-zipkin

dependencyManagement{(1)

imports{

mavenBom"org.springframework.cloud:spring-cloud-dependencies:Brixt

on.RELEASE"

)

)

dependencies{(2)

compile"org.springframework.cloud:spring-cloud-starter-zipl<in"

}

通過SpringCloudStream使用Sleuth+Zipkin

1.為了不手動添加版本號,更好的方式是通過SpringBOM添加

dependencymanagement

2.添加到spring-cloud-sleuth-stream

3.添加依賴到spring-cloud-starter-sleuth

4.添加一個binder(e.g.Rabbitbinder)來告訴SpringCloudStream應(yīng)該綁定什么

<dependencyManagement>(1)

<dependencies>

26

<dependency>

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-dependencies</artifactld>

<version>Brixton.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

<dependency>(2)

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-sleuth-stream</artifactId>

</dependency>

<dependency>(3)

<groupld>org.springframework.cloud</grouplcl>

<artifactld>spring-cloud-starter-sleuth</artifactId>

</dependency>

<!-EXAMPLEFORRABBITBINDING->

<dependency>(4)

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-stream-binder-rabbit</artifactld>

27

</dependency>

1.為了不手動添加版本號,更好的方式是通過SpringBOM添加

dependencymanagement

2.添加依賴到spring-cloud-sleuth-stream

3.添加依賴到spring-cloud-starter-sleuth

4.添力口一個binder(e.g.Rabbitbinder)來告訴SpringCloudStream應(yīng)該綁定什么

dependencyManagement{(1)

imports{

mavenBom"org.springframework.cloud:spring-cloud-dependencies:Brixt

on.RELEASE"

)

)

dependencies{

compile"org.springframework.cloud:spring-cloud-sleuth-stream"(2)

compile"org.springframework.cloud:spring-cloud-starter-sleuth"(3)

//ExampleforRabbitbinding

compilenorg.springframework.cloud:spring-cloud-stream-binder-rabbit"

(4)

)

SpringCloudSleuthStreamZipkinCollector

28

啟動一個SpringCloudSleuthStreamZipkin收集器只需要添加spring-cloud-sle

uth-zipkin-stream依賴

1.為了不手動添加版本號,更好的方式是通過SpringBOM添加

dependencymanagement

2.添加依賴至(Jspring-cloud-sleuth-zipkin-stream

3.添加依賴到spring-cloud-starter-sleuth

4.添加一個binder(e.g.Rabbitbinder)來告訴SpringCloudStream應(yīng)該綁定什么

<dependencyManagement>(1)

<dependencies>

<dependency>

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-dependencies</artifactld>

<version>Brixton.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

<dependency>(2)

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-sleuth-zipkin-stream</artifactld>

29

</dependency>

<dependency>(3)

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-starter-sleuth</artifactld>

</dependency>

<!-EXAMPLEFORRABBITBINDING->

<dependency>(4)

<groupld>org.springframework.cloucl</grouplcl>

<artifactld>spring-cloud-stream-binder-rabbit</artifactld>

</dependency>

1.為了不手動添加版本號,更好的方式是通過SpringBOM添加

dependencymanagement

2.添加依賴到spring-cloud-sleuth-zipkin-stream

3.添加依賴到spring-cloud-starter-sleuth

4.添加一個binder(e.g.Rabbitbinder)來告訴SpringCloudStream應(yīng)該綁定什么

dependencyManagement{(1)

imports{

mavenBom"org.springframework.cloud:spring-cloud-dependencies:Brixt

on.RELEASE"

)

)

30

dependencies{

compilenorg.springframework.cloud:spring-cloud-sleuth-zipkin-stream"

(2)

compile"org.springframework.cloud:spring-cloud-starter-sleuth"(3)

〃ExampleforRabbitbinding

compile"org.springframework.cloud:spring-cloud-stream-binder-rabbit"

(4)

)

之后只需要在你的主類中添加@EnableZipkinStreamServer注解

packageexample;

importorg.springframework.boot.SpringApplication;

importorg.springframework.boot.autoconfigure.SpringBootApplication;

importorg.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamSer

ver;

@SpringBootApplication

@EnableZipkinStreamServer

publicclassZipkinStreamServerApplication{

publicstaticvoidmain(String[]args)throwsException{

SpringApplication.run(ZipkinStreamServerApplication.class,args);

31

)

)

特點(Features)

添加trace和spanid到Slf4JMDC,然后就可以從一個給定的trace或span中提取

所有的log,例如

2016-02-0215:30:57.902INFO[bar,6bfd228dc00d216b,6bfd228dc00d216b,f

aIse]23030—[nio-8081-exec-3]...

2016-02-0215:30:58.372ERROR[bar,6bfd228dc00d216b,6bfd228dc00d216b,

false]23030—[nio-8081-exec-3]...

2016-02-0215:3

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論