Linux日誌
一、什麼是日誌?
日誌總體來說是來記錄歷史事件的,記錄在過去一段事件系統的行爲。將過去一段時間所發生的時間按時間序列記錄到指定的存儲結構中,記錄的主要內容有事件的來源、發生的時間、內容、事件的關鍵程度(日誌級別)。例如:在操作系統中安裝和卸載過什麼軟件,這些操作會記錄下來。記錄日誌的主要目的是在發生問題的時候,是解決問題的重合依據之一。
在Linux中,一般情況下會記錄系統進程(syslog)和內核事件(klogd)進程相關的日誌。
二、rsyslog
rsyslog是CentOS6系列提供記錄日誌的工具,具有如下特點:
支持多線程模式
支持像TCP,SSL,TLS,RELP等協議
可以將日誌信息記錄到像MySQL, PGSQL, Oracle等多種關係型數據中
強大的過濾器,可實現過濾系統信息中的任意部分
自定義輸出格式
適用於企業級別日誌記錄需求
三、facility
記錄日誌的設施,從功能或程序上對日誌進行分類,並由專門的工具負責記錄其日誌 。簡單的來說,就是記錄日誌的“主人”。常見的有如下:
auth | 認證相關的 |
authpriv | 認證授權相關的 |
cron | 週期性計劃任務相關的 |
daemon | 守護進程相關的 |
kern | 內核相關的 |
lpr | 打印相關的 |
郵件相關的 | |
mark | 防火牆標記相關的 |
news | 新聞組相關的(較早) |
security | 安全相關的,同auth |
syslog | 記錄日誌工具自己的日誌 |
user | 用戶相關的 |
uucp | unix to unix copy,unix之間共享文件的協議(較早) |
local0-local7 | 用戶自定義的 |
* | 表示所有 |
! | 表示取反 |
四、priority
稱之爲級別,來定義日誌的緊急程度。常見的有:
debug | 調試信息,最詳細的信息 |
info | 基本信息 |
notice | 通知信息 |
warn warnning | 警告信息 |
err error | 錯誤信息 |
crit | 藍色警戒信息 |
alert | 橙色警戒信息 |
emerg panic | 紅色警戒信息 |
這裏的級別從上到下表示級別越高,危險程度也越高,像emer級別是系統可能已經掛掉了。這裏也可使用 *來表示所有級別,none: 沒有任何級別 。
五、Target
target指的是日誌存儲的位置,常見的有:
本地文件路徑:例如/var/log/messages
用戶: *
日誌服務器:@SERVER_IP(使用UDP協議) @@SERVER_IP(使用TCP協議)
管道:|COMMAND
關係型數據庫: 例如: ommysql:localhost:Syslog:log:log(下面詳細介紹)
六、rsyslog的配置
rsyslog的主配置文件:/etc/rsyslog.conf,在這個配置文件中主要有三方面的定義,如下:
1、MODULES模塊,在這裏主要定義加載的模塊等信息 #### MODULES #### # 例如:作爲日誌服務器,使用udp/514作爲監聽端口 $ModLoad imudp $UDPServerRun 514 2、GLOBAL DIRECTIVES模塊,全局配置模塊,在這裏定義一些全局生效的屬性 #### 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 3、定義日誌規則 #### RULES #### # 其定義格式 : # facility.priority Target mail.info /var/log/maillog # 比指定級別更高的所有級別,包括指定的級別本身; mail.=info -/var/log/maillog # 明確指定級別,這裏的 - 表示異步寫入磁盤,不加默認同步寫入磁盤 mail.!info * # 除了指定級別,通知所有的用戶 *.info @172.16.10.88 # 所有facility的info級別,將日誌以udp通信方式記錄到172.16.10.88的日誌服務器上 mail.*: :ommysql:localhost:Syslog:ftp:ftppass # mail的所有級別,記錄到mysql數據庫中,登陸賬號是:ftp@localhost -u ftp -p ftppass。數據庫名稱是Syslog mail,news.info: # mail,news的info和更高的級別
日誌信息格式:
# 時間 主機 進程(PID):事件 Aug 7 02:32:14 server abrtd: Init complete, entering main loop Aug 7 02:32:26 server kernel: readahead-collector: starting delayed service auditd
七、日誌配置示例
1、日誌服務器的功能
實驗原理拓撲圖:
##########################實驗配置########################################## ###########################在172.16.10.9主機上############################### vim /etc/rsyslog.conf 修改如下內容: $ModLoad imtcp $InputTCPServerRun 514 *.info;mail.none;authpriv.none;cron.none /var/log/messages # 重啓服務 service rsyslog restart ########################################################################## ###########################在172.16.10.1上################################ vim /etc/rsyslog.conf # 這裏將需要的日誌發送到日誌服務器上 *.info;mail.none;authpriv.none;cron.none @@172.16.10.9 # 重啓服務 service rsyslog restart ######################################################################
測試結果:
2、支持mysql記錄日誌,使用loganalzer監控日誌
配置原理圖如下:
# 配置如下: ###########################################在172.16.10.9上############################################## 1、安裝rsyslog和mysql交互的軟件 yum install rsyslog-mysql -y 2、搭建好lamp平臺(這裏不再詳細介紹) yum install httpd mysql php mysql-server php-gd -y 3、導入rsyslog所用到的數據庫和表 # 具體通過 rpm -ql rsyslog-mysql 查看 mysql -u root -p < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql ### createDB.sql內容如下: CREATE DATABASE Syslog; USE Syslog; CREATE TABLE SystemEvents ( ID int unsigned not null auto_increment primary key, CustomerID bigint, ReceivedAt datetime NULL, DeviceReportedTime datetime NULL, Facility smallint NULL, Priority smallint NULL, FromHost varchar(60) NULL, Message text, NTSeverity int NULL, Importance int NULL, EventSource varchar(60), EventUser varchar(60) NULL, EventCategory int NULL, EventID int NULL, EventBinaryData text NULL, MaxAvailable int NULL, CurrUsage int NULL, MinUsage int NULL, MaxUsage int NULL, InfoUnitID int NULL , SysLogTag varchar(60), EventLogType varchar(60), GenericFileName VarChar(60), SystemID int NULL ); CREATE TABLE SystemEventsProperties ( ID int unsigned not null auto_increment primary key, SystemEventID int NULL , ParamName varchar(255) NULL , ParamValue text NULL ); 授權登陸用戶: mysql> grant all on Syslog.* to log@'localhost' identified by 'logpass'; mysql> flush privileges; 4、編輯配置文件 # vim /etc/rsyslog.conf $ModLoad ommysql *.info;mail.none;authpriv.none;cron.none :ommysql:localhost,Syslog,log,logpass 5、重啓服務 service rsyslog restart #################################################################################################################################
測試結果:記錄的結果如下,這樣看起來比較費勁。
通過webGUI展示日誌信息
# 具體安裝步驟,可參考 loganalyzer-3.6.5/INSTASLL tar xf loganalyzer-3.6.5.tar.gz cp loganalyzer-3.6.5/src/ /var/www/html/ -R cd /var/www/html/ mv src loganalyzer chown -R apache.apache loganalyzer # 重啓服務 /etc/init.d/httpd restart
通過 http://172.16.10.9/loganalyzer 具體安裝過程不再一一展示,重要的是每次安裝這類軟件的方法。幾乎每個軟件都會自帶一個像INSTALL,README的文件,安裝前儘量讀一下。
在安裝過程中,最重要的配置如下:要與對應的數據庫名,表名,登錄名一一對應。
loganalyzer:功能展示,可以形象的展示日誌信息。
其他的功能在這裏不再一一介紹,只能自己摸索。
OVER.