Linux 系統(tǒng)日志分析與管理
共 8050字,需瀏覽 17分鐘
·
2024-07-04 17:49
閱讀目錄
接收端配置
發(fā)送端配置
Linux系統(tǒng)內(nèi)核和許多程序會產(chǎn)生各種錯誤信息、警告信息和其他的提示信息,這些信息對管理員了解系統(tǒng)的運行狀態(tài)是非常有用的,所以應該把它們寫到日志文件中去,完成這個過程的程序就是syslog,syslog可以根據(jù)日志的類別和優(yōu)先級將日志保存到不同的文件中.
關于Linux常見的日志文件名及作用
日志文件可以幫助我們了解很多系統(tǒng)重要的事件,包括登陸者的部分信息,因此日志文件的權限通常是配置為僅有 root 能夠讀取而已,而由于日志文件可以記錄很多的系統(tǒng)詳細信息,所以,一個有經(jīng)驗的Linux管理員會隨時隨地查閱一下自己的日志文件,以隨時掌握系統(tǒng)的最新動態(tài),那么常見的日志文件有哪些呢?一般而言有下面幾個:
● /var/log/cron
主要記錄關于crontab計劃任務的相關信息,比如,系統(tǒng)計劃任務的錯誤配置,計劃任務的修改等.
● /var/log/btmp
記錄錯誤登陸日志,這個文件是二進制的,不能使用cat命令查看,而要使用lastb命令查看.
● /var/run/utmp
記錄當前一登陸用戶的信息,同樣不能使用cat命令查看,而要使用w,who,users命令來查詢.
● /var/log/dmesg
主要記錄系統(tǒng)在開機時內(nèi)核檢測過程所產(chǎn)生的信息,默認情況下RHEL系統(tǒng)關閉了開機回顯,如果你要查看則需要在這個文件下查閱即可.
● /var/log/lastlog
記錄了系統(tǒng)上面所有賬戶最近一次登陸系統(tǒng)時的相關信息,lastlog命令就是讀取這個文件里的記錄來顯示的.
● /var/log/malilog or /var/log/mail/*
記錄著郵件的往來信息,默認是postfix郵件服務器的一些信息.
● /var/log/messages
這個文件非常重要,幾乎系統(tǒng)發(fā)生的錯誤信息,或者重要信息都會被記錄在這里.
● /var/log/secure
只要涉及到需要用戶名和密碼的操作,那么當?shù)顷懴到y(tǒng)是(不論正確錯誤),都會記錄到這里.
● /var/log/wtmp or /var/log/faillog
這兩個文件可以記錄正確登陸系統(tǒng)者的賬戶信息(wtmp),與錯誤登陸時所使用的賬戶信息,last命令就是讀取wtmp文件來獲取的.
常見的日志文件就是這幾個,但是不同的 Linux 發(fā)行版,通常日志文件的名稱和存儲目錄都不會相同,但此處除了/var/log/messages 之外,所以說你還是得要查閱你 Linux 主機上面的日志文件配置數(shù)據(jù),才能知道你的日志文件主要是放在哪里了.
日志文件所需相關服務與進程
其實日志文件的產(chǎn)生,基本上有兩種方式:一種是有軟件開發(fā)商自定義寫入的日志文件與相關格式,另一種則是由Linux發(fā)行商提供的日志文件管理服務來統(tǒng)一管理,你只要將這個信息丟給這個服務,它就會自己分門別類的放置到相關的日志文件中去,RHEL系統(tǒng)提供syslogd這個服務來統(tǒng)一管理日志文件.
除了syslogd這個服務之外,內(nèi)核也需要額外的登陸服務來記錄內(nèi)核產(chǎn)生的各項信息,這個專門用來記錄內(nèi)核日志的服務就是klogd.所以說,日志文件所需的服務主要是syslogd與klogd這兩者.
不過需要注意的是,由于系統(tǒng)每天都在產(chǎn)生大量的日志,如果日志文件量太大,就會影響系統(tǒng)的正常運轉,這時候我們可以通過logrtate來自動處理日志文件與切割更新的問題.
所謂logrotate(日志輪詢),基本上就是將舊的文件改變名稱,然后新建一個空文件,如此一來新的日志文件將重新開始記錄,這樣就可以實現(xiàn)日志輪詢啦,總結一下,針對日志文件所需的功能,我們需要的服務與程序有以下幾個:
syslogd:主要登陸系統(tǒng)與網(wǎng)絡等服務的信息
klogd:主要登陸內(nèi)核產(chǎn)生的各項信息
logrotate:主要進行日志文件的輪詢
以上就是關于日志相關的常用常識,下面我們將開始實際看一下日志服務的應用技巧.
SYSlog日志文件的格式
一般情況下,系統(tǒng)產(chǎn)生的信息經(jīng)過syslog而記錄下來的數(shù)據(jù)中,每條信息均會記錄下面的幾個數(shù)據(jù).
● 事件發(fā)生的日期與時間
● 發(fā)生此事件的主機名
● 啟動此事件的服務名,或函數(shù)名
● 該信息的實際數(shù)據(jù)內(nèi)容
當然這些信息日志的詳細程度也是可以修改的,而且這些信息可以作為系統(tǒng)的排錯之用,下面我們來看一下 /var/log/secure 這個日志文件,來簡單介紹一下它的記錄格式吧.
[root@localhost ~]# cat /var/log/secure | head -n 5
Oct 13 12:39:27 localhost polkitd[733]: Loading rules from directory /etc/polkit-1/rules.d
Oct 13 12:39:27 localhost polkitd[733]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
Oct 13 12:39:33 localhost sshd[1082]: Server listening on 0.0.0.0 port 22.
Nov 28 09:36:41 localhost sshd[1364]: Accepted password for root from 192.168.1.20 port 63704 ssh2
Nov 28 05:36:41 localhost sshd[1364]: pam_unix(sshd:session): session opened for user root by (uid=0)
我們拿最后一條數(shù)據(jù)來說,該數(shù)據(jù)是說:在11月28號的下午5點36分,由localhost這臺主機,通過sshd服務pid號是1364傳來的消息,這個消息是通過pam_unix這個模塊產(chǎn)生的,內(nèi)容為session opened for user root by (uid=0),root開啟了活動.
SYSlog配置文件的解析
其實日志文件也有配置文件,它的目錄是 /etc/rsyslog.conf 基本上syslog針對各種服務于信息的記錄保存在這個配置文件里,這個文件規(guī)定了什么服務什么等級信息,以及需要被記錄在哪里,這三個東西,所以它的語法會是下面的樣子:
[服務名稱] .=! [信息等級] [記錄到哪里]
authpriv.* /var/log/secure
mail.info -/var/log/maillog
cron.* /var/log/cron
好了,接下來我們分成三個部分來解釋這幾信息的含義.
[服務名稱]
syslog本身有設置一些服務,你可以通過這些服務來存儲系統(tǒng)信息,syslog涉及的服務主要有以下這些:
| 服 務 類 型 | 說 明 |
|---|---|
| auth(authpriv) | 與認證有關的機制,例如login,ssh,su等需要賬號密碼 |
| cron | 例行工作調度,cron/at等生成信息日志的地方 |
| daemon | 與這個daemon有關的信息 |
| kern | 內(nèi)核產(chǎn)生的信息 |
| lpr | 打印相關的信息 |
| 只要與郵件有關的信息都記錄在這里 | |
| news | 與新聞組服務器有關的東西 |
| syslog | syslogd本身生成的信息 |
| user,uucp,local0-local7 | 與Unix-Like機器本身有關的一些信息 |
對配置文件的幾點說明:
● 日志類型和優(yōu)先級由點號(.)分開,例如 kern.debug 表示由內(nèi)核產(chǎn)生的調試信息
● kern.debug 的優(yōu)先級大于 debug
● 星號(*)表示所有,例如 .debug 表示所有類型的調試信息,kern. 表示由內(nèi)核產(chǎn)生的所有消息
● 可以使用逗號(,)分隔多個日志類型,使用分號(;)分隔多個選擇器
對日志的操作包括:
● 將日志輸出到文件,例如 /var/log/maillog 或 /dev/console
● 將消息發(fā)送給用戶,多個用戶用逗號(,)分隔,例如 root,amrood
● 通過管道將消息發(fā)送給用戶程序,注意程序要放在管道符(|)后面
● 將消息發(fā)送給其他主機上的 syslog 進程,這時 /etc/syslog.conf文件后面一列為以@開頭的主機名(IP)
[信息等級]
同一個服務所產(chǎn)生的信息也是有差別的,有啟動時僅通知系統(tǒng)而已的一般信息(information),有出現(xiàn)還不至于影響到正常運行的警告信息 (warn),還有系統(tǒng)硬件發(fā)生嚴重錯誤時,所產(chǎn)生的重大問題信息(error),基本上syslog將信息分為七個主要的等級,依序是這樣的(由不重要排列到重要信息等級).
| 等 級 信 息 | 說 明 |
|---|---|
| debug | 一般調試信息 |
| info | 基本通知信息 |
| notice | 普通通知信息 |
| warning(warn) | 警告信息,但不影響正常使用 |
| err(error) | 錯誤信息,可能影響系統(tǒng)服務 |
| crit | 比錯誤信息還嚴重的錯誤信息 |
| alert | 警告,比crit還嚴重的警告 |
| emerg(panic) | 疼痛等級,系統(tǒng)已經(jīng)完蛋了 |
| * | 代表所有日志等級 |
好了,上面的介紹足夠生產(chǎn)環(huán)境的使用啦,如果想配置自定義日志位置,我想你能夠搞定了.
SYSlog日志服務器配置
想像一個環(huán)境,你的辦公室內(nèi)有一百臺 Linux 主機,每一臺負責一個網(wǎng)絡服務,你為了要了解每臺主機的狀態(tài),因此你常常需要登陸這一百主機去檢查你的日志文件,想想是不是很騷,幸好我們的日志服務可以集中管理,這樣我們只需要一臺服務器當作日志服務器,其他客戶端主動同步數(shù)據(jù)就好啦,是不是很方便啊.
我們的RHEL系統(tǒng),默認的syslog本身就已經(jīng)具有這個日志文件服務器的功能了,只是默認并沒有啟動該功能而已,既然是日志服務器那么我們的 Linux 主機當然會啟動一個端口來監(jiān)聽了,那個默認的端口就是 UDP 的 514 啊.
回到頂部
接收端配置
1.首先編輯日志服務器的配置文件,開啟相應的注釋,此處既可以使用TCP也可以使用UDP,兩者都可.
[root@localhost ~]# vim /etc/rsyslog.conf
14 # Provides UDP syslog reception
15 $ModLoad imudp #此處我們開啟UDP的即可
16 $UDPServerRun 514
17
18 # Provides TCP syslog reception
19 #$ModLoad imtcp
20 #$InputTCPServerRun 514
2.重啟日志服務器,即可配置完成
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-11-28 10:33:26 EST; 6s ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 13746 (rsyslogd)
CGroup: /system.slice/rsyslog.service
└─13746 /usr/sbin/rsyslogd -n
通過這個簡單的操作,你的 Linux 主機已經(jīng)可以接收來自其他主機的日志文件了,這里還要進行防火墻的規(guī)則放行制定端口,此處略過.
回到頂部
發(fā)送端配置
至于發(fā)送端的配置就簡單多了,只要指定某個信息傳送到這部主機即可,舉例來說,我們的日志服務器 IP=192.168.1.10 ,而客戶端希望所有的數(shù)據(jù)都送給主機,我們可以進行一下操作.
1.修改日志配置文件,添加以下數(shù)據(jù),保存退出即可.
90 #*.* @@remote-host:514
91 # ### end of the forwarding rule ###
92
93 *.* @192.168.1.10
注意:可以使用 UDP 用一個@
可以使用 TCP 用兩個@@
2.重啟日志工具,即可配置完成
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-11-28 10:33:26 EST; 6s ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 13746 (rsyslogd)
CGroup: /system.slice/rsyslog.service
└─13746 /usr/sbin/rsyslogd -n
SYSlog日志的輪替功能
syslog 利用的是 daemon 的方式來啟動的,當有需求的時候立刻就會被運行的,但是 logrotate 卻是在規(guī)定的時間到了之后才來進行日志文件的輪替,所以這個 logrotate 程序當然就是掛在 cron 底下進行的,仔細看一下 /etc/cron.daily/里面的文件,/etc/cron.daily/logrotate 就是記錄了每天要進行的日志文件輪替的行為啦.
一般情況下,日志的輪替會用到兩個配置文件,分別是 /etc/logrotate.conf 和 /etc/logrotate.d/ 這兩個目錄,首先我們來看一下,/etc/logrotate.conf這個文件里的內(nèi)容吧.
[root@localhost ~]# cat /etc/logrotate.conf
weekly #默認每個禮拜進行輪詢
rotate 4 #保留幾個日志文件
create #日志文件被重命名,新建日志文件存儲
dateext
#compress #壓縮輪詢后的日志
include /etc/logrotate.d #導入其他日志配置文件
/var/log/wtmp { #針對/var/log/wtmp所設置的參數(shù)
monthly #每月輪替
create 0664 root utmp #指定新建文件的權限,以及所有者和所屬組
minsize 1M #大于1M后輪詢
rotate 1 #僅保留一個wtmp.1而已
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
其他的常用格式如下,我們可以自行自由發(fā)揮的.
| 參 數(shù) 信 息 | 說 明 |
|---|---|
| daily | 每天輪替 |
| weekly | 每周輪替 |
| monthly | 每月輪替 |
| rotate 數(shù)字 | 保留日志文件個數(shù) |
| compress | 舊日志啟用壓縮 |
| mail address | 輪替時發(fā)送郵件提示 |
| missingok | 日志不存在忽略警告 |
| notifempty | 日志為空不進行輪替 |
| minsize 大小 | 日志輪替最小值 |
| size 大小 | 多大進行輪替 |
| dateext | 使用日期格式后綴 secure-20181010 |
系統(tǒng)自動定期進行日志輪替的原因:
1./etc/cron.daily/有一個腳本,每天都會運行,查看是否有符合輪替的日志,然后進行相應處理
2.我們嘗試在rsyslog配置文件中添加自己的日志記錄,然后并且強制執(zhí)行輪替,看會不會產(chǎn)生輪替文件
3.先在配置文件中寫入自己的日志輪替規(guī)則
4.強制執(zhí)行日志輪替logrotate –vf /etc/logrotate.conf
鏈接:https://www.cnblogs.com/LyShark/p/10221821.html
(版權歸原作者所有,侵刪)
