本文主要從日誌分類、分割日誌和日誌收集等幾個方面介紹了和伺服器日誌有關的工具。
上篇文章回顧:陣列卡快取電池充放電問題詳解
對經常在伺服器上面工作的人來說,日誌的閱讀和利用往往是非常重要的。偶爾出現了問題或解決之後,檢視相關日誌往往是定位問題原因的主要方法。因此,讓我們來了解一下和伺服器日誌有關的工具。
1、/var/log 下的日誌分類
首先來看看這個目錄,下面存放大部分的系統日誌,以下是比較常用的幾個日誌檔案:
/var/log/message :核心系統日誌檔案,包含系統啟動引導,系統執行狀態和大部分錯誤資訊等都會記錄到這個檔案,因此這個日誌是故障診斷的首要檢視物件。
/var/log/dmesg:核心啟動日誌,系統啟動時會在螢幕顯示與硬體有關的資訊,這些資訊會儲存在這個檔案裡面。
/var/log/secure:驗證,授權和安全日誌,常見的使用者登入驗證相關日誌就存放在這裡。
/var/log/spooler:UUCP和news裝置相關的日誌資訊
/var/log/cron:與定時任務相關的日誌資訊
/var/log/maillog:記錄每一個傳送至系統或者從系統發出的郵件活動
/var/log/boot:系統引導日誌
2、logrotate 分割日誌工具
目前大部分 linux 系統都會預設安裝有 logrotate,日誌分割工具。而這個工具的功能就是大家在 /var/log/ 目錄下面看到的形如 messages-20181028 樣式的日誌,在使用 logrotate 進行配置後就可以按照時間或者大小對日誌進行分割儲存。如果對 /etc/logrotate.conf 檔案和 /etc/logrotate.d/目錄沒有改動,可以看到 /etc/logrotate.conf 預設配置:
/etc/logrotate.conf
# 按周輪訓
weekly
# 保留4週日志備份
rotate 4# 標記分割日誌並建立當前日誌
create
# 使用時間作為字尾
dateext
# 對 logrotate.d 目錄下面的日誌種類使用
include /etc/logrotate.d
# 對於wtmp 和 btmp 日誌處理在這裡進行設定
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}複製程式碼
那麼在 /etc/logrotate.d/ 目錄下面。我們來看比較典型的兩類日誌,按時間和大小處理。
/etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok # 忽略檔案相關錯誤
sharedscripts # 所有指令完成之後,執行script中內容
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true # 對每次的輪循處理後,rsyslog重新讀取配置執行
endscript
}複製程式碼
/etc/logrotate.d/syslog 對日誌的處理,是繼承了 /etc/logrotate.conf 裡面的配置,因此就會對日誌 cron,maillog,messages,secure,spooler 進行按周分割,並保留 4 周內的分割日誌,久遠的日誌將進行刪除。
/etc/logrotate.d/yum
/var/log/yum.log {
missingok
notifempty # 日誌為空不輪循
size 30k
yearly
create 0600 root root
}複製程式碼
而在 /etc/logrotate.d/yum 裡面可以看到指定了 size 和 yearly,因此對於 yum 類日誌將會按日誌大小進行年分割。如果日誌達到設定的大小,那麼將會在現有的日誌上面進行分割。而一年內如果為達到設定大小,則按年進行分割。
此外,如果你在伺服器上面安裝了mysql,httpd 或者其他應用服務後,logrotate 它會自動在 /etc/logrotate.d/ 下面建立對應的日誌處理方式,基本是繼承 logrotate.conf。
/etc/logrotate.d/httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}複製程式碼
因此,不論是你伺服器上面系統日誌還是應用日誌,面對日誌量太大的問題,都可以使用 logrotate 進行設定處理。
3、rsyslog 日誌收集
rsyslog 是一個可以進行日誌轉發和收集的工具,利用它可以擁有一臺日誌收集伺服器,從而可以減少客戶端日誌的壓力,對於相關日誌的統一也是非常有用的,同時還有相應的前端展示工具來進行日誌的檢視統計。
rsyslog 不僅可以進行系統日誌的收集,同時也支援應用日誌的收集,只不過如果收集應用自定義日誌的話,需要在客戶端機器上面進行設定。因我們業務種類較多,不可能在初始化裝機時在業務伺服器上面配置相同的應用日誌服務。因此,業務可以根據自己的需求,進行相關配置。下面讓我們看一下當前我們使用的rsyslog服務情況。
ps aux | grep rsyslog 檢視服務是否正常執行
root 14468 0.0 3.6 664592 69584 ? Ssl Nov06 0:31 /usr/sbin/rsyslogd -n複製程式碼
rsyslog 的配置檔案為 /etc/rsyslog.conf,當我們想把一臺伺服器變成rsyslog日誌收集伺服器的時候,對這個配置檔案進行修改即可。
在服務端配置有以下兩個地方需要進行修改和配置:
/etc/rsyslog.conf
開啟udp日誌傳輸模式
$ModLoad imudp
$UDPServerRun 514
設定日誌收集路徑,包括客戶端機器名與日誌型別
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template RemoteLogs,"/home/syslogs/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
& ~複製程式碼
而在業務機器上面,只需要在配置的末尾,開啟日誌轉發即可:
/etc/rsyslog.conf
#*.* @10.21.109.2
#authpriv.* @@10.101.10.199
*.* @syslog.sys.srv複製程式碼
@ 表示使用 UDP 進行轉發,正好對應服務端開啟了 UDP 收集方式。
在經過上面的配置之後,重啟 systemctl restart rsyslog.service ,這樣一個日誌收集服務就成功建立了。我們可以看一下在rsyslog伺服器上面收集到的日誌是什麼樣子:
日誌收集
[root@amazing00 amazing01]# pwd
/home/syslogs/amazing01 # 可以看到這是在配置裡面設定好的路徑,轉發過來的日誌資訊會以客戶端的主機名進行識別和收集
[root@amazing00 amazing01]# ll
total 5484
-rw------- 1 root root 8651 Nov 15 03:24 anacron.log
-rw------- 1 root root 284 Nov 13 15:56 auditd.log
-rw------- 1 root root 126201 Nov 15 15:20 CROND.log
-rw------- 1 root root 245 Nov 7 17:56 groupadd.log
-rw------- 1 root root 96 Nov 6 10:18 kernel.log
-rw------- 1 root root 90 Nov 7 17:37 passwd.log
-rw------- 1 root root 1980 Nov 7 17:57 polkitd.log
-rw------- 1 root root 10633 Nov 8 10:14 root.log
-rw------- 1 root root 434 Nov 12 03:16 rsyslogd.log
-rw------- 1 root root 39812 Nov 15 15:01 run-parts(.log
-rw------- 1 root root 4763118 Nov 15 05:42 sshd.log
-rw------- 1 root root 606036 Nov 15 15:20 systemd.log
-rw------- 1 root root 1343 Nov 8 13:53 systemd-logind.log
-rw------- 1 root root 313 Nov 7 17:56 useradd.log
-rw------- 1 root root 874 Nov 7 17:57 yum.log複製程式碼
從這臺amazing01機器上面轉發過來的日誌,我們可以看到和正常伺服器/var/log下面的日誌檔名是不一樣的。這裡按照每一條系統日誌的種類進行了分類收集,十分的清楚和方便查詢。
最後,rsyslog 還有一個相應的前端日誌展示工具 loganalyzer,其利用的工具有 httpd,php和mysql。
這個前端工具適用於中小型伺服器叢集,對於我們當前的rsyslog服務收集的機器日誌非常多,考慮對rsyslog伺服器的壓力,所以不建議採用這個前端展示工具。
4、日誌相關的展望
對於日誌的分析和利用,是運維工作需要經常接觸的,有時候可以考慮用日誌做一些功能,比如監控錯誤日誌產生,根據日誌預測等等,那麼可能會對工作起到一定的幫助效果,減少日常重複的運維工作。
本文首發於公眾號“小米運維”,點選檢視原文。