首頁  >  文章  >  後端開發  >  可觀察性 - 為什麼記錄很重要

可觀察性 - 為什麼記錄很重要

PHPz
PHPz原創
2024-07-17 21:57:01770瀏覽

Observability - Why logging its important

在日益複雜的數位時代,可觀察性是管理現代軟體系統的關鍵。可觀察性最重要的支柱之一是日誌記錄。讓我們探討為什麼日誌記錄如此重要以及如何充分利用它。

什麼是日誌記錄?

日誌記錄是記錄系統中活動和事件的過程。這包括各種訊息,從錯誤訊息、用戶活動到系統效能。將日誌記錄視為系統的飛機“黑盒子” - 始終記錄正在發生的事情,準備在需要時提供見解。

為什麼日誌記錄如此重要?

以下是一些可以考慮日誌為何如此重要的重點:

  1. 更快解決問題
    有了良好的日誌,開發團隊就可以確定根本原因,而無需猜測。尋找bug就像擁有一張藏寶圖!

  2. 安全改善
    日誌可以成為您偵測可疑活動的「間諜」。安全團隊可以更快地回應威脅,例如讓消防部門隨時待命。

  3. 效能分析
    透過日誌,您可以識別系統中的瓶頸。這就像您的應用程式的健康有一位私人醫生。

  4. 了解使用者行為
    使用者活動日誌提供了有關如何使用產品的寶貴見解。這就像有一個私人助理不斷觀察和報告客戶的喜好。

日誌記錄的最佳實踐

為了最大限度地發揮日誌記錄的好處,以下是可以執行的一些最佳實踐:

確定適當的日誌級別

使用這些適當的日誌等級可以幫助您快速過濾訊息,例如按緊急程度對日誌進行排序。

以下是使用Golang語言顯示不同等級日誌的範例。這裡我們使用 Logrus。

package main

import (
    "github.com/sirupsen/logrus"
)

func main() {
    log := logrus.New()
    log.SetLevel(logrus.DebugLevel)

    log.Debug("Starting app..")
    log.Info("User has successfully logged in")
    log.Warn("CPU usage exceeds 80%")
    log.Error("Failed to save data to database")
    log.Fatal("A critical error occurs, the application will stop")
}

以下是上面幾個日誌等級的解釋:

  • DEBUG:調試的詳細信息,通常僅在開發過程中啟用。
  • INFO:有關應用程式正常流程的一般資訊。
  • 警告:對於將來可能出現問題的情況,但不要停止應用程式。
  • 錯誤:導致特定功能失敗的錯誤,但應用程式仍在運行。
  • 致命:嚴重錯誤,可能導致應用程式停止。

包括相關的上下文訊息

每個日誌條目都應該提供足夠的上下文來理解發生了什麼。這可能包括:

  • 時間戳記。
  • 交易或會話 ID。
  • 使用者 ID(如果相關)。
  • 函數或模組名稱。
  • 相關輸入資料(小心敏感資料)。
  • 錯誤的堆疊追蹤

這是列印日誌時的程式碼範例,包括幫助我們追蹤的上下文資訊。

package main

import (
    "github.com/sirupsen/logrus"
    "time"
)

type UserAction struct {
    UserID    int
    Action    string
    Timestamp time.Time
}

func main() {
    log := logrus.New()
    log.SetLevel(logrus.DebugLevel)

    // Use format json
    log.SetFormatter(&logrus.JSONFormatter{})

    // Dummy data
    action := UserAction{
        UserID:    12345,
        Action:    "checkout",
        Timestamp: time.Now(),
    }

    // Print log
    log.WithFields(logrus.Fields{
        "user_id":    action.UserID,
        "action":     action.Action,
        "timestamp":  time.Now().Format(time.RFC3339),
        "session_id": generateSessionID(),
        "module":     "payment_processor",
        "ip_address": "192.168.1.100",
    }).Error("Payment failed")

}

