一、什么是系統(tǒng)日志
記錄系統(tǒng)活動(dòng)信息有幾個(gè)文件,他們分別記錄了不同的信息纤垂。
例如:何時(shí)矾策、何地 (來源 IP)、何人 (賬戶或者服務(wù)名稱)峭沦、做了什么動(dòng)作 贾虽。
換句話說就是:記錄系統(tǒng)在什么時(shí)候由哪個(gè)程序做了什么樣的行為時(shí),發(fā)生了何種的事件等等吼鱼。
二蓬豁、日志的重要性
其實(shí),不止系統(tǒng)有日志菇肃,在系統(tǒng)上運(yùn)行的很多應(yīng)用程序(軟件) 都有自己的日志記錄地粪。比如 MySQL 默認(rèn)的日志是 /var/log/mysqld.log
這些日志是我們排除的首要入手點(diǎn),假如系統(tǒng)或者服務(wù)出現(xiàn)了錯(cuò)誤琐谤,要第一時(shí)間分析日志中的報(bào)錯(cuò)信息蟆技。而不是去到網(wǎng)上搜索報(bào)錯(cuò)信息。因?yàn)榇蟛糠謺r(shí)候斗忌,一個(gè)報(bào)錯(cuò)信息质礼,有可能會(huì)有多種情況導(dǎo)致,所以要結(jié)合自己的系統(tǒng)環(huán)境分析具體的情況飞蹂。
三几苍、常用的系統(tǒng)日志
/var/log/messages
這個(gè)文件相當(dāng)?shù)闹匾瑤缀跸到y(tǒng)發(fā)生的錯(cuò)誤訊息 (或者是重要的信息) 都會(huì)記錄在這個(gè)文件中陈哑; 如果系統(tǒng)發(fā)生莫名的錯(cuò)誤時(shí)妻坝,這個(gè)文件是應(yīng)該首先查詢的。
/var/log/secure
基本上惊窖,只要牽涉到“需要輸入帳號(hào)密碼”的軟件刽宪,那么當(dāng)?shù)顷憰r(shí) (不管登陸正確或錯(cuò)誤) 都會(huì)被記錄在此文件中。
su
,sudo
等程序界酒、還有網(wǎng)絡(luò)連線的ssh
,telnet
等程序圣拄, 登陸信息都會(huì)被記載在這里
/var/log/boot.log
開機(jī)的時(shí)候系統(tǒng)核心會(huì)去偵測與啟動(dòng)硬件,接下來開始各種核心支持的功能啟動(dòng)等毁欣。這些流程都會(huì)記錄在 /var/log/boot.log 里面庇谆。只保留本次的開機(jī)信息。
/var/log/cron
記錄
crontab
調(diào)度有沒有實(shí)際被進(jìn)行凭疮? 進(jìn)行過程有沒有發(fā)生錯(cuò)誤饭耳?/etc/crontab
是否配置正確?
/var/log/dmesg
記錄系統(tǒng)在開機(jī)的時(shí)候核心偵測過程所產(chǎn)生的各項(xiàng)信息执解。
/var/log/lastlog
可以記錄系統(tǒng)上面所有的帳號(hào)最近一次登陸系統(tǒng)時(shí)的相關(guān)信息
-
/var/log/maillog
或/var/log/mail/*
記錄郵件的往來信息寞肖,其實(shí)主要是記錄 postfix (SMTP 協(xié)定提供者) 與 dovecot (POP3 協(xié)定提供者) 所產(chǎn)生的訊息啦。 SMTP 是發(fā)信所使用的通訊協(xié)定, POP3 則是收信使用的通訊協(xié)定新蟆。 postfix 與 dovecot 則分別是兩套達(dá)成通訊協(xié)定的軟件觅赊。
/var/log/wtmp, /var/log/faillog
這兩個(gè)文件可以記錄正確登陸系統(tǒng)者的帳號(hào)信息 (wtmp) 與錯(cuò)誤登陸時(shí)所使用的帳號(hào)信息 (faillog)
CentOS 使用 rsyslog.service
這個(gè)服務(wù)來統(tǒng)一管理這些系統(tǒng)日志文件。
五琼稻、日志服務(wù)和配置文件
查看日志服務(wù)的狀態(tài)
systemctl status rsyslog.service
rsyslog.service 的配置文件
既然是服務(wù)吮螺,就會(huì)有配置文件。
/etc/rsyslog.conf
配置文件用于設(shè)置
(1)什么服務(wù) (2)的什么級(jí)別的信息 (3)需要被記錄在哪里(設(shè)備或文件)
比如:
cron.* /var/log/cron
表示 關(guān)于計(jì)劃任務(wù)的所有級(jí)別的信息欣簇,都記錄到/var/log/cron
文件中
*.info;mail.none;authpriv.none;cron.none /var/log/messages
表示所有服務(wù)端info
級(jí)別的信息规脸,郵件的none
級(jí)別的信息,登錄認(rèn)證的none
基本的信息和計(jì)劃任務(wù)的none
基本的信息都記錄到/var/log/messages
文件中熊咽。
Linux 核心的 syslog 認(rèn)識(shí)的服務(wù)類型主要有下面這些:
Linux 核心的 syslog 定義的日志級(jí)別:
添加額外的記錄日志文件
編輯 /etc/rsyslog.conf
文件
# Add other file
*.info /var/log/shark.log
保存退出后
重啟服務(wù)
systemctl restart rsyslog
把一個(gè)Linux 主機(jī)設(shè)置為 日志服務(wù)器
通過配置 /etc/rsyslog.conf
可以把一個(gè) Linux 主機(jī)配置成一臺(tái) 日志服務(wù)器莫鸭,這樣其他 Linux 主機(jī)的日志,除了記錄在自己的本地外横殴,還會(huì)發(fā)送的 這臺(tái)日志服務(wù)器上一份被因。
服務(wù)端的設(shè)置
編輯 /etc/rsyslog.conf
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
重啟服務(wù)
systemctl restart rsyslog.service
檢查監(jiān)聽端口
[root@shark ~]# ss -natal |grep 514
LISTEN 0 25 *:514 *:*
LISTEN 0 25 :::514 :::*
客戶端設(shè)置
編輯 /etc/rsyslog.conf
*.* @@192.168.1.100
@@192.168.1.100
表示使用 TCP 協(xié)議傳輸數(shù)據(jù)到日志服務(wù)器 191.168.1.100 上
四、日志輪轉(zhuǎn)
什么是日志輪轉(zhuǎn)衫仑,為什么要輪轉(zhuǎn)
日志輪轉(zhuǎn)也叫日志的切割梨与,通俗來講就是對(duì)日志文件進(jìn)行大小的控制。
Linux 系統(tǒng)通常會(huì)長時(shí)間的不停機(jī)運(yùn)行文狱,這樣就會(huì)產(chǎn)生好多信息記錄到不同的日志中粥鞋。隨著時(shí)間的推移,日志的容量自然會(huì)越來越大瞄崇,那問題就來了呻粹,硬盤的空間是有限的,那為了控制日志文件的大小苏研,就需要對(duì)日志文件進(jìn)行控制等浊。
同時(shí)是把目前的日志文件改名,緊接著創(chuàng)建一個(gè)新的日志文件摹蘑,名稱和原來的一樣筹燕,重啟服務(wù)進(jìn)程,讓其向新的日志文件中寫日志衅鹿。
實(shí)施程序
logrotate 負(fù)責(zé)對(duì)系統(tǒng)日志的輪轉(zhuǎn)撒踪。
通過定時(shí)任務(wù)每天都會(huì)執(zhí)行一次。
[root@shark ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
logrotate 的配置文件
/etc/logrotate.conf
主配置文件大渤, 設(shè)置的默認(rèn)值
/etc/logrotate.d/
被包含的子配置文件制妄,可以對(duì)某一些服務(wù)設(shè)置特定的配置
logrotate 的主要功能就是將舊的日志文件改成舊文件, 并且重新創(chuàng)建一個(gè)新的空的文件來記錄兼犯。
如下圖:
/etc/logrotate.conf
的默認(rèn)值
weekly >==每周對(duì)系統(tǒng)的日志文件進(jìn)行一次 rotate 的工作
rotate 4 >==同類的日志文件,保留 4 份!
create >==創(chuàng)建一個(gè)新的空文件切黔,繼續(xù)記錄砸脊!
dateext >==可以讓被輪轉(zhuǎn)的文件名稱加上日期作為文件的后綴名!
#compress >==被輪轉(zhuǎn)的到日志文件是否壓縮
設(shè)置語法
登錄文件的絕對(duì)路徑文件名 ... {
個(gè)別的參數(shù)設(shè)置值纬霞,如 monthly, compress 等等
}
多個(gè)文件可以使用一套參數(shù)值凌埂。
/path/log/file1.log
/path/log/file2.log
{
...
}
假如,想對(duì)某個(gè)日志文件實(shí)現(xiàn)輪轉(zhuǎn)诗芜,建議在 /etc/logrotate.d/
目錄中添加子配置文件
比如
[root@shark logrotate.d]# cat syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
自定義日志輪轉(zhuǎn)
在 目錄下編輯一個(gè)文件
/var/log/shark1.log {
monthly >== 每月一次輪轉(zhuǎn)
maxsize=10M >== 文件大小大于 10M 時(shí)瞳抓, 也開始輪轉(zhuǎn)
rotate 2 >== 日志文件保留 2 個(gè)
compress >== 對(duì)舊的日志文件進(jìn)行壓縮
sharedscripts >== 輪轉(zhuǎn)之前需要先被執(zhí)行命令
prerotate
/usr/bin/chattr -a /var/log/shark1.log >==去掉特殊屬性
endscript
sharedscripts >== 輪轉(zhuǎn)之后需要被執(zhí)行的命令
postrotate
/usr/bin/chattr +a /var/log/shark1.log >== 特殊屬性,文件內(nèi)容只能增加不能刪除或者修改
endscript
}
測試
可以使用 logrotate
命令測試
logrotate -vf /etc/logrotate.conf
-v 顯示輪轉(zhuǎn)的詳情
-f 立刻進(jìn)行一次輪轉(zhuǎn)