javascript
Spring Boot Serverless 实战 | Serverless 应用的监控与调试
作者:西流|阿里云函數(shù)計(jì)算專家
導(dǎo)讀:Spring Boot 是基于 Java Spring 框架的套件,它預(yù)裝了 Spring 的一系列組件,讓開發(fā)者只需要很少的配置就可以創(chuàng)建獨(dú)立運(yùn)行的應(yīng)用程序。在云原生的環(huán)境中,有大量的平臺(tái)可以運(yùn)行 Spring Boot 應(yīng)用,例如虛擬機(jī)、容器等。但其中最有吸引力的,是以 Serverless 的方式運(yùn)行 Spring Boot 應(yīng)用。
我將通過(guò)一系列文章,從架構(gòu),部署,監(jiān)控、性能、安全等 5 個(gè)方面來(lái)分析 Serverless 平臺(tái)運(yùn)行 Spring Boot 應(yīng)用的優(yōu)劣。為了讓分析更有代表性,我選擇了 Github 上 star 數(shù)超過(guò) 50k 的電商應(yīng)用 mall 作為示例。通過(guò)上一篇《Spring Boot Serverless 實(shí)戰(zhàn) | 部署篇》,相信大家已經(jīng)感受到 Serverless 應(yīng)用上線的便捷。這是該系列文章的第三篇,本文將向大家展示怎樣監(jiān)控、調(diào)試 Serverless 應(yīng)用。
實(shí)時(shí)日志
對(duì)運(yùn)行在遠(yuǎn)端云平臺(tái)上的應(yīng)用而言,日志是調(diào)試的主要手段。分布式應(yīng)用下有多個(gè)實(shí)例,日志的收集和分析是很有挑戰(zhàn)性的。雖然有很多成熟的開源產(chǎn)品,但要搭建和持續(xù)運(yùn)維這些軟件,成本并不小。函數(shù)計(jì)算內(nèi)置了對(duì)日志收集/分析的完整支持。用戶只需要在應(yīng)用邏輯中輸出日志,這些日志便可被自動(dòng)收集,通過(guò)多種方式聚合,查詢,并支持實(shí)時(shí)查看。
在前面的文章中,我們通過(guò) Serverless Devs 工具,已經(jīng)為應(yīng)用自動(dòng)創(chuàng)建創(chuàng)建了日志倉(cāng)庫(kù),可以在函數(shù)計(jì)算控制臺(tái)查看請(qǐng)求,應(yīng)用級(jí)別的日志,也可使用 SQL 語(yǔ)言進(jìn)行高級(jí)查詢。除此之外,Serverless Devs 工具還提供了實(shí)時(shí)日志功能,對(duì)于應(yīng)用調(diào)試非常有幫助。
在項(xiàng)目根目錄下,即 s.yaml 所在的目錄,執(zhí)行下面的命令,將輸出 s.yaml 中定義的所有服務(wù)的日志。
sudo -E s logs用戶也可查看指定服務(wù)的日志。
sudo -E s mall-admin logs通過(guò) -t 參數(shù),用戶也可以進(jìn)入觀察模式實(shí)時(shí)查看日志。
sudo -E s mall-admin logs -t此時(shí) Serverless Devs 工具會(huì)實(shí)時(shí)監(jiān)聽(tīng) mall-admin 應(yīng)用下所有實(shí)例的日志,將新產(chǎn)生的日志實(shí)時(shí)展示。此后,當(dāng)我們通過(guò)瀏覽器或者 curl 等方式給 mall-admin 應(yīng)用發(fā)送請(qǐng)求,就能看到對(duì)應(yīng)的請(qǐng)求處理日志輸出。
Serverless Devs 也支持根據(jù)關(guān)鍵詞查詢?nèi)罩尽1热缥覀兛梢詧?zhí)行下面的命令,查看 mall-admin 應(yīng)用 ERROR 級(jí)別的日志。
s mall-admin logs -t --keyword=ERROR指標(biāo)多維查詢展示
除了 Serverless Devs 的命令行工具,用戶也可以在函數(shù)計(jì)算控制臺(tái)上從函數(shù)、實(shí)例、請(qǐng)求等多個(gè)維度查看日志。
以 mall-admin 為例,在函數(shù)計(jì)算控制臺(tái)左側(cè)導(dǎo)航欄,點(diǎn)擊 “服務(wù)及函數(shù)”,選擇 mall-admin 服務(wù),再選擇該服務(wù)下的同名函數(shù),進(jìn)入 mall-admin 函數(shù)詳情頁(yè)。點(diǎn)擊監(jiān)控指標(biāo)標(biāo)簽頁(yè)。
如下圖所示,請(qǐng)求列表展示了請(qǐng)求的執(zhí)行情況,包括成功/失敗,是在什么函數(shù)版本上執(zhí)行的,執(zhí)行時(shí)長(zhǎng),內(nèi)存用量,在哪個(gè)實(shí)例上執(zhí)行等等。也可以方便地查詢請(qǐng)求相關(guān)的日志。
下圖展示了實(shí)例維度的信息。除了指標(biāo),用戶也可以到滾動(dòng)到頁(yè)面下方,查看對(duì)應(yīng)的實(shí)例列表,以及登錄到實(shí)例上執(zhí)行相關(guān)的操作。
注意:函數(shù)計(jì)算的按量實(shí)例完全由系統(tǒng)管理,實(shí)例在閑置一段時(shí)間后就會(huì)被系統(tǒng)回收。被回收的實(shí)例不再被使用,不能登錄。在下圖中以灰色顯示。
通過(guò)函數(shù)計(jì)算平臺(tái)提供的日志收集和查詢能力,用戶的開發(fā)流程被無(wú)縫銜接起來(lái)。修改代碼,使用 Serverless Devs 工具部署應(yīng)用,查看日志,整個(gè)流程絲般順滑。
本地調(diào)試
在將應(yīng)用部署到云平臺(tái)之前,我們通常希望能在本地部署應(yīng)用,進(jìn)行調(diào)試。Serverless Devs 工具提供了本地運(yùn)行應(yīng)用的功能。
在項(xiàng)目根目錄(s.yaml 所在目錄),執(zhí)行命令,即可啟動(dòng)對(duì)應(yīng)的服務(wù)。auto 參數(shù)是指自動(dòng)為實(shí)例生成和 Web 框架兼容的測(cè)試域名。例如執(zhí)行下述命令:
sudo -E s mall-admin local start auto工具會(huì)在本地啟動(dòng)函數(shù)實(shí)例,并提供一個(gè)可供調(diào)用的 url。這樣我們可以在本地調(diào)試 Web 應(yīng)用,提高效率。
注意:每次啟動(dòng)本地實(shí)例,監(jiān)聽(tīng)端口是隨機(jī)生成的。
端云聯(lián)調(diào)
很多時(shí)候,構(gòu)成應(yīng)用的微服務(wù)/函數(shù)需要和其他服務(wù)相互調(diào)用。除了在本地進(jìn)行簡(jiǎn)單的單元測(cè)試,聯(lián)調(diào)或者集成測(cè)試必須要把代碼部署到云端,這樣的方式使得開發(fā)調(diào)試的流程比較長(zhǎng),云端的復(fù)雜環(huán)境也增大了問(wèn)題診斷的難度。比如:
要平遷原有的應(yīng)用,函數(shù)實(shí)例需要訪問(wèn)云端環(huán)境中的其他服務(wù),遇到實(shí)例啟動(dòng)不起來(lái)時(shí),該怎么排查原因?
應(yīng)用采用微服務(wù)架構(gòu),涉及到多個(gè)服務(wù)。能否在本地代碼開發(fā)完成后快速進(jìn)行端對(duì)端測(cè)試?
事件驅(qū)動(dòng)的應(yīng)用,通過(guò)事件源觸發(fā)函數(shù),環(huán)節(jié)多,鏈路長(zhǎng),能不能在本地快速測(cè)試整個(gè)鏈路?
……
為了解決上述問(wèn)題,Serverless Devs 提供了端云聯(lián)調(diào)功能。開發(fā)者通過(guò)端云聯(lián)調(diào)能在本地啟動(dòng)實(shí)例,和云端環(huán)境無(wú)縫連通,快速進(jìn)行測(cè)試和問(wèn)題調(diào)試。端云聯(lián)調(diào)能幫助開發(fā)者:
1、變更代碼,實(shí)時(shí)查看結(jié)果,調(diào)試迭代的閉環(huán)最短。
2、能夠復(fù)用本地豐富的開發(fā)調(diào)試工具,效率最高。
端云聯(lián)調(diào)在本地開發(fā)機(jī)和云端應(yīng)用的 VPC 環(huán)境間建立一條安全的隧道連接。訪問(wèn)云端應(yīng)用的流量將自動(dòng)轉(zhuǎn)發(fā)到本地開發(fā)機(jī)上;同時(shí)本地實(shí)例對(duì)外訪問(wèn)的網(wǎng)絡(luò)流量也被自動(dòng)轉(zhuǎn)發(fā)到云端應(yīng)用的 VPC 環(huán)境中。比如在本地實(shí)例訪問(wèn)云端的 RDS 數(shù)據(jù)庫(kù)實(shí)例,傳統(tǒng)方式開發(fā)者只能放開 RDS 實(shí)例的公網(wǎng)訪問(wèn)。而使用端云聯(lián)調(diào),不需要任何配置的改變,可以直接以內(nèi)網(wǎng)的方式訪問(wèn) RDS 實(shí)例。
以 mall 應(yīng)用為例,整個(gè)應(yīng)用由 mall-admin-web,mall-admin,mall-portal,mall-search 等多個(gè)服務(wù)構(gòu)成。服務(wù)之間有上下游依賴,比如 mall-admin-web 會(huì)向下游的 mall-admin 服務(wù)發(fā)送請(qǐng)求。
假設(shè)我們已經(jīng)在測(cè)試環(huán)境部署了一整套 mall 應(yīng)用的服務(wù),現(xiàn)在想在開發(fā)機(jī)全鏈路調(diào)試 mall-admin 服務(wù),需要把 mall-admin-web 等整套服務(wù)和數(shù)據(jù)庫(kù)都部署到開發(fā)機(jī),或者通過(guò)公網(wǎng)與云端 VPC 內(nèi)的服務(wù)和數(shù)據(jù)庫(kù)交互,這是非常繁瑣甚至不現(xiàn)實(shí)的。端云聯(lián)調(diào)能讓我們?cè)诒镜亻_發(fā)機(jī)環(huán)境啟動(dòng) mall-admin 服務(wù)的實(shí)例,安全的與云端 VPC 環(huán)境的其他服務(wù)和數(shù)據(jù)庫(kù)無(wú)縫交互。用戶不需要做任何設(shè)置。
首先在 s.yaml 所在的目錄執(zhí)行下述命令,針對(duì) mall-admin 服務(wù)啟動(dòng)端云聯(lián)調(diào)。
sudo -E s mall-admin proxied setup然后在控制臺(tái)訪問(wèn) mall-admin-web 應(yīng)用,可以看到相關(guān)的請(qǐng)求已經(jīng)被轉(zhuǎn)發(fā)到了本地的 mall-admin 函數(shù)實(shí)例上。而且本地實(shí)例可以無(wú)縫的訪問(wèn)云端 VPC 內(nèi)的數(shù)據(jù)庫(kù)或者其他服務(wù)。
注意:當(dāng)使用了端云聯(lián)調(diào)后,所有的流量都會(huì)發(fā)送到本地的實(shí)例上。要讓流量恢復(fù)到函數(shù)計(jì)算上的實(shí)例,需要執(zhí)行 s deploy 重新部署相關(guān)的函數(shù)。
總結(jié)
從下圖的兩個(gè)報(bào)告中, 我們可以看出, 在 Serverless 領(lǐng)域, 調(diào)試和可觀測(cè)一直是 Serverless 開發(fā)實(shí)踐者最大的兩個(gè)痛點(diǎn)。
函數(shù)計(jì)算這個(gè) Serverless 產(chǎn)品始終踐行開發(fā)者第一的理念, 在調(diào)試和可觀測(cè)方面探索和落地走在所有云廠商的前面, 在調(diào)試方面,Serverless Devs 工具支持本地調(diào)試、端云聯(lián)調(diào)甚至是遠(yuǎn)程調(diào)試;而在可觀測(cè)方面, 推出了其他廠商不具備的秒級(jí)監(jiān)控、實(shí)例指標(biāo)以及實(shí)例登錄等,極大提高了 Serverless 開發(fā)者的工作效率和幸福感, Server Less, Value More!
相關(guān)鏈接
1)Spring Boot: https://spring.io/projects/spring-boot
2)Mall: https://github.com/macrozheng/mall
3)Serverless Devs 安裝文檔: http://serverless-devs.com/zhcn/docs/installed/cliinstall.html
4)函數(shù)計(jì)算: https://www.aliyun.com/product/fc
點(diǎn)擊此處,即可跳轉(zhuǎn) Serverless Devs~ 發(fā)布云原生技術(shù)最新資訊、匯集云原生技術(shù)最全內(nèi)容,定期舉辦云原生活動(dòng)、直播,阿里產(chǎn)品及用戶最佳實(shí)踐發(fā)布。與你并肩探索云原生技術(shù)點(diǎn)滴,分享你需要的云原生內(nèi)容。
關(guān)注【阿里巴巴云原生】公眾號(hào),獲取更多云原生實(shí)時(shí)資訊!
總結(jié)
以上是生活随笔為你收集整理的Spring Boot Serverless 实战 | Serverless 应用的监控与调试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【附赠PPT】 KubeMeet 成都站
- 下一篇: 如何快速构建服务发现的高可用能力