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"
6? 總結
本文僅對日志的概念和管理軟件rsyslog,日志存儲軟件logrorate進行介紹。日志也可以通過網絡幾種存儲在一臺log服務器上.關于如何部署,請查看作者的博客 服務器日志? 之? 一鍵部署log服務器。