時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
概述
日志對于系統(tǒng)的重要性不言而喻,比如對于故障診斷和入侵檢測,沒有日志幾乎寸步難行。Linux系統(tǒng)當(dāng)中最流行的日志記錄器是 Sysklogd ,當(dāng)前最新版本是 1.5 。
Sysklogd 日志記錄器由兩個守護(hù)進(jìn)程(klogd syslogd)和一個配置文件(syslog.conf)組成。klogd 不使用配置文件,它負(fù)責(zé)截獲內(nèi)核消息,它既可以獨(dú)立使用也可以作為 syslogd 的客戶端運(yùn)行。syslogd 默認(rèn)使用 /etc/syslog.conf 作為配置文件,它負(fù)責(zé)截獲應(yīng)用程序消息,還可以截獲 klogd 向其轉(zhuǎn)發(fā)的內(nèi)核消息。支持 internet/unix domain sockets 的特性使得這兩個工具可以用于記錄本地和遠(yuǎn)程的日志。
重要信息
syslogd 守護(hù)進(jìn)程默認(rèn)情況下并不從 syslog/udp 端口接受任何消息,除非在命令行上使用了"-r"選項。此外,你還應(yīng)當(dāng)仔細(xì)看看"-l"和"-s"命令行選項。
syslogd 守護(hù)進(jìn)程默認(rèn)情況下并不轉(zhuǎn)發(fā)任何來自遠(yuǎn)程主機(jī)的消息,這是為了避免可能導(dǎo)致的日志無限循環(huán)。"-h"選項可以開啟轉(zhuǎn)發(fā)功能。
syslogd 會剝除來自同一個域范圍內(nèi)的主機(jī)中的每條消息中的本地域(local domain)信息。如果你使用了日志分析程序,請將這一特性牢記在心。
syslogd 不會更改任何文件的屬性,所以由它創(chuàng)建的文件將是全局可讀的。如果你不想這樣(比如"auth.*"被進(jìn)行了記錄),你必須手動事先創(chuàng)建這些文件并設(shè)置相應(yīng)的權(quán)限。
如果某些程序發(fā)送了大量的日志消息并且導(dǎo)致硬盤非常忙碌,你可以考慮在每一行后面關(guān)閉fsync()特性。不過這樣可能會導(dǎo)致系統(tǒng)崩潰以后丟失一些日志消息。
如果你使用 init 來直接啟動 klogd 或 syslogd ,那么需要在命令行上使用"-n"選項。
如果 System.map 文件存在并且在 klogd 命令行上使用了"-k"的話,那么它可以解碼 EIP 地址。這個特性對于診斷系統(tǒng)崩潰非常有用,但是你必須確保 System.map 文件正確無誤。
這兩個守護(hù)進(jìn)程都會嘗試在收到退出信號時刪除他們的 .pid 文件,不過如果系統(tǒng)崩潰或者進(jìn)程被"kill -9"結(jié)束,那么可能就會來不及清理。這樣,下次啟動時就有可能會獲得與以前殘留的 .pid 文件中的進(jìn)程號相同的PID,從而導(dǎo)致無法啟動(進(jìn)程號沖突)。解決這個問題的最佳方案是系統(tǒng)的啟動腳本(rc.*)自身能夠在系統(tǒng)啟動的最初就對這些 .pid 文件進(jìn)行清理(通常是清空 /var/run 目錄)。
大文件支持(可以寫入大于 2 GB 的日志)并不是 syslogd 的功能,而是 glibc 的功能(使用不同的內(nèi)核API進(jìn)行調(diào)用)。要啟用大文件支持,你必須將 Makefile 中的相應(yīng)注釋取消(兩個含有"-D_FILE_OFFSET_BITS"的行中的一個)。
內(nèi)核的控制臺日志等級
內(nèi)核的控制臺日志等級控制哪些內(nèi)核消息會在控制臺上顯示。有兩種途徑可以修改這個等級,不過建議的途徑是通過 sysctl 來控制,通常這個設(shè)置位于 /etc/sysctl.conf 中。比如:
kernel/printk = 4 4 1 7
安裝注意事項
仔細(xì)閱讀 README 和 man page 會減少你不少痛苦。目前所有文檔都已經(jīng)放在man page中了。
按照你的需求修改 Makefile 然后再進(jìn)行編譯。如果你沒有認(rèn)真對待第一步,那么可能會編譯出不合格的二進(jìn)制程序。
FSSTND(Linux文件系統(tǒng)標(biāo)準(zhǔn))要求二進(jìn)制文件和其配置文件必須位于不同的目錄。這個包默認(rèn)情況下遵守FSSTND的約定。你可以通過修改 Makefile 文件和源代碼來修改配置文件的位置。
建議讓這兩個守護(hù)進(jìn)程都以root身份運(yùn)行,如果你想了解更多安全方面的問題,請閱讀 man page 。
下面是 Makefile 文件開頭的一部分節(jié)選,這部分是在安裝是可能需要改動的:
CC= gcc
SKFLAGS= $(RPM_OPT_FLAGS) -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce
# 啟用大文件支持,根據(jù)你的系統(tǒng)是32位還是64位進(jìn)行選擇
# -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
# -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
# $(shell getconf LFS_SKFLAGS)
LDFLAGS= -s
# 指定 install 程序的位置
INSTALL = /usr/bin/install
# 安裝目錄
BINDIR = $(prefix)/usr/sbin
MANDIR = $(prefix)/usr/share/man
# 有bug報告說在一個純 ELF 系統(tǒng)上需要明確指定連接到 libresolv.a 庫。
# 如果你在連接 syslogd 時失敗,可以試一試取消下面的注釋。
# LIBS = /usr/lib/libresolv.a
# 如果你在 ALPHA 平臺上連接失敗,可以試一試取消下面的注釋。
# LIBS = ${LIBS} -linux
# 取消下面的注釋可以讓 klogd 實現(xiàn)啟動延遲,這在 klogd 和 syslogd 并行啟動或啟動順序靠的非常近的時候很有用。
# KLOGD_START_DELAY = -DKLOGD_DELAY=5
# 下面的定義表示文件位置遵守FSSTND標(biāo)準(zhǔn)。
FSSTND = -DFSSTND
# 下面的定義指定了 man page 的宿主和權(quán)限。
MAN_USER = root
MAN_GROUP = root
MAN_PERMS = 644
# 下面的定義指定了 syslogd 守護(hù)進(jìn)程的 .pid 文件名,
# 源代碼(paths.h)中默認(rèn)的文件名是"syslog.pid",但很多人認(rèn)為應(yīng)當(dāng)叫"syslogd.pid"。
# 你可以在這里指定你喜歡的名字。
SYSLOGD_PIDNAME = -DSYSLOGD_PIDNAME=\"syslogd.pid\"
syslog.conf
syslog.conf 是 syslogd 進(jìn)程的配置文件,將在程序啟動時讀取,默認(rèn)位置是 /etc/syslog.conf 。它指定了一系列日志記錄規(guī)則。規(guī)則的格式如下:
facility.level??? action
這個配置文件中的空白行和以"#"開頭的行將被忽略。"facility.level"部分也被稱為選擇符(seletor)。 seletor 和 action 之間使用一個或多個空白分隔。
#p#副標(biāo)題#e#
選擇符(seletor)
選擇符由 facility 和 level 兩部分組成,之間用一個句點(diǎn)(.)連接。這兩部分將在后面 syslogd 小節(jié)中詳細(xì)描述。下面提到的名字和 /usr/include/syslog.h 中的 LOG_-values 相一致。
facility 指定了產(chǎn)生日志的子系統(tǒng),可以是下面的關(guān)鍵字之一:
auth由 pam_pwdb 報告的認(rèn)證活動。
authpriv包括私有信息(如用戶名)在內(nèi)的認(rèn)證活動
cron與 cron 和 at 有關(guān)的信息。
daemon與 inetd 守護(hù)進(jìn)程有關(guān)的信息。
ftp與 FTP 有關(guān)的信息
kern內(nèi)核信息,首先通過 klogd 傳遞。
lpr與打印服務(wù)有關(guān)的信息。
mail與電子郵件有關(guān)的信息
marksyslog 內(nèi)部功能用于生成時間戳
news來自新聞服務(wù)器的信息
syslog由 syslog 生成的信息
user由用戶程序生成的信息
uucp由 uucp 生成的信息
local0 ~ local7由自定義程序使用,例如使用 local5 做為 ssh 功能
*通配符代表除了 mark 以外的所有功能
在大多數(shù)情況下,任何程序都可以通過任何 facility 發(fā)送日志消息,但是一般都遵守約定俗成的規(guī)則。比如,只有內(nèi)核才能使用"kern" facility 。
level 指定了消息的優(yōu)先級,可以是下面的關(guān)鍵字之一(降序排列,嚴(yán)重性越來越低):
emerg系統(tǒng)不可用
alert需要立即被修改的條件
crit阻止某些工具或子系統(tǒng)功能實現(xiàn)的錯誤條件
err阻止工具或某些子系統(tǒng)部分功能實現(xiàn)的錯誤條件
warning預(yù)警信息
notice具有重要性的普通條件
info提供信息的消息
debug不包含函數(shù)條件或問題的其他信息
none沒有優(yōu)先級,通常用于排錯
*除了none之外的所有級別
facility 部分可以是用逗號(,)分隔的多個子系統(tǒng),而多個 seletor 之間也可以通過分號(;)組合在一起。需要注意的是,多個組合在一起的選擇符,后面的會覆蓋前面的,這樣就允許從模式中排除一些優(yōu)先級。
默認(rèn)將對指定級別以及更嚴(yán)重級別的消息進(jìn)行操作,但是可以通過下面2個操作符進(jìn)行修改。
等于操作符(=)表示僅對這個級別的消息進(jìn)行操作,不等操作符(!)表示忽略這個級別以及更嚴(yán)重級別的消息。這兩個操作符可以同時使用,不過"!"必須出現(xiàn)在"="的前面。
動作(action)
這個字段定義了對符合條件的消息進(jìn)行何種操作,可以選擇下列操作之一:
普通文件
將消息記錄到這個文件中,必須使用絕對路徑。如果在文件名之前加上減號(-),則表示不將日志信息同步刷新到磁盤上(使用寫入緩存),這樣可以提高日志寫入性能,但是增加了系統(tǒng)崩潰后丟失日志的風(fēng)險。
命名管道
在絕對路徑表示的FIFO文件(使用mkfifo命令創(chuàng)建)前加上管道符號(|)即可。通常用于調(diào)試。比如:|/usr/adm/debug
終端或者控制臺
比如:/dev/tty1 或 /dev/console
遠(yuǎn)程主機(jī)
syslogd 能夠?qū)⑾l(fā)送到遠(yuǎn)程主機(jī)或從遠(yuǎn)程主機(jī)接收消息,不過默認(rèn)并不轉(zhuǎn)發(fā)接收到的消息。要將消息發(fā)送到遠(yuǎn)程主機(jī),可以在主機(jī)名前加一個"@"即可。
逗號分隔的用戶名列表
critical 級別的消息除了記錄到日志之外,通常還轉(zhuǎn)發(fā)到root用戶。
所有當(dāng)前登錄的用戶
如果寫
關(guān)鍵詞標(biāo)簽:Sysklogd,系統(tǒng)日志
相關(guān)閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內(nèi)存型號 linux tc實現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負(fù)載