iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
Software Development

軟體架構備忘錄系列 第 12

Day 12 系統架構 - Log分析與警示 (知識點062~066)

  • 分享至 

  • xImage
  •  

思考的問題

系統在運行的過程中時時都在產生Log

  • 應該要保留那些Log?
  • Log需要保留那些資訊?
  • 如何分析Log?
  • 如何針對Log進行監控並自動進行後續處理呢?

可收集的Log

描述

系統運行就會有各式各樣的Log,常見的Log來源包含:應用程式、伺服器、網路、授權與認證、資料庫。

常見Log來源

  • 應用程式Log
    • 錯誤紀錄:紀錄應用程式的錯誤資訊,包含時間、行數、錯誤資訊,以供後續系統改善追蹤
    • 使用者使用紀錄:藉由了解使用者使用情況,包含訪問頁面、點擊資訊、停留時間。以優化系統功能。並精準推薦商品、功能以增進使用者滿意度。
  • 伺服器Log:
    • CPU、記憶體等系統負載資訊,用於追蹤伺服器運作是否有異常情況
    • 特殊指令執行情況:紀錄包含SUDO等高權限指令的執行情況,以留存系統相關異動紀錄
  • 網路存取紀錄Log
    • 留存IP、網址、Port、Request、Response等紀錄,後續分析是否有異常滲透行為
  • 授權與認證Log:
    • 登入紀錄:紀錄各帳號的登入紀錄、密碼輸入錯誤情況。以供後續追蹤是否有安全性異常問題
    • 使用者角色變更紀錄:追蹤使用者權限改變情況,當高權限角色授權情形發生改變,應該立即通知相關人員,避免滲透問題。
  • 資料庫Log:
    • 資料庫物件異動紀錄:追蹤資料庫物件是由誰進行變更
    • 高耗能查詢語法紀錄:為避免特定語法因未正確優化,而對資料庫負載造成重大影響。應追蹤高耗能查詢語法的紀錄,後續並需要追蹤與優化這些語法。
    • 資料庫資源使用紀錄:追蹤資料庫的UNDO等記憶體空間使用情況,避免因大量資料異動造成資料庫負載過重。

Log留存資訊

描述

自行撰寫的應用程式中,會有許多自定義的Log產生。在產生Log的同時,需要了解應該記錄那些資訊。

常見紀錄資訊

  • 時間:紀錄Log發生的時間,後續才能夠依據時間篩選Log。在Debug層級若紀錄進入的Method,可依此判斷Method執行時間以推估效能瓶頸。
  • 發生位置:知道Log發生的程式碼位置,以在錯誤發生時,追蹤是在哪一個地方發生錯誤。
  • Thread ID:Web Server通常使用一個Thread服務單一使用者請求,因此使用Thread ID可辨識同一個請求的上下文紀錄。
  • 發生上下文與細節:紀錄Method傳入值、回傳值,幫助了解上下文。
  • 呼叫堆疊:錯誤發生時,記錄錯誤的呼叫堆疊,以確認底層錯誤觸發位置。
  • Log層級:區分目前Log的層級,後續可在不同環境切換紀錄的Log層級

區分Log層級的原因

  • 減少系統負擔:由於正式環境有大量使用者,為避免佔用過多系統資源。正式環境只紀錄重要的Log。
  • 便於除錯:在測試環境紀錄較明細的Log,以便於除錯
  • 便於查詢問題:例如,錯誤發生時,前後文應該也有相關錯誤訊息。

常見Log層級

  • Debug: 紀錄測試或除錯時所需資訊,例如:變數內容、經過的Method。
  • Info:追蹤系統狀態,紀錄已執行較重要的動作,例如:程式與功能的啟動與關閉、關鍵動作完成、定期紀錄狀態
  • Warn:紀錄未造成錯誤,但是需要注意的事項。例如:負載過高、參數錯誤、登入失敗、執行高敏感性動作
  • Error:錯誤資訊,紀錄錯誤描述、呼叫堆疊。例如:檔案讀取失敗、資料庫無法連線

Log收集

描述

由於Log發生於各終端伺服器或設備,為便於集中分析與監控,應於各環境收集Log並傳送到一個Log分析中心。

常見Log收集模式

  • 大數據Log資料庫:由於Log發生頻率較高、較少需要Transaction、紀錄格式多變。因此通常使用一個Big Data資料庫收集Log。
  • Log收集代理程式:於各環境安裝Agent程式收集Log
  • 定期呼叫服務,取得系統資訊:例如:定期呼叫資料庫,以取得資料庫負載資訊
  • 按照Log種類與層級,定義保存期限,以節省系統資源

Log清洗與轉換中心:將Log轉換為一致的格式

  • Log過濾:排除重複、不重要的Log,以減少儲存成本
  • 格式統一:將日期、性能資料 轉換為一致格式
  • 附加資料:發生的主機、地區等資訊
  • Log合併與拆分:依需求合併或拆分Log,便於後續查詢與分析資料。
  • 緩存Log:避免因同時發生過多Log,而無法順利寫入資料庫的情況

Log收集合規性

  • 收集使用者資料Log前,需要經過使用者同意,以符合GDPR等要求。
  • 於清洗與轉換中心篩選,排除或將個人資料去識別化
  • 基於監管要求,需保留一定層級以上的Log,並自動觸發後續檢視流程。

Log分析平台

描述

建置Log分析平台,於平台上集中分析各伺服器、設備所傳來的Log。

重要功能

  • Log分析:平台會提供自定義的Log查詢語法,以對儲存在大數據資料庫的Log進行查詢
  • 視圖建置:針對各重要設備、環境等,建置各種視角的Chart圖表檢視,以方便即時觀看各設備的目前動態成長狀況,例如:CPU、記憶體用量、目前使用者數量、網路流量等
  • 產生報告:可以自定義報告格式,定期提供系統資訊報告給系統管理人員或稽核單位
  • 即時監控:儲存查詢條件後,定時執行Log查詢,當有特殊事件發生時,進行後續處理。

自動回應Log事件

描述

在Log分析平台上根據設定的條件,自動觸發對應流程。例如:異常事件發生時,通知系統管理人員。

考慮項目

  • 檢查標的:文字Log是否有特定字串出現、數字Log 的平均值、最大值 等是否超過警示值
  • 檢查頻率:要多頻繁進行檢查? 每分鐘、每小時、每天。這取決於事情的嚴重度,以及使用者需要快進行處理。
  • 通知方式:可選擇電子郵件、SMS、自動語音電話 等方式進行通知
  • 自動回應:可自動呼叫Web API,或自動進行系統修復
  • 通知層級:依據事件嚴重度,選擇適當的通知方式及對象。避免非重要事件也廣發通知,這會造成接收者無法判斷是否需要介入處理。
  • 紀錄與稽核機制:因合規性需求,在Alert發生後自動記錄於系統,後續於系統中追蹤處理情況

上一篇
Day 11 系統架構 - 分層架構 (知識點054~061)
下一篇
Day 13 程式架構 - SOLID原則 (知識點067~071)
系列文
軟體架構備忘錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言