日誌 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

日誌

記錄是保持有關發生在系統中事件的數據的過程。記錄檔可能包含有關目前作業的問題、錯誤或資訊。記錄檔可分為不同類型,如下所示:

  • 事件日誌

  • 伺服器記錄

  • 系統日誌

  • 授權和存取記錄

  • 稽核日誌

開發人員可以在日誌中搜索特定的錯誤代碼或模式,根據特定字段對其進行過濾,或將其安全存檔以備 future 分析。日誌可幫助開發人員針對性能問題執行根本原因分析,並在系統組件之間進行關聯。

建立有效的記錄解決方案需要應用程式和基礎架構團隊之間的密切協調 除非有可調整的記錄基礎結構支援使用案例,例如剖析、篩選、緩衝和記錄檔的關聯性,否則應用程式記錄檔並無用處。您可以簡化常見的使用案例,例如產生關聯識別碼、業務關鍵方法的記錄執行時間,以及定義記錄模式。

應用團隊

應用程式開發人員必須確保產生的記錄遵循記錄最佳做法。最佳做法包括:

  • 產生關聯 ID 以追蹤唯一要求

  • 記錄業務關鍵方法所花費的時間

  • 在適當的記錄層級記錄

  • 共享一個通用的日誌庫

當您設計與不同微服務互動的應用程式時,請使用這些記錄設計原則來簡化後端的篩選和記錄擷取作業。

產生關聯 ID 以追蹤唯一要求

當應用程式收到要求時,它可以檢查相互關聯 ID 是否已存在於標頭中。如果 ID 不存在,應用程序應該生成一個 ID。例如,應用程式負載平衡器會新增名為的標頭X-Amzn-Trace-Id。應用程式可以使用標頭,將負載平衡器的要求與應用程式相關聯。同樣地,traceId如果呼叫相依的微服務,應用程式應該注入,以便要求流程中不同元件產生的記錄檔是相互關聯的。

記錄業務關鍵方法所花費的時間

當應用程序接收到一個請求,它與不同的組件進行交互。應用程式應以定義的模式記錄業務關鍵方法所花費的時間。這可以更容易地解析後端的日誌。它還可以幫助您從日誌中生成有用的見解。您可以使用諸如面向方面的編程(AOP)之類的方法來生成這樣的日誌,以便您可以將日誌記錄問題與業務邏輯分開。

在適當的記錄層級記錄

應用程序應該寫入具有有用信息量的日誌。使用記錄層級,依嚴重性對事件進行分類。例如,對需要調查的重要事件使用WARNINGERROR級別。用INFODEBUG於詳細追蹤和大量事件。設定記錄處理常式,以僅擷取生產中所需的層級。在INFO層級產生太多記錄是沒有幫助的,它會增加後端基礎結構的壓力。 DEBUG日誌記錄可能很有用,但應謹慎使用。使用DEBUG記錄檔可能會產生大量資料,因此不建議在效能測試環境中使用。

共享一個通用的日誌庫

應用程序團隊應該使用一個通用的日誌庫,例如 適用於 Java 的 AWS SDK,具有預定義的通用日誌記錄模式,開發人員可以用作其項目中的依賴關係。

基建團隊

DevOps 工程師在後端過濾和擷取日誌時,可以使用下列日誌設計原則來減少工作量。基礎架構小組必須設定並支援下列資源。

日誌代理

日誌代理(日誌寄件人)是一種從一個位置讀取日誌並將其發送到另一個位置的程序。記錄代理程式可用來讀取儲存在電腦上的記錄檔,並將記錄事件上傳至後端以進行集中化。

記錄檔是非結構化資料,必須先結構化,才能從中取得有意義的見解。記錄檔代理程式會使用剖析器來讀取記錄陳述式,並擷取相關欄位,例如時間戳記、記錄層級和服務名稱,並將該資料結構成 JSON 格式。在邊緣具有輕量級日誌代理程式很有用,因為它會導致較少的資源使用率。記錄代理程式可以直接推送至後端,也可以使用將資料推送至後端的中繼記錄轉寄站。使用記錄轉送器會從來源的記錄代理程式卸載工作。

日誌解析器

日誌解析器將非結構化日誌轉換為結構化日誌。記錄代理程式剖析器也會透過新增中繼資料來豐富記錄檔。數據的數據解析可以在源(應用程序端)完成,也可以集中完成。用於存儲日誌的結構描述應該是可擴展的,以便您可以添加新字段。我們建議使用標準日誌格式,例如 JSON。不過,在某些情況下,記錄檔必須轉換成 JSON 格式,才能更好地搜尋。撰寫正確的剖析器運算式可以有效率地轉換

日誌後端

Logs 後端服務會從各種來源收集、擷取和視覺化記錄資料。記錄代理程式可以直接寫入後端或使用中介記錄轉寄站。在性能測試時,請務必存儲日誌,以便日後可以搜索它們。為每個應用程序分別將日誌存儲在後端。例如,針對應用程式使用專用索引,並使用索引模式來搜尋散佈在不同相關應用程式的記錄檔。我們建議您儲存至少 7 天的資料以進行記錄搜尋。但是,將資料儲存較長的時間可能會導致不必要的儲存成本。因為在效能測試期間會產生大量的記錄檔,因此記錄基礎結構要擴展和調整記錄後端的大小相當重要。

日誌可視化

若要從應用程式記錄中取得有意義且可行的洞察,請使用專用的視覺化工具來處理原始記錄資料並將其轉換為圖形表示。圖表、圖形和儀表板等視覺效果有助於發現趨勢、模式和異常情況,這些趨勢、模式和異常情況在查看原始日誌時可能不明顯。

使用視覺化工具的主要優點包括能夠跨多個系統和應用程式關聯資料,以識別相依性和瓶頸。互動式儀表板支援以不同粒度層級向下鑽研資料,以疑難排解問題或發現使用趨勢。專業的資料視覺化平台提供諸如分析、警示和資料共用等功能,可增強監控和分析。

透過在應用程式記錄上運用資料視覺化的強大功能,開發和營運團隊可以深入瞭解系統和應用程式效能。所得出的見解可用於多種用途,包括最佳化效率、改善使用者體驗、增強安全性和容量規劃。最終結果是針對各種利益相關者量身定制的儀表板,提供將日誌數據匯總為可行且有見地的信息的 at-a-glance 視圖。

自動化記錄基礎架構

因為不同的應用程式有不同的需求,所以記錄基礎結構的安裝和作業自動化是非常重要的。使用基礎結構即程式碼 (IaC) 工具來佈建記錄基礎結構的後端。然後,您可以將記錄基礎結構佈建為共用服務,或作為特定應用程式的獨立自訂部署佈建。

我們建議開發人員使用持續交付 (CD) 管道來自動執行下列作業:

  • 視需求部署記錄基礎結構,並在不需要時將其拆除。

  • 跨不同目標部署記錄代理程式。

  • 部署日誌解析器和轉發器配置。

  • 部署應用程式儀表板

記錄工具

AWS 提供原生記錄、警示和儀表板服務。以下是流行 AWS 服務 的日誌記錄資源: