Linux系統的日誌主要分為兩種類型:
1.過程日誌
用戶進程或其他系統服務進程生成的日誌,如服務器上的access_log和error_log日誌文件。
2.系統日誌消息
系統系統日誌記錄的日誌。任何想要記錄日誌的系統進程或用戶進程都可以調用syslog來記錄日誌。
測井系統可分為三個子系統:
1.連接時間日誌——由多個程序執行,將記錄寫入/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,這樣系統管理員就可以跟蹤誰在什麽時候登錄了系統。
2.進程統計——由系統內核執行。當進程終止時,在進程統計文件(pacct或acct)中為每個進程寫壹條記錄。進程統計的目的是為系統中的基本服務提供命令使用統計。
3.錯誤日誌-由syslogd(8)執行。各種系統守護進程、用戶程序和內核通過syslog(3)向文件/var/log/messages報告值得註意的事件。
2.檢查日誌文件
Linux系統的所有日誌文件都在/var/log下,必須有root權限才能查看。
日誌文件實際上是壹個純文本文件,每壹行都是壹條消息。有很多方法可以看到。
1.cat命令。日誌文件總是很大,因為從第壹次啟動Linux開始,消息就累積在日誌文件中。如果文件超過壹頁,文件的內容將會不清楚,因為顯示滾動得太快。
2.文本編輯器。最好不要用文本編輯器打開日誌文件,因為這樣壹方面消耗大量內存,另壹方面也不允許隨意更改日誌文件。
3.以頁的形式顯示程序,如或多或少。
4.使用grep查找特定的消息。
每行代表壹條消息,由固定格式的四個字段組成:
n時間戳,表示發送消息的日期和時間。
N hostname(在我們的例子中是escher),表示生成消息的計算機的名稱。如果只有壹臺計算機,主機名可能不是必需的。但是,如果在網絡環境中使用syslog,則可能需要將來自不同主機的消息發送到服務器進行集中處理。
n生成消息的子系統的名稱。可以是“內核”,表示消息來自內核,也可以是進程名,表示發送消息的程序名。方括號中是進程的PID。
n條消息,剩下的就是消息的內容了。
例如:
在[root@localhost root]#提示符下輸入:tail /var/log/messages。
Jan 05 21:55:51 localhost最後壹條消息重復了3次
1月5日21:55:51本地主機內核:[drm]英特爾I 810 @ 0xf 0000000 128m上的AGP 0.99
B
Jan 05 21:55:51 localhost內核:[drm]在minor上初始化i830 1 . 3 . 2 20021108
Jan 05 21:55:51 localhost內核:mtrr: base(0xf0000000)在siz上未對齊
e(0x12c000)邊界
GDM (PAM _ UNIX) [4079]:會話在f
或用戶root by (uid=0)
Jan 05 21:56:39 localhost 1:56:39 gconfd(root-4162):開始(版本2。
2.0),pid 4162用戶“root”
Jan 05 21:56:39 localhost 65438+10月28 21:56:39 gconfd(root-4162):解析的地址" xml:re。
僅ad:/etc/gconf/gconf . XML . mandatory "指向位於0的只讀配置源。
Jan 05 21:56:39 localhost 65438+10月28 21:56:39 gconfd(root-4162):解析的地址" xml:re。
Adwrite:/root/。gconf”指向1處的可寫配置源。
Jan 05 21:56:39 localhost 65438+10月28 21:56:39 gconfd(root-4162):解析的地址" xml:re。
僅ad:/etc/gconf/gconf . XML . defaults”指向位於2的只讀配置源。
Jan 05 21:58:20本地主機內核:MSDOS FS: IO charset cp936
值得註意的是,與連接時間日誌不同,進程統計子系統在默認情況下是不激活的,必須啟動。在Linux上
系統中的啟動進程統計使用accton命令,並且必須以root用戶身份運行。accton命令采用accton的形式。
文件,文件必須預先存在。首先使用touch命令創建壹個pacct文件:touch。
/var/log/pacct,然後運行accton:accton。
/var/log/pacct .壹旦accton被激活,您就可以使用lastcomm命令來監視系統中任何時候執行的命令。要關閉統計,可以使用。
參數的Accton命令。
3.日誌系統的工作原理和配置
3.1系統日誌
它用closelog和openlog * * *,向系統日誌程序發送消息。
Linux內核由許多子系統組成,包括網絡、文件訪問、內存管理等等。子系統需要向用戶發送壹些消息,包括消息的來源和重要性。所有子系統都應該向可維護的公共消息區域發送消息。所以,有壹個程序叫Syslog。
這個程序負責接收消息(如錯誤消息、警告消息和其他由系統核心和許多系統程序生成的信息,每個信息都包含重要級別)並將消息分發到適當的位置。通常
中,所有消息都記錄在壹個特定的文件-日誌文件中(通常是/var/adm或/var/log目錄中的消息文件),並且還會使用特別重要的消息。
它顯示在用戶終端窗口上。
syslog工具有兩個重要的文件:syslogd和syslog。會議
它可以接受訪問系統的日誌信息,並根據“/etc/syslog.conf”配置文件中的說明進行處理。守護進程和內核為訪問系統提供日誌信息。因此,任何想要生成日誌信息的程序都可以調用syslog接口來生成這些信息。
3.2 syslogd守護進程
就像其他復雜的操作系統壹樣,Linux由許多不同的子系統組成。壹些名為daemon的程序壹直在後臺運行。即
它們是“未知的”,不需要與用戶交互),處理壹些日常任務如打印、發送郵件、建立互聯網連接等等。每個子系統在發送日誌消息時都會給出壹條日誌消息。
該消息指定了壹種類型。壹條消息分為兩部分:“設施”和“級別”。“設備”標識發送消息的子系統,可以組合相同類型的消息。“級別”表示消息的重要性,範圍從調試(最不重要)到緊急(最重要)。設施和級別的組合稱為優先級。(詳細解釋參見5.3)
這是在/usr/include/sys/syslog.h中定義的。
用戶看不到守護程序,因為他們沒有窗口和用戶界面。然而,這些程序有時必須向用戶傳達壹些信息。為了實現這個目標,需要壹個特殊的機制。守護進程的壹個很好的例子是syslogd,它在後臺運行,將消息從日誌區傳輸到日誌文件。
功能界面
#包括
void openlog( char *,int,int)
其中可以是下列值的OR組合:
LOG_CONS:如果消息不能發送到syslogd,將直接輸出到系統控制臺。
LOG_NDELAY:立即打開到syslogd的連接。默認情況下,只有在第壹次寫入消息時,連接才會打開。
LOG_PERROR:同時將消息發送到stderr。
LOG_PID:記錄每條消息中的PID。
void syslog( int,char *)
其中是設施和水平的OR組合。
void closelog( void)
壹般只需要使用syslog()函數,其他函數可以省略。
3.3 syslog.conf
這是壹份非常重要的文件。位於“/etc/”目錄中。告訴syslogd如何根據設備和信息嚴重性報告信息。
該文件使用以下格式:
設施級行動
syslog.conf的第壹列facility.level用於指定日誌記錄功能和日誌記錄級別,用。,可以用*匹配。
所有記錄功能和記錄級別。第二列action是消息的分發目標。
空行和以#開頭的行是註釋,可以忽略。
Facility.level字段也稱為選擇器。
N facility指定了syslog功能,主要包括以下內容:
pam_pwdb報告了Auth身份驗證活動。
Authpriv包括對特權信息(如用戶名)的身份驗證活動。
關於Cron和at的信息。
關於守護進程和inetd守護進程的信息。
Kern內核信息首先通過klogd傳輸。
與印刷服務相關的Lpr信息。
與電子郵件相關的郵件信息
標記syslog內部函數用於生成時間戳。
來自新聞服務器的新聞信息
系統日誌生成的系統日誌信息。
由用戶程序生成的用戶信息。
由Uucp生成的uucp信息
Local 0-Local 7用於自定義程序,比如使用local5作為ssh函數。
*通配符代表除mark之外的所有函數。
級別級別決定了消息的重要性。
每個功能對應的優先級是按照壹定的順序排列的,emerg是最高級別,其次是alert,以此類推。默認情況下,/etc/syslog.conf記錄中指定的級別是該級別及更高級別。如果要用某壹級,可以用兩個運算符!(不相等)和=
例如,用戶。=info告訴syslog接受信息級別的所有用戶功能信息。
n以下等級的重要性逐漸降低:
緊急情況該系統不可用。
需要立即修改的警報條件。
Crit阻止某些工具或子系統實現其功能的錯誤條件。
Err是阻止工具或某些子系統實現某些功能的錯誤條件。
警告警告信息
重要通知的壹般條件
提供信息的消息。
調試不包含關於功能條件或問題的其他信息。
None沒有重要性級別,通常用於調試。
*除無以外的所有級別
n動作字段是壹個動作字段,它所代表的活動有很大的靈活性。特別是,名稱管道可以用來使syslogd生成後處理信息。
系統日誌主要支持以下活動:
文件將消息追加到文件的指定末尾。
終端或打印完整的串行或並行設備標識符
@主機遠程日誌服務器
Username將消息寫入指定的用戶。
命名管道指定用mkfifo命令創建的FIFO文件的絕對路徑。
*給所有用戶寫消息。
選擇域以指示消息的類型和優先級;操作字段指示syslogd在收到與選擇標準匹配的消息時采取的操作。每個選項由壹個設備和壹個優先級組成。當指示優先級時,syslogd將記錄具有相同或更高優先級的消息。例如,如果指定了“crit ”,將記錄所有標有crit、alert和emerg的消息。每行的操作字段指示當選擇字段選擇給定消息時,該消息應發送到哪裏。
以下是實際站點的配置(syslog.conf)文件:
#將重要的東西存放在關鍵的地方
#
*.=暴擊;kern.none /var/adm/critical
這將優先保存/var/adm/critical文件中的所有信息,除了壹些內核信息。
#內核消息首先存儲在內核中
#文件、關鍵消息和更高的消息也將被刪除
#到另壹臺主機和控制臺
#
克恩。* /var/adm/kernel
kern.crit @finlandia
kern . crit/dev/控制臺
kern.info克恩。!err /var/adm/kernel-info
第壹段代碼指示壹些內核設備訪問/var/adm/kernel文件中的信息。
第二段代碼直接引導所有具有crit和更高優先級的內核信息訪問遠程主機。如果它們也存儲在遠程主機上,您仍然可以嘗試找到損壞的原因。
第四行顯示syslogd將優先級從info到warning的所有內核信息保存在/var/adm/kernel-info文件夾中。排除所有錯誤和更高優先級。
#我們顯示的帶有mail.info的tcp包裝程序日誌
# tty 12上的所有連接
#
郵件。=info /dev/tty12
這會將所有使用mail . info(in source log _ mail | log _ info)的信息引導到/dev/tty12,編號12。
壹個控制臺。比如tcpwrapper。
tcpd
(8)默認情況下使用此選項。
#將所有與材料相關的郵件存儲在壹個文件中
郵件。*;郵件。!=信息/變量/管理/郵件
該模式匹配具有郵件功能的所有信息,但具有信息優先級的信息除外。它們將保存在文件/var/adm/mail中。
#將所有mail.info和news.info郵件記錄到info
#
郵件,新聞。=信息/變量/管理/信息
提取mail.info或news.info函數優先級的所有信息,並存儲在文件/var/adm/info中。
#將信息和通知消息記錄到消息文件中
#
*.= info*.=通知;\
mail.none /var/log/messages
將syslogd日誌中具有info或notice功能的所有信息存儲在/var/log/messages文件中,具有mail功能的所有信息除外。
#將信息消息記錄到消息文件
#
*.= info\
郵件,新聞。無/var/log/消息
該聲明將syslogd日誌中所有具有info優先級的信息存儲在/var/log/messages文件中。但是壹些具有郵件或新聞功能的信息不能被存儲。
#將使用墻壁顯示緊急消息
#
*.=緊急*
這行代碼告訴syslogd將所有緊急信息寫入所有當前登錄的用戶日誌。這將會實現。
#將定向優先級警報的消息
#給操作員
#
*.提醒魯特,喬伊
*.* @finlandia
該代碼將所有具有警告或更高權限的信息導向終端操作。
第二行代碼將所有信息發送到名為Finland的遠程主機。這段代碼非常有用,尤其是當所有syslog信息都將保存到壹臺機器上的集群計算機時。
3.4 klogd守護程序
Klog是壹種接受來自UNIX內核的消息的設備。
克洛德
守護進程獲取並記錄Linux內核信息。通常,syslogd記錄klogd。
所有收到的信息。換句話說,klogd將讀取內核信息並將其轉發給syslogd進程。但是,如果使用-f文件名變量調用klogd。
Klogd將所有信息記錄在filename中,而不是傳遞給syslogd。當為日誌記錄指定了另壹個文件時,klogd
所有級別或優先級都被寫入文件。Klogd中沒有類似/etc/syslog.conf的配置文件。用klogd而不是用它。
syslogd的好處是可以發現很多錯誤。
摘要
其中箭頭表示向目標進程發送消息或將信息寫入目標文件。
圖1 Linux日誌系統
日誌管理和日誌保護
Logrotate程序用於幫助用戶管理日誌文件。它作為自己的守護進程工作。Logrotate定期輪換日誌文件,並且可以定期重命名每個日誌文件。
創建壹個備份名稱,然後讓它的守護程序開始使用日誌文件的新副本。在/var/log/下,比如maillog,maillog.1,
Maillog.2,boot.log.1,boot.log.2等等。它由壹個配置文件驅動,該文件是
/etc/logroatate.conf .
以下是logroatate.conf文件的示例:
#有關詳細信息,請參見“人工日誌旋轉”
#每周輪換日誌文件
壹周的
# 7天周期
#保留4周的積壓工作
旋轉4
#每4周備份壹次日誌文件
#向根用戶發送錯誤
錯誤根源
#向root用戶報告錯誤
#輪換舊日誌文件後創建新的(空)日誌文件
創造
#傳輸舊的日誌文件後,創建新的日誌文件。
#如果希望壓縮日誌文件,請取消對此的註釋
#壓縮
#指定是否壓縮日誌文件。
# RPM程序包將日誌循環信息放入此目錄
包括/etc/logrotate.d
#沒有包擁有lastlog或wtmp -我們將在這裏輪換它們
/var/log/wtmp {
每月
創建0664根utmp
旋轉1
}
#可以在此配置特定於系統的日誌
在網絡應用中,有壹種保護日誌的方法。在網絡中設置壹個秘密的syslog主機,該主機的網卡設置為混雜模式,監控子網中的所有syslog包。
例如,所有需要發送日誌的主機都可以配置為向不存在的主機發送日誌。這樣,即使黑客捕獲了目標主機,也無法通過syslog.conf文件找到備份日誌的所有者。
機器,那只是壹個不存在的主機。實際上,可以補充交換機配置,以確保備份日誌主機上的syslog進程可以接受syslog包。比如放
syslog.conf中的傳輸日誌主機設置為。
@ 192.168 . 0 . 13,但實際網絡中並不存在這個日誌主機。實際可能是192.168.0.250或者其他主機在接受syslog包。