一、系統(tǒng)日志
日志在所有應用系統(tǒng)中都占有極其重要的位置,本文主要介紹linux系統(tǒng)內核的日志,另外還介紹了一些日志分析工具。
1. 說明
看Linux系統(tǒng)信息日志主要的兩種途徑:
- dmesg,用來檢測和控制內核環(huán)緩沖。
- /var/log 下的文件
2. dmesg
Linux將系統(tǒng)啟動信息傳到ring buffer中,內核產生的信息由printk()函數(shù)打印出來。printk()函數(shù)打出的信息用數(shù)字表示消息重要級別,高于一定級別會打印到屏幕。
sudo dmesg > message.txt
打印最近一次的信息
sudo dmesg | tail -f
Linux系統(tǒng)啟動后,由/etc/init.d/sysklogd先后啟動klogd,syslogd兩個守護進程。
- klogd:kernel,記錄內核相關的日志? - syslogd:service,記錄應用程序的日志
3. klogd
使用klogd讀取內核信息有兩種方式:
- syslog()函數(shù)
- 讀取/proc/kmsg/得到內核printk()發(fā)出的信息。
klogd的輸出結果會傳送給syslogd進行處理,syslogd會根據/etc/syslog.conf的配置把log信息輸出到/var/log/下的不同文件中.
4. 常用的系統(tǒng)日志文件
/var/log/boot.log
記錄本次開機時的啟動信息,包括內核檢測硬件、各種內核支持的功能等。
/var/log/cron 計劃任務的日志
/var/log/dmesg
系統(tǒng)啟動時,內核檢測過程中產生的信息。
/var/log/lastlog
記錄賬號最后一次登陸信息。
/var/log/maillog或/var/log/mail/*
郵件往來記錄。
/var/log/messages
記錄很多信息,系統(tǒng)有問題時的必查文件。
/var/log/secure
記錄一些賬號登陸信息,如pop3、ssh、telnet、ftp登陸信息。
/var/log/wtmp,/var/log/faillog
成功與失敗登陸的記錄。
/var/log/httpd/*,/var/log/samba/*
一些網絡服務產生的日志。
5. syslogd
syslogd是一個分發(fā)器,它將接收到的所有日志按照/etc/syslog.conf的配置策略發(fā)送到這些日志應該去的地方,當然也包括從klogd接收到的日志。klogd首先接收內核的日志,然后將之發(fā)送給syslogd。syslog函數(shù)原型:
syslog(priority, "%s", string);
二、Rsyslog服務收集日志
1. Rsyslog服務說明
Rsyslog是Linux下強大而安全的日志處理系統(tǒng)。
Rsyslog可以單機運行,也可以C/S方式運行。
- 單機模式下,日志信息發(fā)送到本機的Rsyslog服務中,Rsyslog服務將日志記錄到本地存儲中;
- C/S模式下,服務端和客戶端都啟動Rsyslog進程,客戶端向服務端指定的Rsyslog端口發(fā)送日志。
2. 在Deepin或Ubuntu系統(tǒng)上安裝Rsyslog
# 安裝
sudo apt install rsyslog
rsyslogd -v
# 查看狀態(tài)
systemctl status rsyslog.service
# 重啟
systemctl restart rsyslog.service
# 啟動
systemctl start rsyslog.service
3. rsyslog.service的配置文件
- /etc/rsyslog.conf
2.3.1 配置C/S工作模式
服務端
配置文件:
vim /etc/rsyslog.conf
#################
#### MODULES ####
#################
# 開啟UDP端口
module(load="imudp")
input(type="imudp" port="514")
# 開啟TCP端口
module(load="imtcp")
input(type="imtcp" port="514")
# 可選配置--用于限制特定子網、IP等的訪問
$AllowedSender TCP, 127.0.0.1, 10.10.10.0/8, *.xiem.com
服務器端要配置放行指定的端口號。
客戶端
vim /etc/rsyslog.conf
$PreserveFQDN on # 允許主機名保留FQDN
##Enable sending of logs over UDP add the following line:
# 配置使用UDP發(fā)送消息
*.* @服務器ip或域名:514 # 添加遠程RSYSLOG服務器
##Enable sending of logs over TCP add the following line:
# 配置使用TCP發(fā)送消息
*.* @@服務器ip或域名:514
# 配置當服務端不在線時的處理方式:進行本地緩存
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1
2.3.2 查看日志
ls /var/log/rsyslog-client/
2.3.3 查看服務端監(jiān)聽的端口
netstat -4altunp | grep 514
三、logrotate 日志管理工具
1. logrotate說明
logrotate是一個Linux系統(tǒng)日志的管理工具。它可以切割、壓縮等其他軟件的日志文件軟件。logrotate是基于crontab運行的,所以這個時間點是由crontab控制的,其腳本是/etc/cron.daily/logrotate。Logrotate會調用配置文件/etc/logrotate.conf。可以在/etc/logrotate.d目錄里放置自定義好的配置文件,用來覆蓋Logrotate的缺省值。
2. centos使用logrotate切分Nginx日志示例:
yum -y install logrotate
查看配置文件位置:
rpm -ql logrotate
其中:
- /etc/logrotate.conf logrotate的配置文件是
- /etc/logrotate.d/ 是用于存儲其他配置文件的目錄
我們主要用它來切分nginx日志。
vim /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 7
missingok
notifempty
dateext
compress
sharedscripts
postrotate
if [ -f /run/nginx.pid ]; then
kill -USR1 `cat /run/nginx.pid`
fi
endscript
}
其中 /var/log/nginx/*.log /run/nginx.pid要以 log位置和nginx.conf里 pid的實際位置為準。
- 生產服務器 pid /var/run/nginx.pid;
- 測試服務器 pid /run/nginx.pid
手工運行:
/usr/sbin/logrotate -f /etc/logrotate.d/nginx
/usr/sbin/logrotate -d -f /etc/logrotate.d/nginx
四、logwatch日志分析工具
logwatch 是一個Perl編寫的開源日志分析器,可以對原始的日志文件進行解析并轉換成結構化文檔。
五、logger
在寫bash時可以用來記錄標準日志信息。
六、阿里云日志服務
阿里云日志服務給集中化日志管理提供了一個新的解決方案。其服務類似于ELK(Elasticsearch、Kibana 和 Logstash),支持多種數(shù)據數(shù)據的接入。
使用此服務需要在客戶機安裝阿里的logtail客戶端。支持正則表達式等多種查詢方式,也支持API接入。