系統日誌輪轉

一、什麼是系統日誌

記錄系統活動信息有幾個文件,他們分別記錄了不同的信息。

例如:何時、何地 (來源 IP)、何人 (賬戶或者服務名稱)、做了什麼動作 。

換句話說就是:記錄系統在什麼時候由哪個程序做了什麼樣的行爲時,發生了何種的事件等等。

二、日誌的重要性

其實,不止系統有日誌,在系統上運行的很多應用程序(軟件) 都有自己的日誌記錄。比如 MySQL 默認的日誌是 /var/log/mysqld.log

這些日誌是我們排除的首要入手點,假如系統或者服務出現了錯誤,要第一時間分析日誌中的報錯信息。而不是去到網上搜索報錯信息。因爲大部分時候,一個報錯信息,有可能會有多種情況導致,所以要結合自己的系統環境分析具體的情況。

三、常用的系統日誌

  • /var/log/messages

這個文件相當的重要,幾乎系統發生的錯誤訊息 (或者是重要的信息) 都會記錄在這個文件中; 如果系統發生莫名的錯誤時,這個文件是應該首先查詢的。

  • /var/log/secure

基本上,只要牽涉到“需要輸入帳號密碼”的軟件,那麼當登陸時 (不管登陸正確或錯誤) 都會被記錄在此文件中。 su, sudo 等程序、還有網絡連線的 ssh, telnet 等程序, 登陸信息都會被記載在這裏

  • /var/log/boot.log

開機的時候系統核心會去偵測與啓動硬件,接下來開始各種核心支持的功能啓動等。這些流程都會記錄在 /var/log/boot.log 裏面。只保留本次的開機信息。

  • /var/log/cron

記錄 crontab 調度有沒有實際被進行? 進行過程有沒有發生錯誤? /etc/crontab 是否配置正確?

  • /var/log/dmesg

記錄系統在開機的時候核心偵測過程所產生的各項信息。

  • /var/log/lastlog

可以記錄系統上面所有的帳號最近一次登陸系統時的相關信息

  • /var/log/maillog/var/log/mail/*

記錄郵件的往來信息,其實主要是記錄 postfix (SMTP 協定提供者) 與 dovecot (POP3 協定提供者) 所產生的訊息啦。 SMTP 是發信所使用的通訊協定, POP3 則是收信使用的通訊協定。 postfix 與 dovecot 則分別是兩套達成通訊協定的軟件。

  • /var/log/wtmp, /var/log/faillog

這兩個文件可以記錄正確登陸系統者的帳號信息 (wtmp) 與錯誤登陸時所使用的帳號信息 (faillog)

CentOS 使用 rsyslog.service 這個服務來統一管理這些系統日誌文件。

五、日誌服務和配置文件

查看日誌服務的狀態

systemctl status rsyslog.service

rsyslog.service 的配置文件

既然是服務,就會有配置文件。

/etc/rsyslog.conf

配置文件用於設置

(1)什麼服務 (2)的什麼級別的信息 (3)需要被記錄在哪裏(設備或文件)

比如:

cron.* /var/log/cron
表示 關於計劃任務的所有級別的信息,都記錄到 /var/log/cron 文件中

*.info;mail.none;authpriv.none;cron.none /var/log/messages
表示所有服務端 info 級別的信息,郵件的 none 級別的信息,登錄認證的 none 基本的信息和計劃任務的 none 基本的信息都記錄到 /var/log/messages 文件中。

Linux 核心的 syslog 認識的服務類型主要有下面這些:

Linux 核心的 syslog 定義的日誌級別:

添加額外的記錄日誌文件

編輯 /etc/rsyslog.conf 文件

# Add other file
*.info  /var/log/shark.log

保存退出後

重啓服務

systemctl restart rsyslog

把一個Linux 主機設置爲 日誌服務器

通過配置 /etc/rsyslog.conf 可以把一個 Linux 主機配置成一臺 日誌服務器,這樣其他 Linux 主機的日誌,除了記錄在自己的本地外,還會發送的 這臺日志服務器上一份。

服務端的設置

編輯 /etc/rsyslog.conf

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

重啓服務

 systemctl restart rsyslog.service

檢查監聽端口

[root@shark ~]# ss -natal |grep 514
LISTEN     0      25           *:514                      *:*
LISTEN     0      25          :::514                     :::*

客戶端設置

編輯 /etc/rsyslog.conf

*.*       @@192.168.1.100

@@192.168.1.100
表示使用 TCP 協議傳輸數據到日誌服務器 191.168.1.100 上


四、日誌輪轉

什麼是日誌輪轉,爲什麼要輪轉

日誌輪轉也叫日誌的切割,通俗來講就是對日誌文件進行大小的控制。

Linux 系統通常會長時間的不停機運行,這樣就會產生好多信息記錄到不同的日誌中。隨着時間的推移,日誌的容量自然會越來越大,那問題就來了,硬盤的空間是有限的,那爲了控制日誌文件的大小,就需要對日誌文件進行控制。

同時是把目前的日誌文件改名,緊接着創建一個新的日誌文件,名稱和原來的一樣,重啓服務進程,讓其向新的日誌文件中寫日誌。

實施程序

logrotate 負責對系統日誌的輪轉。

通過定時任務每天都會執行一次。

[root@shark ~]# cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

logrotate 的配置文件

  • /etc/logrotate.conf

主配置文件, 設置的默認值

  • /etc/logrotate.d/

被包含的子配置文件,可以對某一些服務設置特定的配置

logrotate 的主要功能就是將舊的日誌文件改成舊文件, 並且重新創建一個新的空的文件來記錄。
如下圖:

/etc/logrotate.conf 的默認值

weekly    >==每週對系統的日誌文件進行一次 rotate 的工作
rotate 4  >==同類的日誌文件,保留 4 份!
create    >==創建一個新的空文件,繼續記錄!
dateext   >==可以讓被輪轉的文件名稱加上日期作爲文件的後綴名!
#compress >==被輪轉的到日誌文件是否壓縮

設置語法

登錄文件的絕對路徑文件名 ... {
    個別的參數設置值,如 monthly, compress 等等
}

多個文件可以使用一套參數值。
/path/log/file1.log
/path/log/file2.log
{
...
}

假如,想對某個日誌文件實現輪轉,建議在 /etc/logrotate.d/ 目錄中添加子配置文件

比如

[root@shark logrotate.d]# cat syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

自定義日誌輪轉

目錄下編輯一個文件

/var/log/shark1.log {
        monthly              >== 每月一次輪轉
        size=10M             >== 文件大小大於 10M 時, 也開始輪轉
        rotate 2             >== 日誌文件保留 2 個
        compress             >== 對舊的日誌文件進行壓縮
        sharedscripts        >== 輪轉之前需要先被執行命令
        prerotate
                /usr/bin/chattr -a /var/log/shark1.log      >==去掉特殊屬性
        endscript
        sharedscripts      >== 輪轉之後需要被執行的命令
        postrotate
            /usr/bin/chattr +a /var/log/shark1.log     >== 特殊屬性,文件內容只能增加不能刪除或者修改
        endscript
}

測試

可以使用 logrotate 命令測試

logrotate -vf    /etc/logrotate.conf

-v 顯示輪轉的詳情
-f 立刻進行一次輪轉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章