日誌儲存成本怎麼省?使用 Cloud Logging 監控 GKE 叢集之省錢大作戰

由於現今雲端容器化管理技術的盛行,企業往往採用Google Kubernetes Engine (GKE) 的環境來管理應用程式,而在 GKE 生產 (Production) 環境往往會產生大量的日誌檔案,要怎麼經濟實惠且有效地儲存和管理這些日誌檔案在 Pay-as-you-go (PAYG) 的雲端環境中是重要的議題。在本篇文章中將會介紹如何透過 Cloud Logging 串接到 Cloud Storage 的設定來存放 Production 環境這種不需要即時除錯的日誌檔案,並以 Standard Cloud Storage 的儲存方式為例,可以節省約 20 倍以上的日誌檔案儲存成本。

GKE 生產環境產生龐大日誌檔案

Cloud Logging 是 Google Cloud 平台的即時日誌紀錄檔管理機制分析和故障排除的重要工具。企業往往會使用 Cloud Logging 來收集和存儲 Google Cloud 各個資源的日誌紀錄檔案,以利日後做進一步的分析。隨著 Kubernetes 技術的盛行[1],如何在 GKE 的環境中做日誌檔案管理也變成一個重要的議題。

GKE 預設會在每一個節點 (Node) 上安裝一個日誌紀錄代理器 (LogAgent) [2],來收集每個容器 (Container) 和系統的日誌檔案,其收集的日誌檔包含容器化程式的標準輸入 (Standard Output) 和標準錯誤 (Standard Error) 日誌檔,Kubelet 和容器的 Runtime 日誌檔,如虛擬機器啟動程式 (VM Startup Scripts) 這種系統元件日誌檔。在一般企業的 GKE Production 環境中,往往會產生龐大的日誌檔案,如何有效且經濟實惠地保存這些日誌檔成為重要的議題。

雖然 GKE 本身也會暫時儲存系統本身的日誌檔,但這些日誌檔可能會因為某些原因而被移除,例如應用程式重新啟動使得 Pod 被移除因而導致日誌檔消失,或者系統儲存空間不夠導致新的日誌檔無法儲存等。因此,GKE 會將所有日誌檔案送往 Cloud Logging 的專用永久儲存區來做保存。

Cloud Logging 預設儲存方式產生較高儲存成本

Cloud Logging 計價方式主要分成以下兩種方式[3][4]:

(1) Logging 的儲存空間

  • 將日誌檔以串流的方式傳送到日誌檔的儲存空間作存儲,以便建立索引來提供日後查詢和分析。
  • 其存儲費用為每 GiB 是$0.5美元,而其日誌檔最多可儲存 30 天(每個月每個專案的有50 GiB 的免費額度)。

(2) Logging 的保留功能

  • 日誌記錄檔儲存超過30天時,每 GiB 每個月會酌收$0.01美元。

由於 Cloud Logging 的日誌檔案儲存費用頗高 (每 GiB 是$0.5美元),要如何經濟實惠且有效率地儲存 GKE 叢集中的龐大日誌檔案,就得針對企業的使用情境仔細斟酌。

舉例來說,對於 Production 環境中 GKE 叢集來說,將日誌記錄檔儲存在 Cloud Logging 中未必是一個好選項,因為 Production 環境中的 GKE 叢集所部屬的應用程式往往已經經過大量的測試,其應用程式運作比較穩定,不會像開發環境或測試環境中的 GKE 叢集那樣,常常有即時查看日誌紀錄檔案來除錯的需求;而且 Production 環境中的 GKE 叢集日誌紀錄檔案往往會需要能夠長期保存以供日後稽核。在這樣的情境下,將 Cloud Logging 中的日誌記錄檔導出到 Cloud Storage 來做儲存,等到有查詢需求的時候,再將日誌檔導入 BigQuery 來做查詢,反而是一個較經濟實惠的方式。

而對測試環境或者開發環境來說,因為在開發中過程往往需要一個像 Cloud Logging 這樣可以即時查看日誌檔案和輔助除錯的工具,而且開發和測試環境往往不會像 Production 環境那樣會產生大量的日誌檔案。

