Linux系統學習系列——Linux系統日志管
理(上)
1. Linux rsyslogd服務及啟動方法(詳解版)
在 CentOS 6.x 中,日志服務已經由 rsyslogd 取代了原先的 syslogd,Red Hat 公司認為 syslogd 已經不能滿足作業中的需求,rsyslogd 相比 syslogd 具有一些新的特點:
● 基于TCP網路協議傳輸日志資訊,
● 更安全的網路傳輸方式,
● 有日志資訊的即時分析框架,
● 后臺資料庫,
● 在組態檔中可以寫簡單的邏輯判斷,
● 與syslog組態檔相兼容,
rsyslogd 日志服務更加先進,功能更多,但是,不論是該服務的使用,還是日志檔案的格式,其實都是和 syslogd 服務相兼容的,所以學習起來基本和 syslogd 服務一致,
我們如何知道 Linux 中的 rsyslogd 服務是否啟動了呢?如何查詢 rsyslogd 服務的自啟動狀態呢?命令如下:
[root@localhost ~]# ps aux | grep "rsyslog" | grep -v "grep"
root 1139 0.0 0.2 35948 1500 ? Sl 09:40 0:00 /sbin/rsyslogd -i/var/run/syslogd.pid -c 5
#有rsyslogd服務的行程,所以這個服務已經啟動了
[root@localhost ~]# chkconfig --list | grep rsyslog
rsyslog 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉
#rsyslog服務在2、3、4、5運行級別上是開機自啟動的
系統中的絕大多數日志檔案是由 rsyslogd 服務來統一管理的,只要各個行程將資訊給予這個服務,它就會自動地把日志按照特定的格式記錄到不同的日志檔案中,也就是說,采用 rsyslogd 服務管理的日志檔案,它們的格式應該是統一的,
在 Linux 系統中有一部分日志不是由 rsyslogd 服務來管理的,比如 apache 服務,它的日志是由 Apache 軟體自己產生并記錄的,并沒有呼叫 rsyslogd 服務,但是為了便于讀取,apache 日志檔案的格式和系統默認日志的格式是一致的,

需要Linux資料以及Linux入門資料+qun832218493獲取
2.Linux日志檔案(常見)及其功能
日志檔案是重要的系統資訊檔案,其中記錄了許多重要的系統事件,包括用戶的登錄資訊、系統的啟動資訊、系統的安全資訊、郵件相關資訊、各種服務相關資訊等,這些資訊有些非常敏感,所以在 Linux 中這些日志檔案只有 root 用戶可以讀取,
那么,系統日志檔案保存在什么地方呢?還記得 /var/ 目錄嗎?它是用來保存系統動態資料的目錄,那么 /var/log/ 目錄就是系統日志檔案的保存位置,我們通過表 1 來說明一下系統中的重要日志檔案,

