歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下syslog日志系統詳解

Linux下syslog日志系統詳解

日期:2017/2/27 16:04:57   编辑:Linux教程

1. 什麼是syslog

日志的主要用途是系統審計,監測追蹤和分析統計. 為了保證Linux系統正常運行,准確解決遇到的各種各樣的系統問題,認真地讀取日志文件是管理員的一項非常重要的任務. Linux 內核由很多子系統組成,包括網絡,文件訪問,內存管理等.子系 統需要給用戶傳送一些消息,這些消息內容包括消息的來源及其重要性等 .所有的子系統都要把消息送到一個可以維護的公用消息區,於是,就有了syslog. syslog是一個綜合的日志記錄系統.它的主要功能是:方便日志管理和分類存放日志. syslog使程序設計者從繁重的,機械的編寫日志文件代碼 的工作中解脫出來,使管理員更好地控制日志的記錄過程.在syslog出現之前,每個程序都使用自己的日志記錄策略.管理員對保存什麼信息或是信息存放在哪裡沒有控制權.

2. syslogd的配置文件

syslogd的配置文件/etc/syslog.conf規定了系統中需要監視的事件和相應的日志的保存位置
cat /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages #除了mail/news/authpriv/cron以外,將info或更高級別的消息送到/var/log/messages,其中*是通配符,代表任何設備;none表示不對任何級別的信息進行記錄
# The authpriv file has restricted access.
authpriv.* /var/log/secure #將authpirv設備的任何級別的信息記錄到/var/log/secure文件中,這主要是一些和認證,權限使用相關的信息.
# Log all the mail messages in one place.
mail.* -/var/log/maillog #將mail設備中的任何級別的信息記錄到/var/log/maillog文件中, 這主要是和電子郵件相關的信息.
# Log cron stuff
cron.* /var/log/cron #將cron設備中的任何級別的信息記錄到/var/log/cron文件中, 這主要是和系統中定期執行的任務相關的信息.
# Everybody gets emergency messages
*.emerg * #將任何設備的emerg級別或更高級別的消息發送給所有正在系統上的用戶.
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler #將uucp和news設備的crit級別或更高級別的消息記錄到/var/log/spooler文件中.
# Save boot messages also to boot.log
local7.* /var/log/boot.log #將和本地系統啟動相關的信息記錄到/var/log/boot.log文件中.

3. syslogd語法

該配置文件的每一行的格式如下:
facility.priority action 設備.級別 動作

4. Syslogd設備字段

設備字段用來指定需要監視的事件.它可取的值如下:
authpriv cron daemon kern lpr syslog user uucp mail news
報告認證活動通常,口令等私有信息不會被記錄 報告與cron和at有關的信息 報告與xinetd有關的信息 報告與內核有關的信息 報告與打印服務有關的信息 由syslog生成的信息 報告由用戶程序生成的任何信息由UUCP生成的信息 報告與郵件服務有關的信息 報告與網絡新聞服務有關的信息

5. syslogd級別字段

級別字段用於指明與每一種功能有關的級別和優先級:
alert crit err warning notice info debug none * emerg
需要立即引起注意的情況 危險情況的警告 除了emerg,alert,crit的其他錯誤 警告信息需要引起注意的情況 值得報告的消息 由運行於debug模式的程序所產生的消息 用於禁止任何消息 所有級別,除了none 出現緊急情況使得該系統不可用

6. syslogd動作字段

動作字段用於描述對應功能的動作
file username device @hostname
指定一個絕對路徑的日志文件名記錄日志信息 發送信息到指定用戶,*表示所有用戶 將信息發送到指定的設備中,如/dev/console將信息發送到可解析的遠程主機hostname,且該主機必須正在運行syslogd並可以識別syslog的配置文件

7. 查看日志文件

常見的日志文件日志文件通常存放在/var/log目錄下.在該目錄下除了包括syslogd 記錄的日志之外,同時還包含所有應用程序的日志. 為了查看日志文件的內容必須要有root權限.日志文件中的信息很重要,只能讓超級用戶有訪問這些文件的權限.

8. log

cups/ httpd/ mail/ news/ boot.log dmesg maillog messages secure wtmp
存儲CUPS打印系統的日志目錄 記錄apache的訪問日志和錯誤日志目錄 存儲mail日志目錄 存儲INN新聞系統的日志目錄 記錄系統啟動日志記錄系統啟動時的消息日志 記錄郵件系統的日志 由syslogd記錄的info或更高級別的消息日志 由syslogd記錄的認證日志 一個用戶每次登錄進入和退出時間的永久記錄

9. 查看文本日志文件

