docker監控工具,SpringBoot Serverless 實戰 | 監控調試

 2023-10-21 阅读 33 评论 0

摘要:SpringBoot 是基于 Java Spring 框架的套件,它預裝了 Spring 的一系列組件,讓開發者只需要很少的配置就可以創建獨立運行的應用程序。在云原生的世界,有大量的平臺可以運行 SpringBoot 應用,例如虛擬機,容器等。但其中最有吸引力的,

SpringBoot 是基于 Java Spring 框架的套件,它預裝了 Spring 的一系列組件,讓開發者只需要很少的配置就可以創建獨立運行的應用程序。在云原生的世界,有大量的平臺可以運行 SpringBoot 應用,例如虛擬機,容器等。但其中最有吸引力的,是以 Serverless 的方式運行 SpringBoot 應用。我將通過一系列文章,從架構,部署,監控、性能、安全等5個方面來分析 Serverless 平臺運行 SpringBoot 應用的優劣。為了讓分析更有代表性,我選擇了 github 上 star 數超過 50k 的電商應用 mall 作為示例。通過“SpringBoot Serverless 實戰 - 部署”這篇文章,相信大家已經感受到 Serverless 應用上線的便捷。這是系列文章的第三篇, 向大家展示如何監控和調試 Serverless 應用。

實時日志

對運行在遠端云平臺上的應用而言,日志是調試的主要手段。分布式應用下有多個實例,日志的收集和分析是很有挑戰的。雖然有很多成熟的開源產品,但要搭建和持續運維這些軟件,成本不小。函數計算內置了對日志收集/分析的完整支持。用戶只需要在應用邏輯中輸出日志,這些日子被自動收集,并可以實時查看,通過多種方式聚合,查詢。

在之前的文章中,我們通過 Serverless Devs 工具已經為應用自動創建創建了日志倉庫,可以在函數計算控制臺查看請求,應用級別的日志,也可使用 SQL 語言進行高級查詢。除此之外,Serverless Devs 工具還提供了實時日志功能,對于應用調試非常有幫助。

docker監控工具,在項目根目錄下,即 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 應用發送請求,就能看到對應的請求處理日志輸出。

java線程監控工具。

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

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

指標多維查詢展示

除了 Serverless Devs 的命令行工具,用戶也可以在函數計算控制臺上從函數、實例、請求等多個維度查看日志。

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

java實現實時監控、如下圖所示,請求列表展示了請求的執行情況,包括成功/失敗,是在什么函數版本上執行的,執行時長,內存用量,在哪個實例上執行等等。也可以方便的查詢請求相關的日志。

下圖展示了實例維度的信息。除了指標,用戶也可以到滾動到頁面下方,查看對應的實例列表,以及登錄到實例上執行相關的操作。

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

通過函數計算平臺提供的日志收集和查詢能力,用戶的開發流程被無縫銜接起來。修改代碼,使用 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 開發實踐者最大的兩個痛點。 image.png ?

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

更多內容關注 Serverless 微信公眾號(ID:serverlessdevs),匯集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,用戶最佳實踐。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/158341.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息