注:在 centos7/Rocky9 中,系統日志消息由兩個服務負責處理:systemd-journald 和 rsyslog
一、常見日志文件的作用
實驗一:測試查看暴力破解系統密碼的IP地址
步驟一:故意輸錯密碼3次,在日志文件中查看
步驟二:提取IP地址
- awk '{print $11}' #以空格或 Tab 做為分隔符,打印第 11 列的數據
- uniq 命令用于報告或忽略文件中的重復行,-c 或count:在每列旁邊顯示該行重復出現的次數
步驟三:發現后,使用防火墻拒絕此IP(首先查看和清空防火墻規則)
將拒絕Ip地址的規則添加進去
注:需要注意的是,一旦為防火墻添加這條規則,此遠程連接就會斷開,無法重連;需要在虛擬機中清空防火墻規則才能夠再次進行遠程連接
實驗二:/var/log/wtmp文件的作用
- /var/log/wtmp 是一個二進制文件,記錄每個用戶的登錄次數和持續時間等信息
- 可以用 last 命令輸出 wtmp 中內容
- last 顯示到目前為止,成功登錄系統的記錄
實驗三:使用 /var/log/btmp 文件查看暴力破解系統的用戶
注:/var/log/btmp 文件是記錄錯誤登錄系統的日志
文件變得過大時,清空可選方式:
兩種方式差別:第一種方式直接覆蓋,Inode號不變,第二種方式刪除后重建,Inode號可能會變
二、日志的記錄方式
日志的記錄在 rsyslog 中由日志的“類別”和“級別”組成。
1.日志的分類(類別)
- daemon 后臺進程相關
- kern 內核產生的信息
- lpr 打印系統產生的
- cron 定時相關
- mail 郵件相關
- syslog 日志服務本身的
- news 新聞系統
- authpriv 安全認證
- local0~7 自定義的日志設備
- local0-local7 8 個系統保留,程序使用或者是用戶自定義
2.日志的級別

3.查看日志配置文件信息(/etc/rsyslog.conf)
類別.級別
- *.info;mail.none;authpriv.none;cron.none ????????/var/log/messages——所有的類別級別是 info 以上除了 mail,authpriv,cron
- authpriv.*? ? ? ? ? ? ? ? 認證相關日志? ? ? ? ? ? ? ? ? ? ?/var/log/secure
- mail.*? ? ? ? ? ? ? ? ? ? ? 郵件相關的日志? ? ? ? ? ? ? ? ?-/var/log/maillog
- cron.*? ? ? ? ? ? ? ? ? ? ? 計劃任務相關的日志? ? ? ? ? ?/var/log/cron
- local7.*? ? ? ? ? ? ? ? ? ?開機時顯示的信息存放? ? ? ? /var/log/boot.log
注:“- ”號:郵件的信息比較多,現將數據存儲到內存,達到一定大小,全部寫到硬盤。有利于減少 I/O進程的開銷。數據存儲在內存,如果關機不當則數據消失。
4.日志輸入的規則
- . info 大于等于 info 級別的信息全部記錄到某個文件。
- .=級別 僅記錄等于某個級別的日志。例:.=info 只記錄 info 級別的日志
- .! 級別 除了某個級別以外,記錄所有的級別信息(C6 可用)。例.!err 除了 err 外記錄所有。
- .none 指的是排除某個類別。
實驗:自定義日志
步驟一:在/var/log/目錄下創建all.log日志文件,然后在配置文件中記錄位置
步驟二:重啟日志服務,使配置生效
步驟三:防止日志刪除,添加隱藏屬性
三、日志輪替切割
1.日志的切割
- 在 linux 下的日志會定期進行滾動增加,我們可以對日志進行指定大小的切割。logrotate 支持按時間和大小來自動切分(剪切),以防止日志文件太大。
- 日志輪替最主要的作用就是把舊日志文件移動并改名,同時建立新的空日志文件。當舊日志文件數量超出保存范圍后就進行刪除
logrotate 配置文件主要有:
- /etc/logrotate.conf(全局規則) 以及 /etc/logrotate.d/ (局部規則)目錄下的明細配置文件。logrotate 的執行由 crond 服務調用的。
- 查看 logrotate 腳本內容(需要自己寫)
logrotate 程序每天由 cron 在指定的時間(/etc/crontab)啟動
日志是很大的,如果讓日志無限制的記錄下去,日志文件會逐漸變大,以至于文件無法打開。
日志切割
- 當日志達到某個特定的大小,將之前的日志保留一個備份,再產生的日志創建一個同名的文件保存新的日志
2.系統中的文件默認切割輪替

