版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省濟寧市第七中學(xué)2024--2025學(xué)年七年級上學(xué)期第一次月考數(shù)學(xué)試題(無答案)
- 2024年度云南省高校教師資格證之高等教育心理學(xué)全真模擬考試試卷A卷含答案
- 贛南師范大學(xué)《教育政策法規(guī)與教師職業(yè)道德》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年激光合作目標項目資金需求報告代可行性研究報告
- 阜陽師范大學(xué)《形式與政策三》2022-2023學(xué)年第一學(xué)期期末試卷
- 南京市2024-2025學(xué)年五年級上學(xué)期11月期中調(diào)研數(shù)學(xué)試卷一(有答案)
- 福建師范大學(xué)《資本論選讀》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年二級建造師實務(wù)集訓(xùn)模擬題一
- 財務(wù)管理-物業(yè)公司清算報告模板
- 福建師范大學(xué)《景觀設(shè)計三》2022-2023學(xué)年第一學(xué)期期末試卷
- 卡通學(xué)生班干部競選自我介紹
- 江蘇民歌課件
- DB11T 1448-2017 城市軌道交通工程資料管理規(guī)程
- 骨質(zhì)疏松癥-PPT課件
- 施耐德APC1-20K不間斷電源內(nèi)部培訓(xùn)(ppt可編輯修改)課件
- 八年級環(huán)境教育教案全冊各課
- 藍色炫酷科技風(fēng)新品上市發(fā)布會PPT模板課件
- 小小建筑師公開課-PPT課件
- 類風(fēng)濕性關(guān)節(jié)炎護理查房ppt
- 空氣質(zhì)量遠程監(jiān)測系統(tǒng)設(shè)計畢業(yè)設(shè)計(論文)
- 2020新外研版新教材高二英語選擇性必修四課文及翻譯(中英文Word)
評論
0/150
提交評論