JSON 日誌& Datadog

為什麼您應該使用 JSON 來記錄

如果您今天沒有使用 JSON 日誌,您可能是依賴純文字日誌和 regex 來理解它們。一開始也許會奏效,但隨著系統的成長,它會開始破損、失去結構,而且會變得越來越糟。JSON 日誌是標準。在現代應用程式中,擁有結構化、易於解析的日誌不再是可有可無的選擇。它提供了服務間的一致性,同時仍具有彈性。

Datadog 推薦 JSON 日誌是有原因的。當日誌以有效的 JSON 釋出時,Datadog 的預處理器會自動解析您的日誌,並將其對應至許多保留屬性,以減少開銷並確保一致的欄位擷取。不需要額外的設定,因為這些保留屬性提供最相關的欄位,讓您更容易與其他系統整合、過濾記錄、有效率地搜尋,以及設定警示。重要的保留屬性包括 host、service、status、trace id、span id 及其他,這些屬性對於可觀察性及故障排除非常重要。

如何設定

根據我的經驗,在如何以最佳方式設定 JSON 日誌方面有許多資源。我使用的主要參考資料是 Datadog 的說明文件: https://docs.datadoghq.com/logs/log_collection/java/?tab=logback. 我發現這是最好的,因為 Datadog 是我們使用的主要可觀察性工具,如果發生任何問題,他們能夠更容易地排除故障。

以 Datadog 說明書為指引,我開始建立 logback-spring.xml 配置檔案。這是大部分工作發生的地方。起初,我嘗試使用各種 JSON 編碼器,並加入我認為可能有用的欄位。最後,我意識到簡單的力量:乾淨、最小化的組態更容易維護,也更不容易損壞。

<springProfile name="json-logs">

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
        </appender>

        <root level="INFO">
            <appender-ref ref="CONSOLE"/>
        </root>

在加入所需的 Logback 相依性並將此程式碼加入我的 logback-spring.xml 檔案後,最後一個主要步驟是在您的應用程式 YAML 中將「json-logs」設定為使用中的 Spring 設定檔。這可確保在整個環境中啟用 JSON 日誌,並在所有服務中一致運作。

如果正確遵循這些步驟,您應該可以尾隨日誌並查看結果。它們應該在類似的關鍵值記錄中:

{"@timestamp":"2025-1-13T13:02:27.512333-02:00","@version":"1","message":"Tomcat initialized with port 8080(http)",
"logger_name":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer","thread_name":"main","level":"INFO",
"level_value":20000,"appName":"json-logs"}  

此時,您在 Datadog 中的日誌應該是結構化的,追蹤關聯應該可以用於具有追蹤 ID 的日誌,而且您應該可以看到更詳細且一致的屬性。

常見錯誤& 建議

透過正確的設定,Datadog 中的 JSON 日誌變得可靠且更容易維護。透過移除傳統的假設和保持配置簡單,您可以獲得結構化的日誌、一致的欄位、追蹤關聯性,以及更容易的過濾和警示。JSON 日誌不僅是最佳實務,對於改善現代應用程式的可觀察性而言更是不可或缺。

關於作者

Chase Hollander
Arbory Digital 的 AEM 開發人員

擁有 AEM 經驗的敏捷認證專業人員、開發人員及顧問

在 Linkedin 上聯絡 Chase

喜歡你聽到的嗎?對適合您的產品有疑問?我們很樂意與您討論!聯絡我們

相關文章

category
AEM Technical Help
tags
number of rows
1