天天看點

伺服器日志 之 rsyslog和logrotate 概念介紹

1 概述

系統日志是記錄系統中硬體、軟體和系統問題的資訊,同時還可以監視系統中發生的事件。使用者可以通過它來檢查錯誤發生的原因,或者尋找受到攻擊時攻擊者留下的痕迹。系統日志包括系統日志、應用程式日志和安全日志。

學會檢視并管理日志是運維管理人員必備技能。本文将對日志進行相關概念介紹,并介紹日志的軟體logsyslog和日志存儲管理軟體logrotate進行介紹

2 日志介紹

.日志:

曆史事件:時間,地點,人物(程式),事件

日志級别:事件的關鍵性程度,Loglevel

.系統日志服務:

.sysklogd:CentOS 5之前版本

syslogd: system application 記錄應用日志

klogd: linuxkernel 記錄核心日志

.事件記錄格式:

日期時間  主機   程序[pid]:   事件内容

.C/S架構:通過TCP或UDP協定的服務完成日志記錄傳送,将分布在不同主機的日志實作集中管理

rsyslog

.rsyslog特性:用于CentOS6和7

.多線程

.UDP, TCP, SSL, TLS, RELP

.MySQL, PGSQL, Oracle實作日志存儲

.強大的過濾器,可實作過濾記錄日志資訊中任意部分

.自定義輸出格式

.ELK介紹

ELK:elasticsearch, logstash, kibana

ELK是專業記錄和管理日志,适合于大型的環境

.非關系型分布式資料庫

.基于apache軟體基金會jakarta項目組的項目lucene

.Elasticsearch是個開源分布式搜尋引擎

.Logstash對日志進行收集、分析,并将其存儲供以後使用

.kibana 可以提供的日志分析友好的Web 界面

.術語介紹

術語解釋可以檢視man  logger,以下對主要的術語進行介紹

.facility:設施,從功能或程式上對日志進行歸類

每個應用程式有自己的特點,是以不同程式,記錄成不一樣的格式

軟體都是rsyslog,不同軟體接口都是一樣的,通過對軟體進行分類,已經定義不一樣的日志level,   記錄成不一樣的格式

facility(程式)分類有如下幾種

auth, authpriv, cron,daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, local0-local7,syslog.

 local0-local7表示定制,開發者自定義的軟體類别,自己歸類。

其中記錄相關的日志需要加載相應的子產品:rpm -ql rsyslog | grep .*\.so這個可以檢視rsyslog 這個軟體安裝産生的相關子產品

.Priority 定義記錄日志的優先級别,日志緩沖區的每一行文本開頭具有級别标記, 級别值越小則優先級越高. 有8個級别

預設是info級别,一般的重要事件,其中,記錄日志對時間的要求很高,

debug, info, notice, warn(warning),err(error), crit(critical), alert, emerg(panic)

系統定義了8個消息級别, 級别号從0到7分别為:

0: emerg :緻命級(KERN_EMESG)

1: alert:警戒級(KERN_ALERT)

2: crit:臨界級(KERN_CRIT)

3: err:錯誤級(KERN_ERR)

4: warning:告警級(KERN_WARN)

5: notice:注意級(KERN_NOTICE)

6: info:通知級(KERN_INFO)

7: debug:調試級(KERN_DEBUG) 

 .參看幫助:man 3 syslog 

.程式包:rsyslog

.主程式:/usr/sbin/rsyslogd

.CentOS 6:service rsyslog {start|stop|restart|status}

.CentOS 7:/usr/lib/systemd/system/rsyslog.service

.配置檔案:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf

