鍍金池/ 教程/ Linux/ 日志系統(tǒng)
Linux 學(xué)習(xí)記錄--開機掛載錯誤
日志系統(tǒng)
數(shù)據(jù)流重定向
內(nèi)存交換空間的構(gòu)建
文件系統(tǒng)簡介
Linux 學(xué)習(xí)記錄--軟件安裝 RPM|SRPM|YUM
文件特殊權(quán)限
目錄配置 FHS
文件內(nèi)容查閱
Boot Loader
文件壓縮
Linux 學(xué)習(xí)記錄--文件權(quán)限
Linux 命令縮寫
命令與文件的查詢
文件|目錄的默認(rèn)權(quán)限與隱藏權(quán)限
shell script
服務(wù)
Linux 學(xué)習(xí)記錄--程序編譯與函數(shù)庫
正則表達(dá)式與其應(yīng)用
關(guān)機相關(guān)指令
shell
vim 與 vi 常用命令
系統(tǒng)調(diào)用:進程控制
文件系統(tǒng)簡單操作
磁盤掛載與卸載
有名管道通訊
磁盤分區(qū),格式化與檢驗
工作管理與進程管理
匿名管道通訊
Linux 學(xué)習(xí)記錄--啟動流程
文件與目錄管理
管道命令
命名別名與歷史命令
文件備份|還原
shell變量
Linux 學(xué)習(xí)記錄--ACL 權(quán)限控制
內(nèi)核|內(nèi)核模塊編譯
文件管理相關(guān)系統(tǒng)編程

日志系統(tǒng)

日志系統(tǒng)對于一個系統(tǒng)來說是非常重要的,從日志文件我們可以獲取到系統(tǒng)的運行狀況,協(xié)助我們排查問題。
對于 CentOs 來說,日志系統(tǒng)主要包含2個服務(wù)與1個程序
syslogd:記錄系統(tǒng)與網(wǎng)絡(luò)服務(wù)的信息
klogd:記錄內(nèi)核產(chǎn)生的各項信息
logrotate:日志文件的輪替功能
說明:不同的 UNIX LIKE 對應(yīng)的服務(wù)可能不一樣

syslogd 服務(wù)

syslogd 服務(wù)配置文件分析

[root@localhost ~]# cat /etc/syslog.conf 
#kern.*                                                 /dev/console
*.info;mail.none;news.none;authpriv.none;cron.none              /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
# Log cron stuff
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log
news.=crit                                        /var/log/news/news.crit
news.=err                                         /var/log/news/news.err
news.notice                                       /var/log/news/news.notice

配置文件格式如下

【服務(wù)類型】 【信息等級設(shè)置】【信息存儲方式】
*以 cron. /var/log/cron 為例**
cron 是服務(wù)類型
. 是信息等級設(shè)置
/var/log/cron 信息存儲方式

服務(wù)類別

服務(wù)類別

說明

auth (authpriv)

主要與認(rèn)證有關(guān)的機制

cron

就是例行性工作 cron/at 等產(chǎn)生信息記錄的地方;

daemon

與各個 daemon(服務(wù)進程) 有關(guān)的信息;

kern

內(nèi)核核 (kernel) 產(chǎn)生信息的地方

lpr

與打印相關(guān)的信息

mail

與郵件相關(guān)的信息

news

與新聞組相關(guān)的信息

syslog

syslogd 程序本身產(chǎn)生的信息

user, uucp, local0 ~ local7

與 Unix like 機器本身有關(guān)的一些信息。

日志信息等級

等級

等級名稱

說明

1

info

僅是一些基本的信息說明而已;

2

notice

需要注意的信息;

3

warning
(warn)

警示的信息, info, notice, warn 這三個信息都是在告知一些基本信息而已,應(yīng)該還不至于造成一些系統(tǒng)運行困擾;

4

err
(error)

一些重大的錯誤信息

5

crit

比 error 還要嚴(yán)重的錯誤

6

alert

警告警告,已經(jīng)很有問題的等級,比 crit 還要嚴(yán)重

7

emerg
(panic)

疼痛等級,意指系統(tǒng)已經(jīng)幾乎要死機的狀態(tài)

. :代表比后面還要高的等級 (含該等級) 都被記錄下來的意思。如 mail .info
.=:代表所需要的等級就是后面接的等級而已
.!:代表不等于,除了該等級外的其他等級都記錄。
.*:代表說所有等級的信息都記錄

日志文件的輪替(logrotate)

日志文件隨著時間會變得越來越多,此時就需要進行日志文件輪替。以控制日志文件規(guī)模.logrotate 就是做這個用的

日志輪替程序配置文件包括

