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