除系統默認的日志之外,采用 RPM 包方式安裝的系統服務也會默認把日志記錄在 /var/log/ 目錄中(原始碼包安裝的服務日志存放在原始碼包指定的目錄中),不過這些日志不是由 rsyslogd 服務來記錄和管理的,而是各個服務使用自己的日志管理檔案來記錄自身的日志,以下介紹的日志目錄在你的 Linux 上不一定存在,只有安裝了相應的服務,日志才會出現,服務日志如表 2 所示,
3.Linux日志檔案格式分析
只要是由日志服務 rsyslogd 記錄的日志檔案,它們的格式就都是一樣的,所以我們只要了解了日志檔案的格式,就可以很輕松地看懂日志檔案,
日志檔案的格式包含以下 4 列:
● 事件產生的時間,
● 產生事件的服務器的主機名,
● 產生事件的服務名或程式名,
● 事件的具體資訊,
我們查看一下 /var/log/secure 日志,這個日志中主要記錄的是用戶驗證和授權方面的資訊,更加容易理解,命令如下:
[root@localhost ~]# vi /var/log/secure
Jun 5 03:20:46 localhost sshd[1630]:Accepted password for root from 192.168.0.104 port 4229 ssh2
6月5日 03:20:46 本地主機 sshd服務產生訊息:接收從192.168.0.104主機的4229埠發起的ssh連接的密碼
Jun 5 03:20:46 localhost sshd[1630]:pam_unix(sshd:session):session opened for user root by (uid=0)
#時間 本地主機 sshd服務中pam_unix模塊產生訊息:打開用戶root的會話(UID為0)
Jun 5 03:25:04 localhost useradd[1661]:new group:name=bb, GID=501
#時間 本地主機 useradd命令產生訊息:新建立bb組,GID為501
Jun 5 03:25:04 localhost useradd[1661]:new user:name=bb, UID=501, GID=501, home=/home/bb, shell=/bin/bash
Jun 5 03:25:09 localhost passwd:pam_unix(passwd:chauthtok):password changed for bb
我截取了一段日志的內容,注釋了其中的三句日志,剩余的兩句日志大家可以看懂了嗎?其實分析日志既是重要的系統維護作業,也是一項非常枯燥和煩瑣的作業,如果我們的服務器出現了一些問題,比如系統不正常重啟或關機、用戶非正常登錄、服務無法正常使用等,則都應該先查詢日志,
實際上,只要感覺到服務器不是很正常就應該查看日志,甚至在服務器沒有什么問題時也要養成定時查看系統日志的習慣,
4.rsyslogd組態檔格式及其內容詳解
rsyslogd 服務是依賴其組態檔 /etc/rsyslog.conf 來確定哪個服務的什么等級的日志資訊會被記錄在哪個位置的,也就是說,日志服務的組態檔中主要定義了服務的名稱、日志等級和日志記錄位置,
/etc/rsyslog.conf組態檔的格式
該組態檔的基本格式如下所示:
authpriv.* /var/log/secure
#服務名稱[連接符號]日志等級 日志記錄位置
#認證相關服務.所有日志等級 記錄在/var/log/secure日志
中
服務名稱
我們首先需要確定 rsyslogd 服務可以識別哪些服務的日志,也可以理解為以下這些服務委托 rsyslogd 服務來代為管理日志,這些服務如表 1 所示,

這些日志服務名稱是rsyslogd服務自己定義的,并不是實際的Linux的服務,當有服務需要由rsyslogd服務來幫助管理日志時,只需要呼叫這些服務名稱就可以實作日志的委托管理,
這些日志服務名稱大家可以使用命令“man 3 syslog”來查看,雖然我們的日志管理服務已經更新到rsyslogd,但是很多配置依然沿用了syslogd服務,在幫助檔案中仍然查看syslog服務的幫助資訊,
連接符號
日志服務連接日志等級的格式如下:
日志服務[連接符號]日志等級 日志記錄位置
在這里,連接符號可以被識別為以下三種,
- “.”代表只要比后面的等級高的(包含該等級)日志都記錄,比如,“cron.info”代表cron服務產生的日志,只要日志等級大于等于info級別,就記錄,
- “.=”代表只記錄所需等級的日志,其他等級的日志都不記錄,比如,“*.=emerg”代表人和日志服務產生的日志,只要等級是emerg等級,就記錄,這種用法極少見,了解就好,
- “.!”代表不等于,也就是除該等級的日志外,其他等級的日志都記錄,
日志等級
每個日志的重要性都是有差別的,比如,有些日志只是系統的一個日常提醒,看不看根本不會對系統的運行產生影響;但是有些日志就是系統和服務的警告甚至報錯資訊,這些日志如果不處理,就會威脅系統的穩定或安全,如果把這些日志全部寫入一個檔案,那么很有可能因為管理員的大意而忽略重要資訊,
比如,我們在作業中需要處理大量的郵件,筆者每天可能會接收到200多封郵件,而這些郵件中的絕大多數是不需要處理的普通資訊郵件,甚至是垃圾郵件,所以筆者每天都要先把這些大量的非重要郵件洗掉之后,才能找到真正需要處理的郵件,但是每封郵件的標題都差不多,有時會誤洗掉需要處理的郵件,這時筆者就非常懷念Linux的日志等級,如果郵件也能標識重要等級,就不會誤洗掉或漏處理重要郵件了,
郵件的等級資訊也可以使用“man 3 syslog”命令來查看,日志等級如表 2 所示,我們按照嚴重等級從低到高排列,

