用它!分布式系統(tǒng)APM工具的優(yōu)雅之選“SkyWalking”
點擊上方“IT那活兒”公眾號,關注后了解更多內(nèi)容,不管IT什么活兒,干就完了!!!
小時候我們都盼望著能夠快點長大,長大后,那段懵懵懂懂、無憂無慮的歲月時時讓我們懷念。而現(xiàn)在努力奮斗的我們正在讓孩子的生活,更加精彩!
6.1兒童節(jié)
祝我們的大朋友們
永葆童心,友愛友趣!
微服務架構是個好架構,它把整體的業(yè)務拆分成了若干個功能明確、目的統(tǒng)一的小服務,通過很多分散的小服務去整合排列,最終解決更大、更加復雜的業(yè)務場景。同時,架構中對拆分后的小服務進行分類和管理,彼此之間使用統(tǒng)一的協(xié)議來進行交互。這個設計從開發(fā)的角度,看上去很簡明美好。但我們做運維的,看到這樣的設計,不免心里要犯怵:這種微服務架構的特點,決定了它的部署往往是分布式的。在傳統(tǒng)環(huán)境下,所有業(yè)務都在一個服務器上來回折騰,出了問題,只要從一個點看過去,就能夠快速定位問題。可微服務架構可不遵循這套邏輯。通過總線交互的,可都是無狀態(tài)的服務。當前臺的業(yè)務流會經(jīng)過很多個微服務的處理和傳遞時...不用擔心!因為,發(fā)現(xiàn)這個麻煩的不只你一個人。早在2015年,就有一個名叫吳晟的開發(fā)者開源了一個名為Skywalking的分布式系統(tǒng)的應用程序性能監(jiān)控工具,專為微服務、云原生和基于容器的 (Kubernetes) 架構而設計。而隨著這幾年的發(fā)展,這個工具已經(jīng)在功能、性能、界面效果上實現(xiàn)了突飛猛進的發(fā)展。抓重點,開源、專為微服務架構設計,功能性能兩開花。這不就是微服務架構維護人員夢寐以求的APM神器嘛?!不說了,用它!在接下來的內(nèi)容中,將手把手的帶你完成基于Nacos的Skywalking集群搭建和Skywalking工作原理簡要解讀。
這是因為Skywalking OAP(Observation Application Platform)之間本身不能搭建集群,需要一個集群管理器來組建集群,目前Skywalking 支持Nacos、zookeeper、Kubernetes、Consul、Etcd 等多種集群管理器。又因為Nacos 擅長于發(fā)現(xiàn)、配置和管理微服務,又提供了一組簡單易用的特性集,幫助用戶快速實現(xiàn)動態(tài)服務發(fā)現(xiàn)、服務配置、服務元數(shù)據(jù)及流量管理。所以,自然成為了搭建Skywalking集群的一個很棒的選擇[3]。(當然,如果你是忠實的zookeeper或者Kubernetes用戶,那么繼續(xù)使用它們也完全不影響感受Skywalking帶來的優(yōu)雅體驗)???????????????????????????????首先,帶來我們的架構圖設計,這里采用了搭建生產(chǎn)環(huán)境的最低配置。圖一 生產(chǎn)可用Nacos集群部署架構圖既是針對小白的教程,那么每一步的構建部署都不會隨意跳過。保證所有軟件及依賴安裝,從零開始,不跳步驟,一步一截圖。在本實驗案例中,安裝包下載后,上傳至ftp后,在對應主機通過ftp下載。圖二 在對應主機通過ftp下載安裝包圖三 使用unzip命令解壓安裝包編輯Nacos集群配置文件(Nacos的配置文件都在<安裝目錄>/Nacos/conf目錄下),指定三個節(jié)點的IP和端口。圖四 編輯Nacos集群配置文件4. 創(chuàng)建數(shù)據(jù)庫使用<安裝目錄>/Nacos/conf目錄下的Nacos-mysql.sql創(chuàng)建數(shù)據(jù)表。(需要提前手動創(chuàng)建數(shù)據(jù)庫)圖五 創(chuàng)建完成的數(shù)據(jù)庫修改Nacos Server配置文件,主要修改的內(nèi)容是連接數(shù)據(jù)庫的部分。這里使用的Mysql數(shù)據(jù)庫用戶名為root,密碼為123456。圖六 修改Nacos Server配置文件使用<安裝目錄>/Nacos/bin目錄下的startup.sh來啟動Nacos Server。啟動后根據(jù)提示查看錯誤日志,發(fā)現(xiàn)報錯為找不到JDK。圖七 啟動Nacos Server這里安裝JDK,使用的是存放在FTP服務器上的安裝包,版本為jdk1.8。圖八 下載jdk安裝包根據(jù)之前啟動Nacos Server的報錯配置JDK環(huán)境變量JAVA_HOME。圖九 配置JDK環(huán)境變量并source生效繼續(xù)啟動Nacos Server,發(fā)現(xiàn)報錯為Nacos無法連接數(shù)據(jù)庫。圖十 報錯為Nacos無法連接數(shù)據(jù)庫查看數(shù)據(jù)庫用戶登錄設置后發(fā)現(xiàn),配置的root用戶默認只能從localhost登錄,因此使用如下語句來修改用戶登陸設置為可以從任何IP登錄。use mysql;
update user set host = % where user =root;
flush privileges;
quit
圖十一 修改數(shù)據(jù)庫登錄用戶設置圖十二 啟動Nacos Server成功為了能夠使用Nacos的圖形化Web管理界面,這里需要在Leader節(jié)點上配置Nginx。如果使用的是CentOS操作系統(tǒng),可以參考[2]中的Nginx部署配置過程。圖十三 配置Nginx步驟截圖之前創(chuàng)建的數(shù)據(jù)庫里,默認創(chuàng)建了一個名為nacos的用戶,密碼為加密的nacos。使用該用戶名和密碼,可以登錄Nacos的Web圖形管理界面。IP為/Nacos。圖十四 登錄圖形化Nacos的Web管理界面可以從圖形界面的「集群管理」->「節(jié)點列表」里發(fā)現(xiàn),當前只啟動了一個節(jié)點的Nacos Server。我們模仿之前的步驟,依次啟動其他節(jié)點的Nacos Server。圖十五 啟動其他節(jié)點的Nacos Server之后,在Web界面中可以看到節(jié)點從「Down」狀態(tài)轉為「Up」狀態(tài)如果需要關閉Nacos Server,只需要運行<安裝目錄>/Nacos/bin下面的shutdown.sh即可。圖十六 運行shutdown腳本之后,在Web界面中可以看到節(jié)點從「Up」狀態(tài)轉為「Down」狀態(tài)
短短的十幾步,就已經(jīng)完成了JDK、Nginx、Mysql主從、Nacos這一大堆環(huán)境的搭建,搞出了一個最基礎的生產(chǎn)可用Nacos集群。首先,先看看加入了Skywalking之后,架構圖發(fā)生什么樣的變化。圖十七 基于Nacos的Skywalking集群部署架構圖可以看到,對比之前的Nacos集群搭建,這里相當于在Leader節(jié)點上額外配置一個ES,并且在集群的每個節(jié)點上配置一份Skywalking。因此,很顯然可以得出這一部分的部署思路:在之前Nacos集群部署的基礎上,額外配置ES7和Skywalking即可參考[4]。1. 從官網(wǎng)下載ES7和Skywalking安裝包在本實驗案例中,安裝包下載后,上傳至ftp后,在對應主機通過ftp下載。圖十八 在對應主機通過ftp下載安裝包解壓安裝包之后,進入到ES安裝目錄,修改ES的配置文件(配置文件目錄為/config/elasticsearch.yml)。在本實驗案例中,將ES集群的名稱命名為test(該命名需要與后續(xù)的Skywalking配置中的配置項內(nèi)容相同)。同時,該配置文件中的data和logs目錄如果不存在,需要手動創(chuàng)建。圖十九 修改ES配置文件由于ES限制使用root用戶啟動,因此需要多帶帶創(chuàng)建es用戶,并修改ES目錄屬組。圖二十 修改ES安裝目錄屬組為es:es啟動ES在/bin下運行sh startup.sh -d即可。啟動成功后,ES默認使用9200端口,在瀏覽器打開對應ip:port,可以看到安裝情況。如果看到下圖的內(nèi)容,則表示安裝成功。圖二十一 ES安裝成功瀏覽器顯示結果解壓安裝包之后,進入到Skywalking安裝目錄,修改ES的配置文件(配置文件目錄為/config/application.yml)。在本實驗案例中,將nacos集群的使用的命名空間為默認的public,nacos用戶名和密碼使用默認的nacos/nacos,服務名為SkyWalking_OAP_Cluster。圖二十二 配置集群在本實驗案例中,根據(jù)上面步驟的記錄,將ES的集群名設置為test。圖二十三 配置數(shù)據(jù)庫在本實驗案例中,將nacos集群的使用的命名空間為默認的public,nacos用戶名和密碼使用默認的nacos/nacos。圖二十四 集群配置啟動Skywalking在/bin下運行sh startup.sh即可。啟動成功后,Skywalking默認使用8080端口,在瀏覽器打開對應ip:port,可以看到圖形化界面。(因為目前還沒有任何數(shù)據(jù),因此圖形化界面里是空的)圖二十五 Skywalking啟動成功反饋以及web圖形化界面完成Skywalking啟動后,可以在Nacos圖形界面查看服務。圖二十六 在Nacos圖形界面查看服務在其他節(jié)點上進行同樣的操作,只修改服務名為SkyWalking_OAP_Cluster_2和服務名為SkyWalking_OAP_Cluster_3。在Nacos圖形界面可以看到三個節(jié)點的服務[5]。圖二十七 在Nacos圖形界面可以看到三個節(jié)點的服務那么,讓我們順便來看一眼Skywalking的工作原理吧。了解它能幫助你更好的理解它的功能和效果。
Skywalking的源碼量并不小,但理解它的核心在于明白它對應用監(jiān)控的邏輯。在Skywalking中,這個功能通過探針實現(xiàn)。該功能是 Java 虛擬機提供的一整套后門。通過這套后門可以對虛擬機方方面面進行監(jiān)控與分析。我們可以從此切入,通過這樣的思路[6]來了解Skywalking的工作原理。通常Agent分為靜態(tài)啟動和動態(tài)啟動。1)靜態(tài)啟動:使用 -javaagent 參數(shù),在類加載時對目標類的字節(jié)碼可以進行任意修改,只要最后的結果符合字節(jié)碼規(guī)范,SkyWalking 只支持這種方式啟動 Agent。2)動態(tài)附加:使用 Attach API,類已經(jīng)加載完成并被使用,這時候只能對目標類的字節(jié)碼進行有限的修改,典型的應用:系統(tǒng)診斷(阿里 Arthas、笨馬 XPocket)。在源碼的agents部分中,可以看到它的啟動流程如下:1)初始化配置。(加載配置信息、將配置信息映射到 Config 類、根據(jù)配置信息重新指定日志解析器、檢查 Agent 名稱和后端地址是否配置、標記配置加載完成)3)定制化Agent。(創(chuàng)建 ByteBuddy 實例、指定 ByteBuddy 要忽略的類、將必要的類注入到 BootstrapClassLoader 中、解決 JDK 模塊系統(tǒng)的跨模塊類訪問、根據(jù)配置決定是否將修改后的字節(jié)碼保存到磁盤/內(nèi)存上)1)GRPCChannelManager(Agent到OAP的網(wǎng)絡連接、定時重連、通知監(jiān)聽器網(wǎng)絡連接狀態(tài)的變化);2)ServiceManagementClient(向OAP匯報自身的信息、保持心跳);3)CommandService(調(diào)度 OAP 下發(fā)的命令、CommandExecutorService);4)SamplingService(控制鏈路是否被上報到 OAP);5)JVMService(收集 JVM 的相關指標);6)KafkaXxxService(由 Agent 直連 OAP 改為通過 Kafka 交互、大部分的采集的數(shù)據(jù)都改為走 Kafka);7)StatusCheckService(用來判斷哪些異常不算異常)。鏈路追蹤是Skywalking實現(xiàn)的最基本功能,理解它需要首先知道這幾個概念。1)Trace:表示一整條鏈路(跨線程、跨進程的所有 Segment 的集合)2)Segment:表示一個 JVM 進程內(nèi)的一個線程中的所有操作的集合TraceSegment(組成 Trace 的基本單元、TraceSegmentRef 用于引用 Parent Segment、所有的 Span 維護在一個 LinkedList 中;relatedGlobalTraceId 表示當前 Segment 所在的 Trace、isSizeLimited 如果為 true 表示當前這條線程內(nèi)發(fā)生的操作次數(shù)超過了配置值,Segment 丟棄了一部分操作);Span(AsyncSpan - Span 的骨架、AbstractTracingSpan - 用于鏈路追蹤的 Span 模型)。大家看到這里,是不是對Skywalking的工作原理有了初步的印象,不再覺得這是一個完全吃不透的黑盒子了?
雖然Skywalking這個開源項目在經(jīng)歷了多年的commit之后,已經(jīng)變得相當龐大,但其基本工作原理和流程仍舊精煉優(yōu)雅。本文初步探索了生產(chǎn)可用的Skywalking集群搭建,并且簡要的介紹Skywalking的工作原理,闡釋了其運轉流程。希望能夠幫助小白上手,或者給予老手些微的啟發(fā)。參考資料:
[1] https://Nacos.io/zh-cn/index.html(Nacos官網(wǎng))
[2] https://blog.csdn.net/qq_37345604/article/details/90034424(安裝nginx)
[3] https://www.imooc.com/article/288153/(搭建生產(chǎn)可用Nacos集群)
[4] https://www.cnblogs.com/fuhai0815/p/13344150.html(Centos7 Nacos + Elasticsearch + SkyWalking)
[5] https://www.bilibili.com/read/cv6621424/(基于Nacos的Skywalking集群配置)
[6] https://www.processon.com/view/link/611fc4c85653bb6788db4039#map(Skywalking源碼思維導圖)
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129479.html