# 系統日誌服務
如果某些程序沒有自己提供日誌功能,系統日誌可爲其提供日誌功能,但有些程序可自行提供日誌工能,如httpd
syslog:
syslogd:system
klogd:kernel
rsyslog:syslog的升級版,centos6上使用
多線程
可爲遠程主機記錄日誌
支持加密遠程傳輸
支持mysql,pgsql,oracle實現日誌存儲
強大的過濾器,可實現過濾日誌中的任何部分
自定義輸出格式
rsyslog程序環境
主程序:rsyslogd
配置文件:/etc/rsyslog.conf
服務腳本:/etc/rc.d/init.d/rsyslog
日誌收集
facility:
將多個應用程序的日誌統一成一個數據流放置在rsyslog中,多個應用程序一般與系統某個功能相關
系統中有很多不同的facility,如與安全相關的facility是authpriv,將所有與安全相關的程序的日誌放入同一日誌
/etc/rsyslog.conf配置文件
默認情況下主配置文件/etc/rsyslog.conf由3部分組成:
1) #### MODULES #### --->啓動/sbin/rsyslogd要加載的模塊
格式:$ModLoad module-name #註釋
$ModLoad 是關鍵字(/sbin/rsyslogd程序中定義的變量名)
module-name:出現在/lib64/rsyslog/ 中的模塊名稱,記住不帶.so
2) #### GLOBAL DIRECTIVES #### ----->全局規則設定
格式:
#註釋
規則內容
例如:
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
含義爲啓動時要讀取/etc/rsyslog.d/中所有以.conf爲結尾的文件
3) #### RULES #### ----->明細程序日誌記錄設定
格式:
#註釋
facility.priority target
facility:可理解爲“產生日誌對象”,例如:authpriv 是登陸認證的,mail 是郵件系統的。
auth
authpriv
cron
daemon
kern
lpr
mail
mark
news
security
user
uucp
syslog
local0-local7(用戶可自定義使用的facility)
priority:指定的是日誌級別,centos使用的日誌級別如下,由低到高爲:
debug,
info
notice
warning
error
critial
alert
emergency(panic)
指定級別:
*:所有級別
none:沒有級別
priority:此級別及更高級別的日誌信息
=priority:僅此級別的信息
級別越低產生的日誌越明細越多,級別越高產生的日誌越危險越少。
指定級別的方式:
*: 所有級別
none: 沒有級別,就是不記錄的意思
priority: 比此級別低的(包含該級別的)所有日誌信息都會記錄
=priority: 僅記錄指定級別
target:將日誌記錄於指定的目標地點,可以有:
系統文件中,例如:/var/log/secure
用戶:將日誌信息通知給用戶。
例如:系統默認emerg等級的日誌就顯示給系統上登陸用戶:
# Everybody gets emergency messages
*.emerg *
日誌服務器:使用 @SERVER_ADDRESS 定義日誌服務器地址,@@表示使用tcp514端口,@表示使用udp514端口
管道:通過管道傳遞給某些命令。 | COMMAND
在target前使用“-”表示異步寫入
動態創建日誌文件以及日誌翻滾
1、可以在配置文件的RULES中配置使用動態創建日誌文件
例如根據來源IP和日誌創建不同的文件和日誌文件名
$template DynamicFile,"/var/log/mylog/%FROMHOSTIP%/%$YEAR%/%$MONTH%/%$YEAR%-%$MONTH%-%$DAY%.log"
*.* ?DynamicFile
#聲明template DynamicFile並引用template。
2、使用日誌翻滾,按照日誌的大小或者時間來創建,壓縮,刪除,發送日誌文件
/var/log/log-file {
monthly
rotate 5
compress
delaycompress
missingok
notifempty
create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}
記錄系統中各個用戶的操作記錄
vi /etc/bashrc 加入如下內容:
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'
source /etc/bashrc