記錄檔 (log) 在處理故障排除時相當重要。提到記錄檔,Google Kubernetes Engine (GKE) 整合了 Google Cloud 的記錄檔服務 Cloud Logging。如果您從未調查過你的 GKE 記錄檔或 Cloud Logging,歡迎閱讀這篇文章,本文介紹 Cloud Logging 在 GKE 中的運作方式,以及它如何配置、查找,以及如何與 Cloud Logging 中儲存的 GKE 記錄檔進行有效的互動。
你的 GKE log 是如何進到 Cloud Logging 的
在 GKE 叢集中執行的任何容器化程式碼(不論是您的程式碼或軟體套件)通常會生成各種記錄檔。這些紀錄檔通常會有標準的寫法,output (‘stdout’) 和 error ‘stderr’,而且包含錯誤、資訊和除錯訊息。
當您在 Google Cloud 中設置新的 GKE 叢集時,系統和應用程式的記錄檔預設都是啟用的。在 GKE node 上會自動部署和管理一個專用代理以收集這些記錄檔、添加有用於容器的元資料,而後 pod 和叢集將寄送這些紀錄檔至 Cloud Logging。系統記錄檔和您的應用程式記錄檔均被提取並儲存在 Cloud Logging中,而無需其他配置。
(延伸閱讀:Google Cloud 公告 2021/8/3 起 GKE system logs 收費調整通知暨試算方法教學)
在 Cloud Logging 中找到您的 GKE log
想找到這些在 Cloud Logging 中的記錄檔,您只需要用 GKE 相關的 Kubernetes 資源來過濾您的紀錄檔,您可以點選此連結,或在 log viewer 中執行下列查詢語法。
resource.type=(“k8s_container” OR “container” OR “k8s_cluster” OR “gke_cluster” OR “gke_nodepool” OR “k8s_node”)
如果在序列中沒有回傳任何記錄檔,這時您就應該檢查為何無法產生或無法收集記錄檔到 Cloud Logging。
確保您的 GKE log 正常進行收集
如上所述,一旦您建立一個 GKE 叢集,系統及應用程式的 log 都會被預設為自動收集。您可以在創建叢集時或通過更新叢集設定,來更新記錄檔收集方式的設定。
如果您在 Cloud Logging 未看到任何記錄檔,可以確認 GKE 與 Cloud Logging 的整合是否配置適合。參考這些步驟以檢查叢集配置。
如果 GKE 整合沒有啟動,您可以透過編輯 Google Cloud Console 中的叢集或使用 gcloud 容器叢集更新指令來為叢集啟用記錄檔收集。
如果您已經啟用 GKE 與Cloud Logging 及 Cloud Monitoring 的整合,但仍未看見任何 GKE 記錄檔,您可檢查記錄檔是否被排除。可能有增加 Logging exclusions 去排除所有或特定 GKE 的記錄檔,提取至 Cloud Logging。通過調整這些排除設定,您可以將所需的 GKE 記錄檔,提取至 Cloud Logging 中。
從 GKE 1.15.7 版本開始,您可以將 GKE 叢集只單獨擷取系統記錄檔。如果您已啟用與 Cloud Logging 及 Cloud Monitoring 的 GKE 整合卻在 Cloud Logging 只看見系統紀錄檔,您可檢查您是否選擇了這個選項。檢查應用程式記錄檔收集是啟用還是關閉,然後啟用應用程式記錄檔收集,可以依照這些步驟進行啟用。
讓您的 GKE log 使用更有效率
擁有結構化的紀錄檔可以幫助您創建更有效的查詢。使用 Cloud Logging,對記錄檔進行結構化代表它可以解析並更輕鬆地為應用程式 JSON 物件構建查詢。如果您的記錄檔在其訊息中包含 JSON 物件,則 GKE 會自動在其記檔訊息中添加結構。作為開發人員,您還可以在 JSON 物件中添加特定元素,當儲存到 Cloud Logging 時,Cloud Logging 將自動映射到相應的區段。這對於設置記錄檔訊息的嚴重性、traceId 或標籤很實用。
將追蹤訊息與記錄檔訊息的結合使用,是維護應用程式運行狀況和性能的另一種常見做法。追蹤為應用程式中的每個 transaction 提供了有價值的內文,從而使故障排除工作變得更加有效率,尤其是在分佈式應用程式中。如果使用 Cloud Trace(或任何其他追蹤解決方案)監視分佈式應用程式的追蹤,那麼,讓記錄檔更實用的另一種方法是將追蹤 ID 包含在記錄檔訊息內。藉由此連接,您可以在對應用程式進行故障排除時直接從記錄檔訊息連接到 Cloud Trace。
降低 GKE log 的使用率
GKE 會同時生成系統及應用程式的記錄檔。儘管有用,但有時記錄檔的量可能比您預期的還要高。例如,Kubernetes 生成的某些記錄檔訊息(例如節點上的 kublet 記錄檔)可能非常冗長、重複性也高。如果您出於故障排除的目的操作生產叢集,那麼這些記錄檔會很有用,但在單純開發環境中可能沒有用。如果您覺得記錄檔太多,可以將「記錄檔排除」與特定的篩選器一起使用,以排除您可能不會用到的記錄檔訊息。請謹慎考慮排除記錄檔,因為通常在以後進行問題排查時才需要記錄檔。排除一些重複的記錄檔(或排除某些百分比的記錄檔)可以減少噪音雜訊。
Kubernetes 生成許多不同的記錄檔,Cloud Logging 可以幫助您更進一步了解他們。想了解更多有關 GKE 應用程式操作 Cloud Logging 的細節,歡迎持續追蹤 iKala Cloud 的部落格!
(延伸閱讀:開發人員小訣竅!簡化、加速你的 Google Kubernetes Engine 開發)
(本文翻譯改編自 Google Cloud。)