/etc/logrotate.conf :記錄整體輪替配置信息
/etc/logrotate.d/* : 記錄各個服務(wù)類型的輪替配置信息

其實可以在/etc/logrotate.conf 中定義配置各種服務(wù)類型的日志輪替配置信息,為了方便管理將每個服務(wù)類型的日志輪替配置信息形成獨立文件存儲在/etc/logrotate.d/*

[root@localhost logrotate.d]# ll
-rw-r--r-- 1 root root  144 2012-02-23 acpid
-rw-r--r-- 1 root root  288 2007-11-12 conman
…….
-rw-r--r-- 1 root root  100 10-02 06:17 wpa_supplicant
-rw-r--r-- 1 root root  100 2012-07-26 yum

logrotate 的配置文件

[root@localhost ~]# vim /etc/logrotate.conf

=>下面為默認(rèn)值。如不單獨配置將才有下面的默認(rèn)值
weekly    <==默認(rèn)每周進行一次 rotate 的工作
rotate 4  <==默認(rèn)保留4個登錄文件 
create    <==以新創(chuàng)建文件繼續(xù)存儲日志文件
#compress <==被更動的登錄文件是否需要壓縮?如果登錄文件太大則可考慮此參數(shù)啟動

include /etc/logrotate.d

/var/log/wtmp {       <==僅針對 /var/log/wtmp 所配置的參數(shù)
    monthly           <==每個月一次,取代每周!
    minsize 1M        <==文件容量一定要超過 1M 后才進行
    create 0664 root utmp <==指定新建文件的權(quán)限與所屬帳號/群組
    rotate 1          <==僅保留一個 
}

日志輪替規(guī)則

當(dāng)?shù)谝淮螆?zhí)行輪替,原本日志文件 msg 被重命名為 msg1,同時創(chuàng)建新的 msg 以記錄新的日志信息,當(dāng)?shù)漠?dāng)?shù)诙螆?zhí)行輪替,日志文件 msg1 被重命名為 msg2, msg 重命名為 msg1,同時創(chuàng)建新的 msg 以記錄新的日志信息,依次類推,日志文件最多保存的數(shù)量為 rotate 這個屬性所指定的數(shù)值

日志輪替文件語法

正如前面看到的。日志輪替方式是寫在配置文件中的,這里只做簡單的說明

[root@localhost logrotate.d]# cat named

/var/log/named.log {
    missingok
create 0644 named named
sharedscripts
    postrotate 
        /sbin/service named reload  2> /dev/null > /dev/null || true
    endscript
}

如上前面文件。Logrotate 輪替信息可以分為2部分
1. 內(nèi)部參數(shù)
2. 引用外部執(zhí)行

引用外部命令來進行額外的命令下達(dá),這個配置需與 sharedscripts .... endscript 配置合用才行。至于可用的環(huán)境為:
prerotate:在啟動 logrotate 之前進行的命令
postrotate:在做完 logrotate 之后啟動的命令

內(nèi)部參數(shù)
compress 通過 gzip 壓縮轉(zhuǎn)儲以后的日志
nocompress 不需要壓縮時,用這個參數(shù)
copytruncate 用于還在打開中的日志文件,把當(dāng)前日志備份并截斷
nocopytruncate 備份日志文件但是不截斷
create mode owner group 轉(zhuǎn)儲文件,使用指定的文件模式創(chuàng)建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用時,轉(zhuǎn)儲的日志文件到下一次轉(zhuǎn)儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉(zhuǎn)儲同時壓縮。
errors address 專儲時的錯誤信息發(fā)送到指定的 Email 地址
ifempty 即使是空文件也轉(zhuǎn)儲,這個是 logrotate 的缺省選項。
notifempty 如果是空文件的話,不轉(zhuǎn)儲
mail address 把轉(zhuǎn)儲的日志文件發(fā)送到指定的 E-mail 地址
nomail 轉(zhuǎn)儲時不發(fā)送日志文件
olddir directory 轉(zhuǎn)儲后的日志文件放入指定的目錄,必須和當(dāng)前日志文件在同一個文件系統(tǒng)
noolddir 轉(zhuǎn)儲后的日志文件和當(dāng)前日志文件放在同一個目錄下
prerotate/endscript 在轉(zhuǎn)儲以前需要執(zhí)行的命令可以放入這個對,這兩個關(guān)鍵字必須單獨成行
postrotate/endscript 在轉(zhuǎn)儲以后需要執(zhí)行的命令可以放入這個對,這兩個關(guān)鍵字必須單獨成行
daily 指定轉(zhuǎn)儲周期為每天
weekly 指定轉(zhuǎn)儲周期為每周
monthly 指定轉(zhuǎn)儲周期為每月
rotate count 指定日志文件刪除之前轉(zhuǎn)儲的次數(shù),0 指沒有備份,5 指保留5 個備份
tabootext [+] list 讓 logrotate 不轉(zhuǎn)儲指定擴展名的文件,缺省的擴展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 當(dāng)日志文件到達(dá)指定的大小時才轉(zhuǎn)儲,Size 可以指定 bytes (缺省)以及 K (sizek)或者M (sizem).

執(zhí)行日志輪替

語法:logrotate [-vf] logfile
選項與參數(shù):
-v:顯示運行過程
-f:不論是否符合配置文件的數(shù)據(jù),強制每個日志文件都進行輪替操作

舉例

[root@localhost /]# logrotate -vf /etc/logrotate.conf
………………..
[root@localhost /]# ll /var/log/messages*
-rw------- 1 root root      50 03-28 14:00 /var/log/messages
-rw------- 1 root root      50 03-28 14:00 /var/log/messages.1
-rw------- 1 root root      50 03-28 13:59 /var/log/messages.2
-rw------- 1 root root  333879 03-28 10:44 /var/log/messages.3
-rw------- 1 root root 1289326 03-25 08:50 /var/log/messages.4