.庫檔案:/lib64/rsyslog/*.so

.配置檔案格式:由三部分組成

MODULES:相關子產品配置

GLOBAL DIRECTIVES:全局配置

RULES:日志記錄相關的規則配置

.RULES配置格式:

facility.priority;facility.priority…       target

target:表示日志記錄的檔案

facility.priority表示裝置.等級,可以同時定義多個設施的不同等級到同一個檔案裡,用分号隔開。

.facility:

    *: 所有的facility

     facility1,facility2,facility3,...:指定的facility清單

.priority:

*: 所有級别

none:沒有級别,即不記錄

PRIORITY:指定級别(含)以上的所有級别

=PRIORITY:僅記錄指定級别的日志資訊

.target:

檔案路徑:通常在/var/log/,檔案路徑前的- 表示異步寫入

異步寫入表示寫寫入記憶體,後續在寫入日志

同步寫入表示系統一發生變化就可寫

使用者:将日志事件通知給指定的使用者,* 表示登入的所有使用者

日志伺服器:@host,把日志送往至指定的遠端伺服器記錄

管道:|COMMAND,轉發給其它指令處理

3  主要日志介紹

./var/log/secure:系統安全相關的日志,文本格式,應周期性分析。

包含驗證和授權方面資訊。例如,sshd會将所有資訊記錄(其中包括失敗登入)在這裡。當有其他機器通過ssh通路時,會記錄成功或者失敗的相關日志。

./var/log/btmp:目前系統上,使用者的失敗嘗試登入相關的日志資訊,專門用來記錄失敗登入的日志,二進制格式,

lastb指令進行查,lastb這個指令是專門用來打開檢視btmp這個檔案的

./var/log/wtmp:目前系統上,使用者正常登入系統的相關日志資訊,二進制格式,last指令可以檢視

last指令,專門用來檢視成功登入的日志,last是打開wtmp這個檔案的,其中,日志的systemboot 是指開機時間。

uptime也可以用來檢視距離最近一次開機有多長時間。

./var/log/lastlog:每一個使用者最近一次的登入資訊,二進制格式,lastlog指令可以檢視,僅記錄系統中所有使用者的最近一次登入的時間

./var/log/dmesg:系統引導過程中的日志資訊,存放本次計算機啟動的日志,文本格式,文本檢視工具檢視即可,專用指令dmesg檢視/var/log/dmesg的内容

./var/log/messages :系統中大部分的資訊

./var/log/anaconda : anaconda的日志,安裝作業系統時記錄的日志,centos6上沒有獨立的目錄,隻有/var/log/anaconda.*的記錄log,在centos7上将這些日志統一放在/var/log/anaconda這個目錄下。

4  Logrotate日志存儲

logrotate系統裡的程式,可以實作日志的滾動,防止日志太大,導緻系統性能太小。

.logrotate 程式是一個日志檔案管理工具。用來把舊的日志檔案删除,并建立新的日志檔案,稱為日志轉儲或滾動。可以根據日志檔案的大小,也可以根據其天數來轉儲,這個過程一般通過cron 程式來執行,計劃執行的任務寫在 /etc/cron.daily/logrotate 這個檔案裡

.配置檔案是/etc/logrotate.conf

.配置檔案主要參數如下

.compress 通過gzip 壓縮轉儲以後的日志

.nocompress 不需要壓縮時,用這個參數

.copytruncate 用于還在打開中的日志檔案,把目前日志備份并截斷,truncate保留表的結構,把資料清空

.nocopytruncate 備份日志檔案但是不截斷

.create mode owner group 轉儲檔案,使用指定的檔案模式建立新的日志檔案 

.nocreate 不建立新的日志檔案

.delaycompress 和compress 一起使用時,轉儲的日志檔案到下一次轉儲時才壓縮

.nodelaycompress 覆寫delaycompress 選項,轉儲并壓縮

.errors address 專儲時的錯誤資訊發送到指定的Email 位址

.ifempty 即使是空檔案也轉儲,是預設選項。

.notifempty 如果是空檔案的話,不轉儲

.mail address 把轉儲的日志檔案發送到指定的E-mail 位址

.nomail 轉儲時不發送日志檔案

.olddir directory 轉儲後的日志檔案放入指定的目錄,必須和目前日志檔案在同一個檔案系統

.noolddir 轉儲後的日志檔案和目前日志檔案放在同一個目錄下 

.prerotate/endscript 在轉儲以前需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行

.postrotate/endscript 在轉儲以後需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行

.daily 指定轉儲周期為每天

.weekly 指定轉儲周期為每周

.monthly 指定轉儲周期為每月

.size 大小指定日志超過多大時,就執行日志轉儲

.rotate count 指定日志檔案删除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份,達到5份日志後,把舊的日志删掉,最多隻會保留最近的5個日志

.Missingok 如果日志不存在,提示錯誤,是一個報警

.Nomissingok如果日志不存在,繼續下一次日志,不提示錯誤

5  例子

在配置檔案/etc/rsyslog.conf檔案寫入如下的配置,相關介紹如下

例一 記錄message日志

以下配置*.info表示info級别以及比info級别高的程式的log都記錄到 /var/log/messages,none表示mail,authpriv,cron這三個軟體的日志不記錄到  /var/log/messages裡

*.info;mail.none;authpriv.none;cron.none            /var/log/messages      

例二 不同facility記錄同一等級

如果是多個設施的同一等級記錄到同一日志檔案裡,那麼多個設施間可以用逗号隔開,例子

uucp,news.crit                        /var/log/spooler      

例三 發送消息

給所有的人都發送emerg 日志消息,有兩個寫法,

centos 7上

*.emerg                        :omusrmsg:*      

其中 omusrmsg是一個子產品,表示emergency級别的日志都會給所有人發消息

centos 6 上

*.emerg                          *      

這裡的星号或者是omusrmsg這兩個關鍵字,也可以用賬号代替,隻将特定的log發送給特定的人發送消息,如下例子,發送local2的日志是,給root和sunny兩個人發log

local2.*                      root,sunny      

例四 自定義日志

記錄特定軟體的日志,可用設定local0--local7來記錄,其中,local7預設 用來記錄計算機啟動的日志例子

local7.*                             /var/log/boot.log      

例五 定義軟體facility

軟體要定義那種facility,這個是在軟體的配置檔案中定義,如ssh的配置檔案/etc/ssh/sshd_config 中,定義了把ssh歸類到AUTHPRIV的facility裡,如下

#SyslogFacility AUTH
SyslogFacility AUTHPRIV      

而在日志的配置檔案/etc/rsyslog.conf中,把AUTHPRIV這中類型的facility定義記錄的log是/var/log/secure,如下

 # The authpriv file has restricted access.
 authpriv.*                      /var/log/secure      

是以,有關ssh這個軟體的log就會被記錄到檔案/var/log/secure裡

這裡如果要修改ssh軟體日志的記錄的檔案,可以自己定義,如在ssh的配置檔案/etc/ssh/sshd_config 中将該軟體的facility定義為 local2

SyslogFacility  local2
#LogLevel  INFO  #表示記錄info級别以及以上的log      

然後在日志的配置檔案/etc/rsyslog.conf,把定義local2這個facility的log為/var/log/sshd.log,這樣就可以實作自己定義log檔案了,例子

local2.*       /var/log/sshd.log      

這裡如果不在配置檔案裡定義軟體的facility,可以在軟體的配置檔案裡,自己調用log子產品,并且自己定義long的格式和存放的路徑,當然,這個是要相對成熟或者大型的軟體,如http,在配置檔案裡調用了log_config_module這個子產品,自己定義了log的記錄格式。http的log滾動也是調用了lograte來實作,滾動的配置檔案放在了/etc/logrotate.d/httpd裡。

例六 測試

測試log是否正常記錄,可以用logger這個工具, man logger檢視幫助,例子

logger  -p local2.info  "This is a test  log"      

繼續閱讀