1. 程式人生 > 其它 >Spring Boot Serverless 實戰 | Serverless 應用的監控與除錯

Spring Boot Serverless 實戰 | Serverless 應用的監控與除錯

作者:西流|阿里雲函式計算專家

導讀:Spring Boot 是基於 Java Spring 框架的套件,它預裝了 Spring 的一系列元件,讓開發者只需要很少的配置就可以建立獨立執行的應用程式。在雲原生的環境中,有大量的平臺可以執行 Spring Boot 應用,例如虛擬機器、容器等。但其中最有吸引力的,是以 Serverless 的方式執行 Spring Boot 應用。

我將通過一系列文章,從架構,部署,監控、效能、安全等 5 個方面來分析 Serverless 平臺執行 Spring Boot 應用的優劣。為了讓分析更有代表性,我選擇了 Github 上 star 數超過 50k 的電商應用 mall 作為示例。通過上一篇《

Spring Boot Serverless 實戰 | 部署篇》,相信大家已經感受到 Serverless 應用上線的便捷。這是該系列文章的第三篇,本文將向大家展示怎樣監控、除錯 Serverless 應用。

實時日誌

對執行在遠端雲平臺上的應用而言,日誌是除錯的主要手段。分散式應用下有多個例項,日誌的收集和分析是很有挑戰性的。雖然有很多成熟的開源產品,但要搭建和持續運維這些軟體,成本並不小。函式計算內建了對日誌收集/分析的完整支援。使用者只需要在應用邏輯中輸出日誌,這些日誌便可被自動收集,通過多種方式聚合,查詢,並支援實時檢視。

在前面的文章中,我們通過 Serverless Devs 工具,已經為應用自動建立建立了日誌倉庫,可以在函式計算控制檯檢視請求,應用級別的日誌,也可使用 SQL 語言進行高階查詢。除此之外,Serverless Devs 工具還提供了實時日誌功能,對於應用除錯非常有幫助。

在專案根目錄下,即 s.yaml 所在的目錄,執行下面的命令,將輸出 s.yaml 中定義的所有服務的日誌。

sudo -E s logs

使用者也可檢視指定服務的日誌。

sudo -E s mall-admin logs

通過 -t 引數,使用者也可以進入觀察模式實時檢視日誌。

sudo -E s mall-admin logs -t

此時 Serverless Devs 工具會實時監聽 mall-admin 應用下所有例項的日誌,將新產生的日誌實時展示。此後,當我們通過瀏覽器或者 curl 等方式給 mall-admin 應用傳送請求,就能看到對應的請求處理日誌輸出。

Serverless Devs 也支援根據關鍵詞查詢日誌。比如我們可以執行下面的命令,檢視 mall-admin 應用 ERROR 級別的日誌。

s mall-admin logs -t --keyword=ERROR

指標多維查詢展示

除了 Serverless Devs 的命令列工具,使用者也可以在函式計算控制檯上從函式、例項、請求等多個維度檢視日誌。

以 mall-admin 為例,在函式計算控制檯左側導航欄,點選 “服務及函式”,選擇 mall-admin 服務,再選擇該服務下的同名函式,進入 mall-admin 函式詳情頁。點選監控指標標籤頁。

如下圖所示,請求列表展示了請求的執行情況,包括成功/失敗,是在什麼函式版本上執行的,執行時長,記憶體用量,在哪個例項上執行等等。也可以方便地查詢請求相關的日誌。

下圖展示了例項維度的資訊。除了指標,使用者也可以到滾動到頁面下方,檢視對應的例項列表,以及登入到例項上執行相關的操作。

注意:函式計算的按量例項完全由系統管理,例項在閒置一段時間後就會被系統回收。被回收的例項不再被使用,不能登入。在下圖中以灰色顯示。


通過函式計算平臺提供的日誌收集和查詢能力,使用者的開發流程被無縫銜接起來。修改程式碼,使用 Serverless Devs 工具部署應用,檢視日誌,整個流程絲般順滑。

本地除錯

在將應用部署到雲平臺之前,我們通常希望能在本地部署應用,進行除錯。Serverless Devs 工具提供了本地執行應用的功能。

在專案根目錄(s.yaml 所在目錄),執行命令,即可啟動對應的服務。auto 引數是指自動為例項生成和 Web 框架相容的測試域名。例如執行下述命令:

