Systemd日誌管理服務:Journald以及重要配置選項

Journaldsystemd引入的用於收集和存儲日誌數據的系統服務。它試圖使系統管理員可以在越來越多的日誌消息中更輕鬆地找到有趣且相關的信息。爲了實現此目標,日記中的主要更改之一是用爲日誌消息優化的特殊文件格式替換簡單的純文本日誌文件。這種文件格式使系統管理員可以更有效地訪問相關消息。它還爲單個系統帶來了數據庫驅動的集中日誌記錄實現的某些功能。

概覽systemd-journald系統

Journald系統主要由三個主要的系統日記服務組件組成:

  • 守護程序:systemd日誌服務由systemd-journald守護程序處理。
  • 配置文件:日誌服務的配置在/etc/systemd/journald.conf裏面設置。
  • 日誌搜索程序:用於搜索日記日誌文件的程序是journalctl
    本文主要介紹systemd-journald日誌相關的重要配置選項:主要包括systemd-journald logrotate和存儲類型選擇功能。

Journald支持的不同類型的存儲

我們可以通過修改/etc/systemd/journald.conf文件控制存儲類型值,在[Journal]字符串下面可以修改存儲類型。

[Journal]
#Storage=auto

Storage支持的值爲volatilepersistentautonone,默認是auto,所有值的含義如下

  • 如果爲volatile,則日誌數據將僅存儲在內存中,即在/run/log/journal目錄下(根據需要創建)。
  • 如果是persistent,則數據將會存儲在磁盤上,即/var/log/journal目錄下,並且在早期引導階段磁盤不可寫的時候把數據保存到/run/log/journal目錄下。
  • auto值意味着把日誌數據存儲在/var/log/journal/目錄中。但是該目錄必須已經存在並且設置了適當的權限。如果不存在,則日記數據將存儲在易失性/run/log/journal/目錄中,並且在系統關閉時會刪除該數據。
  • none關閉所有存儲,所有接收到的日誌數據將被丟棄。

對日誌文件執行logrotate

systemd-journald日誌文件的logrotate將基於以下值執行:

#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month

這些設置將會限制日誌文件的大小上限。 以System開頭的選項用於限制磁盤使用量, 也就是 /var/log/journal 的使用量。 以Runtime開頭的選項用於限制內存使用量, 也就是 /run/log/journal 的使用量。

  • RuntimeMaxUse/SystemMaxUse= 控制日誌最大可使用多少磁盤空間,然後對日誌文件執行systemd-journald logrotate。默認爲分配給節點的總物理內存的10%
  • RuntimeKeepFree/SystemKeepFree= 控制systemd-journald將爲其他用途保留多少磁盤空間,之後將對日誌文件執行systemd-journald logrotate。默認爲分配給節點的總物理內存的15%
  • SystemMaxFileSize=/RuntimeMaxFileSize= 限制單個日誌文件的最大體積, 到達此限制後日志文件將會自動滾動。 默認值是對應的 SystemMaxUse=/RuntimeMaxUse= 值的1/8 , 這也意味着日誌滾動 默認保留7個歷史文件。
  • SystemMaxFiles/RuntimeMaxFiles= 限制最多允許同時存在多少個日誌文件, 超出此限制後, 最老的日誌文件將被刪除, 而當前的活動日誌文件 則不受影響。 默認值爲100個。
  • MaxRetentionSec=日誌滾動的時間間隔。通常並不需要使用基於時間的日誌滾動策略, 因爲由SystemMaxFileSize/RuntimeMaxFileSize= 控制的基於文件大小的日誌滾動策略已經可以確保日誌文件的大小不會超標。 默認值是一個月, 設爲零表示禁用基於時間的日誌滾動策略。
  • MaxRetentionSec=日誌文件的最大保留期限。 當日志文件的最後修改時間(mtime)與當前時間之差,大於此處設置的值時,日誌文件將會被刪除。 通常並不需要使用基於時間的日誌刪除策略。

如果我們檢查systemd-journald的狀態,那麼我們可以看到它的報告日誌已輪換:

$ systemctl status systemd-journald
● systemd-journald.service - Journal Service
   Loaded: loaded (/lib/systemd/system/systemd-journald.service; static; vendor preset: enabled)
   Active: active (running) since Sat 2019-11-23 08:34:43 CST; 3 months 14 days ago
     Docs: man:systemd-journald.service(8)
           man:journald.conf(5)
 Main PID: 404 (systemd-journal)
   Status: "Processing requests..."
    Tasks: 1 (limit: 9484)
   CGroup: /system.slice/systemd-journald.service
           └─404 /lib/systemd/systemd-journald

Nov 23 08:34:43 ubuntu systemd-journald[404]: Journal started
Nov 23 08:34:43 ubuntu systemd-journald[404]: Runtime journal (/run/log/journal/0bc1c3fec0b84c47ac1b0ea61a9db220) is 8.0M, max 79.5M, 71.5M free.
Nov 23 08:34:43 ubuntu systemd-journald[404]: Time spent on flushing to /var is 46.023ms for 1754 entries.
Nov 23 08:34:43 ubuntu systemd-journald[404]: System journal (/var/log/journal/0bc1c3fec0b84c47ac1b0ea61a9db220) is 504.0M, max 4.0G, 3.5G free.
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章