- weekly:每周執行切割輪替,或者說每周執行一次日志切割輪替
- rotate:表示日志切分后歷史文件最多保存離現在最近的多少份
- create:指定新創建的文件的權限與所屬主與屬組
- dateext:使用日期為后綴的切割文件
其它參數說明:
- monthly: 日志文件將按月輪循。其它可用值為‘daily’,‘weekly’或者‘yearly’。
- size:只有當日志文件增長到指定大小時才會進行切割輪替,比如 100k、100M、100G 單位大小均為有效值。(如果此選項和時間輪替沖突那么最后一個指定的輪替條件生效)
- rotate 5: 將存儲 5 個歸檔日志。對于第 6 個歸檔,距離當前時間最久的歸檔將被刪除。
- dateext:在日志切割輪替后,舊日志文件以切割輪替日期為文件后綴名。
- nodateext:在日志輪替切割后,舊日志文件不以日期為后綴名。
- compress: 在輪循任務完成后,已輪循的歸檔將使用 gzip 進行壓縮。
- delaycompress: 總是與 compress 選項一起用,delaycompress 選項指示 logrotate 不要將最近的歸檔壓縮。
- missingok: 在日志輪循期間,任何錯誤將被忽略,例如“文件無法找到”之類的錯誤。
- notifempty: 如果日志文件為空,輪循不會進行。
- create 644 root root: 以指定的權限創建全新的日志文件,同時 logrotate 也會重命名原始日志文件。
- sharedscripts:在此關鍵字之后的腳本執行一次。
- prerotate/endscript:在日志輪替之前執行腳本命令。endscript 標識 prerotate 腳本結束。
- postrotate/endscript: 在所有其它指令完成后,postrotate 和 endscript 里面指定的命令將被執行。
3.logrotate 命令
格式:logrotate? ?[選項]? ?配置文件名
選項:如果此命令不添加子選項,則會按照配置文件中的條件進行日志輪替。
- -v:顯示日志輪替過程。加-v 選項會顯示日志的輪替過程。
- -f:強制進行日志輪替。不管日志輪替的條件是否已經符合,強制配置文件中的所有日志進行輪替
4.自定義日志切割輪替
步驟一:在/var/logrotate.d/目錄下創建alog文件,寫入all.log日志的切割輪替規則
步驟二:在配置環境rsyslog.conf中寫入all.log日志的路徑和類別、級別
步驟三:全部保存好之后,重新啟動rsyslog服務,載入配置好的配置文件
步驟四:執行強制輪替的命令,然后查看/var/log/下是否會出現強制輪替產生的文件
補充
split:文件拆分
- -a:指定輸出文件名的后綴長度,默認2字符
- -d:指定輸出文件名的后綴長度用數字代替
- -b:指定輸出文件的大小,可以用k,m,g等表示
cat:文件合并
四、配置遠程日志服務器
作用:實現日志的集中管理
server端配置(25.6)
步驟一:解除514端口注釋,開放tcp連接監聽端口
步驟二:重啟rsyslog服務,查看服務監聽的狀態
步驟三:關閉防火墻,確保不會影響到日志的接收
client端配置(25.16)
步驟一:修改主機名方便區分日志所屬
步驟二:更改配置文件,將遠程服務器的主機地址添加進去(本機是192.168.25.16)
步驟三:重啟rsyslog服務,確保配置文件重新加載識別
步驟四:創建一個新的用戶,然后在服務器端的/var/log/secure日志文件中查看是否更新
注:可以看到服務器端已經收到了一臺客戶端的日志信息(服務器使用UDP協議,則一行只能有一個@符號,若使用TCP協議,則必須有兩個@符號)