sudo -E s mall-admin local start auto

工具會在本地啟動函式例項,並提供一個可供呼叫的 url。這樣我們可以在本地除錯 Web 應用,提高效率。

注意:每次啟動本地例項,監聽埠是隨機生成的。

端雲聯調

很多時候,構成應用的微服務/函式需要和其他服務相互呼叫。除了在本地進行簡單的單元測試,聯調或者整合測試必須要把程式碼部署到雲端,這樣的方式使得開發除錯的流程比較長,雲端的複雜環境也增大了問題診斷的難度。比如:

  • 要平遷原有的應用,函式例項需要訪問雲端環境中的其他服務,遇到例項啟動不起來時,該怎麼排查原因?

  • 應用採用微服務架構,涉及到多個服務。能否在原生代碼開發完成後快速進行端對端測試?

  • 事件驅動的應用,通過事件源觸發函式,環節多,鏈路長,能不能在本地快速測試整個鏈路?

  • ……

為了解決上述問題,Serverless Devs 提供了端雲聯調功能。開發者通過端雲聯調能在本地啟動例項,和雲端環境無縫連通,快速進行測試和問題除錯。端雲聯調能幫助開發者:

1、變更程式碼,實時檢視結果,除錯迭代的閉環最短。

2、能夠複用本地豐富的開發除錯工具,效率最高。

端雲聯調在本地開發機和雲端應用的 VPC 環境間建立一條安全的隧道連線。訪問雲端應用的流量將自動轉發到本地開發機上;同時本地例項對外訪問的網路流量也被自動轉發到雲端應用的 VPC 環境中。比如在本地例項訪問雲端的 RDS 資料庫例項,傳統方式開發者只能放開 RDS 例項的公網訪問。而使用端雲聯調,不需要任何配置的改變,可以直接以內網的方式訪問 RDS 例項。

以 mall 應用為例,整個應用由 mall-admin-web,mall-admin,mall-portal,mall-search 等多個服務構成。服務之間有上下游依賴,比如 mall-admin-web 會向下遊的 mall-admin 服務傳送請求。

假設我們已經在測試環境部署了一整套 mall 應用的服務,現在想在開發機全鏈路除錯 mall-admin 服務,需要把 mall-admin-web 等整套服務和資料庫都部署到開發機,或者通過公網與雲端 VPC 內的服務和資料庫互動,這是非常繁瑣甚至不現實的。端雲聯調能讓我們在本地開發機環境啟動 mall-admin 服務的例項,安全的與雲端 VPC 環境的其他服務和資料庫無縫互動。使用者不需要做任何設定。

首先在 s.yaml 所在的目錄執行下述命令,針對 mall-admin 服務啟動端雲聯調。

sudo -E s mall-admin proxied setup

然後在控制檯訪問 mall-admin-web 應用,可以看到相關的請求已經被轉發到了本地的 mall-admin 函式例項上。而且本地例項可以無縫的訪問雲端 VPC 內的資料庫或者其他服務。

注意:當使用了端雲聯調後,所有的流量都會發送到本地的例項上。要讓流量恢復到函式計算上的例項,需要執行 s deploy 重新部署相關的函式。

總結

從下圖的兩個報告中, 我們可以看出, 在 Serverless 領域, 除錯和可觀測一直是 Serverless 開發實踐者最大的兩個痛點。

函式計算這個 Serverless 產品始終踐行開發者第一的理念, 在除錯和可觀測方面探索和落地走在所有云廠商的前面, 在除錯方面,Serverless Devs 工具支援本地除錯、端雲聯調甚至是遠端除錯;而在可觀測方面, 推出了其他廠商不具備的秒級監控、例項指標以及例項登入等,極大提高了 Serverless 開發者的工作效率和幸福感, Server Less, Value More!

相關連結

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)函式計算:
https://www.aliyun.com/product/fc

點選此處,即可跳轉 Serverless Devs~
釋出雲原生技術最新資訊、彙集雲原生技術最全內容,定期舉辦雲原生活動、直播,阿里產品及使用者最佳實踐釋出。與你並肩探索雲原生技術點滴,分享你需要的雲原生內容。

關注【阿里巴巴雲原生】公眾號,獲取更多雲原生實時資訊!