日志等級還可以被識別為“none”,如果日志等級是none,就說明忽略這個日志服務,該服務的所有日志都不再記錄,
日志記錄位置
日志記錄位置就是當前日志輸出到哪個日志檔案中保存,當然也可以把日志輸出到列印機列印,或者輸出到遠程日志服務器上(當然,遠程日志服務器要允許接收才行),日志的記錄位置也是固定的:
● 日志檔案的絕對路徑,這是最常見的日志保存方法,如“/var/log/secure”就是用來保存系統驗證和授權資訊日志的,
● 系統設備檔案,如“/dev/lp0”代表第一臺列印機,如果日志保存位置是列印機設備,當有日志時就會在列印機上列印,
● 轉發給遠程主機,因為可以選擇使用 TCP 和 UDP 協議傳輸日志資訊,所以有兩種發送格式:如果使用“@192.168.0.210:514”,就會把日志內容使用 UDP 協議發送到192.168.0.210 的 UDP 514 埠上;如果使用“@@192.168.0.210:514”,就會把日志內容使用 TCP 協議發送到 192.168.0.210 的 TCP 514 埠上,其中 514 是日志服務默認埠,當然,只要 192.168.0.210 同意接收此日志,就可以把日志內容保存在日志服務器上,
● 用戶名,如果是“root”,就會把日志發送給 root 用戶,當然 root 要在線,否則就收不到日志資訊了,發送日志給用戶時,可以使用“”代表發送給所有在線用戶,如“mail.**”就會把 mail 服務產生的所有級別的日志發送給所有在線用戶,如果需要把日志發送給多個在線用戶,則用戶名之間用“,”分隔,
● 忽略或丟棄日志,如果接收日志的物件是“~”,則代表這個日志不會被記錄,而被直接丟棄,如“local3. ~”代表忽略 local3 服務型別所有的日志都不記錄,
● 忽略或丟棄日志,如果接收日志的物件是“~”,則代表這個日志不會被記錄,而被直接丟棄,如
“local3.* ~”代表忽略 local3 服務型別所有的日志都不記錄,
/etc/rsyslog.conf組態檔的內容
我們知道了/etc/rsyslog.conf 組態檔中日志的格式,接下來就看看這個組態檔的具體內容,
[root@localhost ~]# vi /etc/rsyslog.conf
#查看組態檔的內容
#rsyslog v5 configuration file
For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
*### MODULES ###
#加載棋塊
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
#加載imixsock模塊,為本地系統登錄提供支持
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#加載imklog模塊,為內核登錄提供支持
#$ModLoad immark # provides --MARK-- message capability
#加載immark模塊,提供標記資訊的能力
Provides UDP syslog reception
#$ModLoad imudp
#SUDPServerRun 514
#加載UPD模塊,允許使用UDP的514埠接收采用UDP協議轉發的日志
Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#加栽TCP摸塊,允許使用TCP的514編口接收采用TCP協議轉發的日志
GLOBAL DIRECTIVES
#定義全域設定
#Use default timestamp format
#ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #定義曰志的時間使用默認的時間戳格式
#File syncing capability is disabled by default. This feature is usually not required,
#not useful and an extreme performance hit
#$ActionFileEnableSync on
#檔案同步功能,默認沒有開啟,是注釋的
#Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#包含/etx/tsyslog.d/目錄中所有的".conf"子組態檔,也就是說,這個目錄中的所有子組態檔也同時生效
RULES
#日志檔案保存規則
#Log all kernel messages to the console.
#Logging much else clutters up the screen.
#kern.* /dev/console
#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
#所有服務.info以上級到的日志保存在/var/log/messages日志檔案中
#mail, authpriv^ cron的B志不記錄在/var/log/messages曰志檔案中,因為它們部有自己的曰志檔案
#所以/var/log/messages日志是最重要的系統日志檔案,需要經常查看
#The authpriv file has restricted access.
authpriv.* /var/log/secure
#用戶認證服務所有級別的日志保存在/vai/1og/secure日志檔案中
#Log all the mail messages in one place.
mail.* -/var/log/maillog
#mail服務的所有級別的日志保存在/var/log/maillog 日志檔案中
#"-"的含義是日志先在記憶體中保存.當曰志足夠多之后.再向檔案中保存
Log cron stuff
cron.* /var/log/cron
#計対任務的所有日志保存在/var/log/cron日志檔案中
Everybody gets emergency messages
#所有日志服務的疼痛等級日志對所有在線用戶廣播
#Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler
#uucp和news曰志服務的crit以上級別的日志保存在/var/log/sppoler曰志檔案中
#Save boot messages also to boot.log
local7.* /var/log/boot.log
#loacl7 日志服務的所有日志寫入/var/log/boot.log 日志檔案中 #會把開機時的檢測資訊在顯示到螢屏的同時寫入/var/log/boot.log 日志檔案中
begin forwarding rule
#定義轉發規到
#The statement between the begin ... end define a SINGLE forwarding
#rule. They belong together, do NOT split them. If you create multiple
forwarding rules, duplicate the whole block! # Remote Logging (we use TCP for reliable delivery) # # An on-disk queue is created for this action. If the remote host is # down, messages are spooled to disk and sent when it is up again. #SWorkDirectory /var/lib/rsyslog # where to place spool files #$ActionQueueFileName fwdRulel # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList t run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional #*?* @6remote-host:514 # ### end of the forwarding rule
這樣日志服務器和客戶端就搭建完成了,以后 192.168.0.211 這臺客戶機上所產生的所有日志都會記錄到 192.168.0.210 上,比如:
#在客戶機上(192.168.0.211)
[root@wwwl ~]# useradd zhangsan
#添加zhansan用戶提示符的主機名是www1)
#在限務器(192.168.0.210)上
[root@localhost ~]# vi /var/log/secure
#査看服務器的secure日志(注意:主機名是localhost)
Aug 8 23:00:57 wwwl sshd【1408]: Server listening on 0.0.0.0 port 22.
Aug 8 23:00:57 wwwl sshd[1408]: Server listening on :: port 22.
Aug 8 23:01:58 wwwl sshd[1630]: Accepted password for root from 192.168.0.101 port 7036 ssh2
Aug 8 23:01:58 wwwl sshd[1630]: pam_unix(sshd:session): session opened for user root by (uid=0)
Aug 8 23:03:03 wwwl useradd[1654]: new group: name=zhangsan, GID-505
Aug 8 23:03:03 wwwl useradd[1654]: new user: name=zhangsan, UXD=505, GID=505,
home=/home/zhangsan, shell=/bin/bash
Aug 8 23:03:09 wwwl passwd: pam_unix(passwd:chauthtok): password changed for zhangsan
#注意:查看到的日志內容的主機名是www1,說明我們雖然查看的是服務器的日志檔案,但是在其中可以看到客戶機的日志內容
需要注意的是,日志服務是通過主機名來區別不同的服務器的,所以,如果我們配置了日志服務,則需要給所有的服務器分配不同的主機名,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/204129.html
標籤:其他
上一篇:IPV4為服務器搭代理
下一篇:LVS-NAT部署案例