func generateSessionID() string {
    return "sess_abc123"
}

我們可以看到,我們已經包含了幾個上下文資訊的元素,可以讓我們以後更容易追蹤。有什麼方便之處,就是我們可以根據級別來搜尋日誌,例如上面程式碼範例中的錯誤級別,也可以根據我們輸入的資訊根據時間等進行搜尋。

使用一致的格式

一致的日誌格式使解析和分析變得更容易,特別是在使用自動化工具時(關於工具,將在下面討論)。格式化也使我們更容易根據條件搜尋日誌,例如日誌等級、訊息或時間。格式範例:

[TIMESTAMP] [LEVEL] [MODULE] [MESSAGE]

或 JSON 格式,方便解析,如上面程式碼範例中的結果:

{
    "action": "checkout",
    "ip_address": "192.168.1.100",
    "level": "error",
    "module": "payment_processor",
    "msg": "Payment failed",
    "session_id": "sess_abc123",
    "time": "2024-06-26T20:59:02+07:00",
    "timestamp": "2024-06-26T20:59:02+07:00",
    "user_id": 12345
}

實作日誌輪替來管理檔案大小

日誌輪轉可防止日誌檔案太大而難以管理。這涉及:

  • 限制日誌檔案的大小。

  • 定期建立新的日誌檔案(例如每天或每週)。

  • 存檔或刪除舊日誌檔案。

  • 在 Linux 上使用 logrotate 等工具或支援輪替的日誌框架。

考慮記錄資訊的隱私和安全

安全和隱私在日誌記錄中非常重要:

  • 請勿記錄密碼或信用卡資訊等敏感資料。

  • 如有必要,封鎖或加密個人資料。

  • 確保只有授權人員才能存取日誌檔案。

  • 根據公司政策和法規實施保留政策以刪除舊日誌。

監控和分析日誌的工具

隨著系統複雜性的增加,對監控和分析日誌的複雜工具的需求也變得越來越重要。以下是一些可以幫助進行可觀察性和日誌分析的熱門工具:

  1. 格拉法納
    Grafana 是一個用於視覺化日誌資料的開源平台。這些工具可以整合到包括日誌在內的各種資料來源中。允許建立客製化的互動式儀表板。適用於指標和日誌的即時視覺化。

  2. 新遺物
    New Relic 是一體化的可觀察平台
    在一處提供日誌分析、追蹤和指標。還有人工智慧功能可以檢測異常並關聯問題。
    適合監控大型應用程式和基礎架構。

  3. 洛基
    Loki 是一個輕量級且經濟高效的日誌聚合系統。 Loki 旨在與 Grafana 良好配合
    使用基於標籤的索引,類似於 Prometheus
    非常適合已經使用 Prometheus 和 Grafana 的組織。

  4. AWS CloudWatch 日誌見解
    AWS 的這個整合日誌分析服務可以查詢和分析來自各種 AWS 服務的日誌。
    偵測 RDS 和其他資料庫服務中的慢查詢的功能
    與其他 AWS 服務輕鬆整合。

結論

日誌記錄不僅僅是一個附加功能,而且是建立可靠系統的重要組成部分。透過正確實施,日誌記錄可以成為您的超級感測器 - 提供系統操作的完整可見性,幫助預防問題發生,並在問題出現時加快解決速度。

所以,今天就開始投資良好的日誌記錄實務吧。請記住,在複雜技術的世界中,好的日誌可以成為暴風雨中的指路明燈!

如果您有其他信息,請在下面的評論欄中輸入。

閱讀參考文獻

  • Github 儲存庫

  • 應用程式日誌記錄及其重要性

  • 為什麼日誌管理很重要?

  • 2024 年 10 個可觀察性工具:功能、市場份額並選擇適合您的工具

  • 前 20 名最佳日誌分析工具和日誌分析器(優點和缺點)

以上是可觀察性 - 為什麼記錄很重要的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn