Linux系統擁有很是靈活和強大的日誌功能,能夠保存幾乎全部的操做記錄,並能夠從中檢索出咱們須要的信息。
大部分Linux發行版默認的日誌守護進程爲 syslog,位於 /etc/syslog 或 /etc/syslogd,默認配置文件爲 /etc/syslog.conf,任何但願生成日誌的程序均可以向 syslog 發送信息。
Linux系統內核和許多程序會產生各類錯誤信息、警告信息和其餘的提示信息,這些信息對管理員瞭解系統的運行狀態是很是有用的,因此應該把它們寫到日誌文件中去。完成這個過程的程序就是syslog。syslog能夠根據日誌的類別和優先級將日誌保存到不一樣的文件中。例如,爲了方便查閱,能夠把內核信息與其餘信息分開,單獨保存到一個獨立的日誌文件中。默認配置下,日誌文件一般都保存在「/var/log」目錄下。數據庫
下面是常見的日誌類型,但並非全部的Linux發行版都包含這些類型:
安全
類型 | 說明 |
---|---|
auth | 用戶認證時產生的日誌,如login命令、su命令。 |
authpriv | 與 auth 相似,可是隻能被特定用戶查看。 |
console | 針對系統控制檯的消息。 |
cron | 系統按期執行計劃任務時產生的日誌。 |
daemon | 某些守護進程產生的日誌。 |
ftp | FTP服務。 |
kern | 系統內核消息。 |
local0.local7 | 由自定義程序使用。 |
lpr | 與打印機活動有關。 |
郵件日誌。 | |
mark | 產生時間戳。系統每隔一段時間向日志文件中輸出當前時間,每行的格式相似於 May 26 11:17:09 rs2 -- MARK --,能夠由此推斷系統發生故障的大概時間。 |
news | 網絡新聞傳輸協議(nntp)產生的消息。 |
ntp | 網絡時間協議(ntp)產生的消息。 |
user | 用戶進程。 |
uucp | UUCP子系統。 |
常見的日誌優先級請見下標:
服務器
優先級 | 說明 |
---|---|
emerg | 緊急狀況,系統不可用(例如系統崩潰),通常會通知全部用戶。 |
alert | 須要當即修復,例如系統數據庫損壞。 |
crit | 危險狀況,例如硬盤錯誤,可能會阻礙程序的部分功能。 |
err | 通常錯誤消息。 |
warning | 警告。 |
notice | 不是錯誤,可是可能須要處理。 |
info | 通用性消息,通常用來提供有用信息。 |
debug | 調試程序產生的信息。 |
none | 沒有優先級,不記錄任何日誌消息。 |
全部的系統應用都會在 /var/log 目錄下建立日誌文件,或建立子目錄再建立日誌文件。例如:
網絡
文件/目錄 | 說明 |
---|---|
/var/log/boot.log | 開啓或重啓日誌。 |
/var/log/cron | 計劃任務日誌 |
/var/log/maillog | 郵件日誌。 |
/var/log/messages | 該日誌文件是許多進程日誌文件的彙總,從該文件能夠看出任何***企圖或成功的***。 |
/var/log/httpd 目錄 | Apache HTTP 服務日誌。 |
/var/log/samba 目錄 | samba 軟件日誌 |
/etc/syslog.conf 是 syslog 的配置文件,會根據日誌類型和優先級來決定將日誌保存到何處。典型的 syslog.conf 文件格式以下所示:ide
*.err;kern.debug;auth.notice /dev/console daemon,auth.notice /var/log/messages lpr.info /var/log/lpr.log mail.* /var/log/mail.log ftp.* /var/log/ftp.log auth.* @see.xidian.edu.cn auth.* root,amrood netinfo.err /var/log/netinfo.log install.* /var/log/install.log *.emerg * *.alert |program_name mark.* /dev/console
第一列爲日誌類型和日誌優先級的組合,每一個類型和優先級的組合稱爲一個選擇器;後面一列爲保存日誌的文件、服務器,或輸出日誌的終端。syslog 進程根據選擇器決定如何操做日誌。
對配置文件的幾點說明:ui
日誌類型和優先級由點號(.)分開,例如 kern.debug 表示由內核產生的調試信息。this
kern.debug 的優先級大於 debug。spa
星號(*)表示全部,例如 *.debug 表示全部類型的調試信息,kern.* 表示由內核產生的全部消息。操作系統
可使用逗號(,)分隔多個日誌類型,使用分號(;)分隔多個選擇器。命令行
對日誌的操做包括:
將日誌輸出到文件,例如 /var/log/maillog 或 /dev/console。
將消息發送給用戶,多個用戶用逗號(,)分隔,例如 root, amrood。
經過管道將消息發送給用戶程序,注意程序要放在管道符(|)後面。
將消息發送給其餘主機上的 syslog 進程,這時 /etc/syslog.conf 文件後面一列爲以@開頭的主機名,例如@see.xidian.edu.cn。
logger 是Shell命令,能夠經過該命令使用 syslog 的系統日誌模塊,還能夠從命令行直接向系統日誌文件寫入一行信息。
logger命令的語法爲:
logger [-i] [-f filename] [-p priority] [-t tag] [message...]
每一個選項的含義以下:
選項 | 說明 |
---|---|
-f filename | 將 filename 文件的內容做爲日誌。 |
-i | 每行都記錄 logger 進程的ID。 |
-p priority | 指定優先級;優先級必須是形如 facility.priority 的完整的選擇器,默認優先級爲 user.notice。 |
-t tag | 使用指定的標籤標記每個記錄行。 |
message | 要寫入的日誌內容,多條日誌以空格爲分隔;若是沒有指定日誌內容,而且 -f filename 選項爲空,那麼會把標準輸入做爲日誌內容。 |
例如,將ping命令的結果寫入日誌:
$ ping 192.168.0.1 | logger -it logger_test -p local3.notice& $ tail -f /var/log/userlog Oct 6 12:48:43 kevein logger_test[22484]: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. Oct 6 12:48:43 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=1 ttl=253 time=49.7 ms Oct 6 12:48:44 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=2 ttl=253 time=68.4 ms Oct 6 12:48:45 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=3 ttl=253 time=315 ms Oct 6 12:48:46 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=4 ttl=253 time=279 ms Oct 6 12:48:47 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=5 ttl=253 time=347 ms Oct 6 12:48:49 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=6 ttl=253 time=701 ms Oct 6 12:48:50 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=7 ttl=253 time=591 ms Oct 6 12:48:51 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=8 ttl=253 time=592 ms Oct 6 12:48:52 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=9 ttl=253 time=611 ms Oct 6 12:48:53 kevein logger_test[22484]: 64 bytes from 192.168.0.1: icmp_seq=10 ttl=253 time=931 ms
ping命令的結果成功輸出到 /var/log/userlog 文件。
命令 logger -it logger_test -p local3.notice 各選項的含義:
-i:在每行都記錄進程ID;
-t logger_test:每行記錄都加上「logger_test」這個標籤;
-p local3.notice:設置日誌類型和優先級。
日誌轉儲也叫日誌回捲或日誌輪轉。Linux中的日誌一般增加很快,會佔用大量硬盤空間,須要在日誌文件達到指定大小時分開存儲。
syslog 只負責接收日誌並保存到相應的文件,但不會對日誌文件進行管理,所以常常會形成日誌文件過大,尤爲是WEB服務器,輕易就能超過1G,給檢索帶來困難。
大多數Linux發行版使用 logrotate 或 newsyslog 對日誌進行管理。logrotate 程序不但能夠壓縮日誌文件,減小存儲空間,還能夠將日誌發送到指定 E-mail,方便管理員及時查看日誌。
例如,規定郵件日誌 /var/log/maillog 超過1G時轉儲,每週一次,那麼每隔一週 logrotate 進程就會檢查 /var/log/maillog 文件的大小:
若是沒有超過1G,不進行任何操做。
若是在1G~2G之間,就會建立新文件 /var/log/maillog.1,並將多出的1G日誌轉移到該文件,以給 /var/log/maillog 文件瘦身。
若是在2G~3G之間,會繼續建立新文件 /var/log/maillog.2,並將 /var/log/maillog.1 的內容轉移到該文件,將 /var/log/maillog 的內容轉移到 /var/log/maillog.1,以保持 /var/log/maillog 文件不超過1G。
能夠看到,每次轉存都會建立一個新文件(若是不存在),命名格式爲日誌文件名加一個數字(從1開始自動增加),以保持當前日誌文件和轉存後的日誌文件不超過指定大小。
logrotate 的主要配置文件是 /etc/logrotate.conf,/etc/logrotate.d 目錄是對 /etc/logrotate.conf 的補充,或者說爲了避免使 /etc/logrotate.conf 過大而設置。
能夠經過 cat 命令查看它的內容:
$cat /etc/logrotate.conf # see "man logrotate" for details //能夠查看幫助文檔 # rotate log files weekly weekly //設置每週轉儲一次 # keep 4 weeks worth of backlogs rotate 4 //最多轉儲4次 # create new (empty) log files after rotating old ones create //當轉儲後文件不存儲時建立它 # uncomment this if you want your log files compressed #compress //以壓縮方式轉儲 # RPM packages drop log rotation information into this directory include /etc/logrotate.d //其餘日誌文件的轉儲方式,包含在該目錄下 # no packages own wtmp -- we'll rotate them here /var/log/wtmp { //設置/var/log/wtmp日誌文件的轉儲參數 monthly //每個月轉儲 create 0664 root utmp //轉儲後文件不存在時建立它,文件全部者爲root,所屬組爲utmp,對應的權限爲0664 rotate 1 //最多轉儲一次 }
注意:include 容許管理員把多個分散的文件集中到一個,相似於C語言的 #include,將其餘文件的內容包含進當前文件。
include 很是有用,一些程序會把轉儲日誌的配置文件放在 /etc/logrotate.d 目錄,這些配置文件會覆蓋或增長 /etc/logrotate.conf 的配置項,若是沒有指定相關配置,那麼採用 /etc/logrotate.conf 的默認配置。
因此,建議將 /etc/logrotate.conf 做爲默認配置文件,第三方程序在 /etc/logrotate.d 目錄下自定義配置文件。
logrotate 也能夠做爲命令直接運行來修改配置文件。
系統日誌是由一個名爲syslog的服務管理的,如如下日誌文件都是由syslog日誌服務驅動的:
/var/log/message 系統啓動後的信息和錯誤日誌,記錄Linux操做系統常見的系統和服務錯誤信息 /var/log/secure Linux系統安全日誌,記錄用戶和工做組變壞狀況、用戶登錄認證狀況
/var/log/maillog 與郵件相關的日誌信息
/var/log/cron 與定時任務相關的日誌信息
/var/log/spooler 與UUCP和news設備相關的日誌信息
/var/log/boot.log 守護進程啓動和中止相關的日誌消息
/var/log/lastlog :記錄最後一次用戶成功登錄的時間、登錄IP等信息
/var/log/btmp :記錄Linux登錄失敗的用戶、時間以及遠程IP地址
/var/log/dmesg這個是硬件的
系統:
# uname -a # 查看內核/操做系統/CPU信息
# cat /etc/issue
# cat /etc/redhat-release # 查看操做系統版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看計算機名
# lspci -tv # 列出全部PCI設備
# lsusb -tv # 列出全部USB設備
# lsmod # 列出加載的內核模塊
# env # 查看環境變量
資源:
# free -m # 查看內存使用量和交換區使用量
# df -h # 查看各分區使用狀況
# du -sh <目錄名> # 查看指定目錄的大小
# grep MemTotal /proc/meminfo # 查看內存總量
# grep MemFree /proc/meminfo # 查看空閒內存量
# uptime # 查看系統運行時間、用戶數、負載
# cat /proc/loadavg # 查看系統負載
磁盤和分區:
# mount | column -t # 查看掛接的分區狀態
# fdisk -l # 查看全部分區
# swapon -s # 查看全部交換分區
# hdparm -i /dev/hda # 查看磁盤參數(僅適用於IDE設備)
# dmesg | grep IDE # 查看啓動時IDE設備檢測情況
網絡:
# ifconfig # 查看全部網絡接口的屬性
# iptables -L # 查看防火牆設置
# route -n # 查看路由表
# netstat -lntp # 查看全部監聽端口
# netstat -antp # 查看全部已經創建的鏈接
# netstat -s # 查看網絡統計信息
進程:
# ps -ef # 查看全部進程
# top # 實時顯示進程狀態(另外一篇文章裏面有詳細的介紹)
用戶:
# w # 查看活動用戶
# id <用戶名> # 查看指定用戶信息
# last # 查看用戶登陸日誌
# cut -d: -f1 /etc/passwd # 查看系統全部用戶
# cut -d: -f1 /etc/group # 查看系統全部組
# crontab -l # 查看當前用戶的計劃任務
服務:
# chkconfig –list # 列出全部系統服務
# chkconfig –list | grep on # 列出全部啓動的系統服務
程序:
# rpm -qa # 查看全部安裝的軟件包