我們以台灣區 (asia-east1) 中 Cloud Storage 的 Standard Storage 價格[5]為例, Standard Storage 的儲存價格為每月每 GB 是$0.02美元,這個價格和 Cloud Logging 的儲存費用 (每月每 GiB 是$0.5元)相比,相對便宜很多。當然 Cloud Storage 的儲存價格會依照不同的儲存種類 (Standard、Nearline、Coldline 和 Archivce) 和區域位置 (Region、Dual-Region 和 Multi-Region) 會有不同的計價方式,但綜合來說,還是比 Cloud Logging 的費用便宜。

以下我們會針對 Production 的 GKE 叢集介紹,怎麼將 Cloud Logging 的日誌檔案導入 Cloud Storage 中。

串接 Cloud Logging 和 Cloud Storage 來降低儲存費用

建立 Cloud Storage Bucket 儲放不需即時除錯的日誌檔案

在 Cloud Storage 中根據自身的需求來建立合適的 Cloud Storage Bucket 存放日誌檔案。

  • 點選進入 Cloud Storage 服務,並且點選 Buckets。
點選進入 Cloud Storage 服務,並且點選 Buckets。
icon/enlarge
  • 接著點選 CREATE 的按鈕。
接著點選 CREATE 的按鈕。
icon/enlarge
  • 輸入擬定的 Cloud Storage Bucket 名稱: gke-log-location
輸入擬定的 Cloud Storage Bucket 名稱: gke-log-location
icon/enlarge
  • 選擇合適的日誌檔案存放區域,並按 CONTINUE。
    • 如果檔案存放僅需考慮特定區域,可選擇 Region。(在這邊以 Region 做示範)
    • 如果檔案存放僅需考慮複製資料來保持高可用性,建議選擇 Multi-region。
    • 如果檔案存放需考慮特定區域和複製資料保持高可用性,建議選擇 Dual-region。
選擇合適的日誌檔案存放區域,並按 CONTINUE。
icon/enlarge
  • 按照儲存需求來選擇 Cloud Storage 種類,並按 CONTINUE。
    • 這邊以 Standard 作為範例。
    • 如果日誌檔案需要存放 30 天以上,可選擇 Nearline。
    • 如果日誌檔案需要存放 90 天以上,可選擇 Cold。
    • 如果日誌檔案需要存放 365 天以上,可選擇 Archive。
按照儲存需求來選擇 Cloud Storage 種類,並按 CONTINUE。
icon/enlarge
  • 設置其他所需參數,並按 CREATE。
設置其他所需參數,並按 CREATE。
icon/enlarge
  • 建立 Cloud Storage Bucket。
建立 Cloud Storage Bucket。
icon/enlarge

建立 Log Sink 將 GKE 的日誌檔案導入 Cloud Storage

  • 接著點選進入 Cloud Logging 服務,點選 Log Router。
接著點選進入 Cloud Logging 服務,點選 Log Router。
icon/enlarge
  • 點選 Create Sink,來建立一個 Cloud Storage 的 Log Sink。
點選 Create Sink,來建立一個 Cloud Storage 的 Log Sink。
icon/enlarge
  • 輸入 Log Sink 名稱: gke-log-to-gcs-sink。
輸入 Log Sink 名稱: gke-log-to-gcs-sink。
icon/enlarge
  • 選擇要導出的 Sink 服務名稱: Cloud Storage bucket 和 Cloud Storage Bucket 名稱: gke-log-collection。
選擇要導出的 Sink 服務名稱: Cloud Storage bucket 和 Cloud Storage Bucket 名稱: gke-log-collection。
icon/enlarge
  • 設定要收集的 Log 服務名稱。
    • 在這邊要收集的就是位於 asia-east1 區域的 GKE 叢集(cluster1)所有Cluster、Node Pool、Node、Pod 和 Container 等相關 Log。
設定要收集的 Log 服務名稱。
icon/enlarge
  • 如果有其他要排除不收集的日誌檔案可以參照上述語法來設定 exclusion filter,接著按 CREATE SINK。