絕大多數日志文件是純文本文件,每一行就是一個消息.只要是在Linux下能夠處理純文本的工具都能用來查看日志文件.可以使用 cat,tac, more,less,tail和grep進行查看文件中每一行表示一個消息,而且都由四個域的固定格式組成: 時間標簽(Timestamp):表示消息發出的日期和時間. 主機名(Hostname):表示生成消息的計算機的名字. 生成消息的子系統的名字:可以是"Kernel",表示消息來自內核或者 是進程的名字,表示發出消息的程序的名字. 在方括號裡的是進程的PID. 消息(Message),即消息的內容.
syslog發出的消息,說明了守護進程已經在 Dec 16,03:32:41 重新啟動了. Dec 16 03:32:41 cnetos5 syslogd 1.4.1: restart. # 在 Dec 19,00:20:56 啟動了內核日志 klogd Dec 19 00:20:56 cnetos5 kernel: klogd 1.4.1, log source = /proc/kmsg started. # 在 Dec 19,00:21:01 啟動了xinetd Dec 19 00:21:01 cnetos5 xinetd[2418]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.

10. 查看非文本日志文件Lastlog

也有一些日志文件是二進制文件,需要使用相應的命令進行讀取.
使用lastlog命令來檢查某特定用戶上次登錄的時間,並格式化輸出上次登錄日志 /var/log/lastlog 的內容
rpc **從未登錄過** rpcuser **從未登錄過** sshd **從未登錄過** pcap **從未登錄過** haldaemon **從未登錄過** xfs **從未登錄過** gdm **從未登錄過** boobooke **從未登錄過** baobao pts/1 192.168.1.2 三 11月 26 12:44:32 +0800 2008 abc **從未登錄過** test pts/1 192.168.1.5 四 11月 27 17:30:53 +0800 2008 test01 **從未登錄過**
last命令往回搜索/var/log/wtmp來顯示自從文件第一次創建以來登錄過用戶
root pts/1 116.226.69.195 Fri Aug 31 15:48 - 18:37 (02:49)

11. 查看非文本日志文件lastb

lastb命令搜索/var/log/btmp來顯示登錄未成功的信息.
root ssh:notty 222.143.27.97 Thu Sep 6 19:43 - 19:43 (00:00)

12. 查看非文本日志文件who

who命令查詢wtmp文件並報告當前登錄的每個用戶.who命令的缺省輸出包括用戶名,終端類型,登錄日期及遠程主機.
[root@server ~]# who
root pts/0 2012-09-08 10:18 (116.226.69.195)
[root@server ~]# w
10:41:31 up 212 days, 20:19, 1 user, load average: 0.21, 0.16, 0.14
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 116.226.69.195 10:18 0.00s 0.09s 0.00s w

13.日志滾動

為什麼使用日志滾動所有的日志文件都會隨著時間的推移和訪問次數的增加而迅速增長,因此必須對日志文件進行定期清理以免造成磁盤空間的不必要的浪費.同時也 加快了管理員查看日志所用的時間,因為打開小文件的速度比打開大文件的速度要快.
Logrotate 其命令格式為: logrotate [選項] <configfile>
-d:詳細顯示指令執行過程,便於排錯或了解程序執行的情況.
-f:強行啟動記錄文件維護操作,即使logrotate指令認為無需要亦然 -m command:指定發送郵件的程序,默認為 /usr/bin/mail. -s statefile:使用指定的狀態文件. -v:在執行日志滾動時顯示詳細信息.

14. 日志滾動

logrotate 默認的主配置文件是 /etc/logrotate.conf /etc/logrotate.d 的目錄下的文件,這些文件被 include 到主配置文件 /etc/logrotate.conf 中
# see "man logrotate" for details # 每周清理一次日志文件
weekly #保存過去四周的日志文件
rotate 4 #清除舊日志文件的同時,創建新的空日志文件
create #若使用壓縮的日志文件,請刪除下面行的注釋符
#compress #包含/etc/logrotate.d目錄下的所有配置文件
include /etc/logrotate.d #設置/var/log/wtmp的日志滾動
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}

可以使用ls命令顯示/etc/logrotate.d目錄:
[root@server ~]# ls /etc/logrotate.d
mgetty psacct rpm setroubleshoot snmpd syslog yum

每個文件的基本格式均相同
[root@server ~]# cat /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { #對日志文件
sharedscripts #調用日志滾動通用函數sharedscripts
postrotate #在日志滾動之後執行語句括號postrotate和endscript之間的命令postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true #重新啟動syslogd
endscript
}

logrotate是由crond運行的,在默認配置中,可以發現在/etc/cron.daily目錄中有一個名為logrotate的文件
[root@server ~]# cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Copyright © Linux教程網 All Rights Reserved