一、什麼是系統日誌
記錄系統活動信息有幾個文件,他們分別記錄了不同的信息。
例如:何時、何地 (來源 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 立刻進行一次輪轉