如果有其他要排除不收集的日誌檔案可以參照上述語法來設定 exclusion filter,接著按 CREATE SINK。
icon/enlarge
  • 產生 Log Sink: gke-log-gcs-sink。
產生 Log Sink: gke-log-gcs-sink。
icon/enlarge

排除預設日誌 Bucket(_default)的 GKE 日誌檔案 

  • 選取 _default 的 Log Sink,點選 More Action,選取 edit sink 做設定修改。
選取 _default 的 Log Sink,點選 More Action,選取 edit sink 做設定修改。
icon/enlarge
  • 設定 exclusion filter 來排除 GKE 的日誌檔案,並按 Update Sink 即可。
    • 在這邊要排除的就是位於 asia-east1 區域的 GKE 叢集(cluster1)所有Cluster、Node Pool、Node、Pod 和 Container 等相關 Log。
設定 exclusion filter 來排除 GKE 的日誌檔案,並按 Update Sink 即可。
icon/enlarge

驗證 Cloud Logging 和 Cloud Storage 方式是否串接成功

由於設定生效需等待 1 至 2 小時,可由下面幾個方式排判斷是否設定有生效。

  • 點選 _default 的 View sink log volume and error rate,來檢查 Cloud Logging 收集的日誌檔數目是否變少。
點選 _default 的 View sink log volume and error rate,來檢查 Cloud Logging 收集的日誌檔數目是否變少。
icon/enlarge
  • 可以發現 Cloud Logging 每小時所收集的日誌檔數目有明顯變少的趨勢。
可以發現 Cloud Logging 每小時所收集的日誌檔數目有明顯變少的趨勢。
icon/enlarge
  • 等待1 至 2 小時後,可以點選 Cloud Storage Bucket: gke-log-colleciton,觀察是否有日誌檔產生。
等待1 至 2 小時後,可以點選 Cloud Storage Bucket: gke-log-colleciton,觀察是否有日誌檔產生。
icon/enlarge
  • Cloud Storage Bucket 中有日誌檔產生。
Cloud Storage Bucket 中有日誌檔產生。
icon/enlarge

結論

在 Pay-as-you-go (PAYG) 的雲端環境中,如果想要做好 GKE 環境的日誌檔案管理就是要精打細算,而且要針對每種環境的配置需求斤斤計較。舉例來說,Cloud Logging 只存放需要即時除錯的開發測試環境日誌檔,而針對這種穩定不需要即時除錯的Production 環境,日誌檔案不須存放在 Cloud Logging 預設儲存空間中,可以使用串接 Cloud Storage 的設定,將日誌檔案儲放在較便宜的 Cloud Storage 上,提供日後稽核和備查,以達到經濟實惠且有效地儲存和管理目的。以上文中的範例所示,如果採用 Standard Cloud Storage 的儲存方式,可以有效節省約20倍以上的日誌檔案儲存成本

參考文件

  1. https://humalect.com/blog/kubernetes-statistics
  2. https://cloud.google.com/kubernetes-engine/docs/concepts/about-logs?hl=zh-cn
  3. https://cloud.google.com/stackdriver/pricing
  4. https://www.finout.io/blog/gcp-cloud-logging-pricing
  5. https://cloud.google.com/storage/pricing?hl=zh-tw

延伸閱讀:

  1. 【Cloud Next'22】邁向開放數據生態系:BigQuery 支援非結構化資料、加速第三方資料庫即時資料分析
  2. 讓生成式 AI 成為雲端助理!Google Cloud 將 Duet AI 拓展至五大領域服務

撰文者:Maygy Chang, Technical Account Manager

8 x Google Cloud 認證,1 x CKA認證。公司重要客戶專屬技術窗口,協助公司重要客戶解決雲端技術上的各種疑難雜症。

撰文者:Robby Hsieh, Solution Architect

9 x Google Cloud 認證,7 x AWS 認證,專注於雲原生產業。擅長分析客戶需求並進行技術評估,以提供最適合的雲端解決方案

訂閱 CloudMile 電子報

所有 CloudMile 最新消息、產品動態、活動資訊和特別優惠,立即掌握。