Rsyslog系統日志管理


Rsyslog系統日志管理

課程目標

  • 了解日志的級別與作用
  • 掌握 rsyslog 服務的本地日志和遠程日志的管理
  • 能夠使用 logrotate 程序根據需求對日志進行輪轉

一、常見的系統日志

日志格式:文本日志/二進制日志/數據庫日志
默認的相關日志文件:
/var/log/boot.log	系統引導日志,記錄開機啟動信息
/var/log/dmesg		核心的啟動日志
/var/log/message	系統的日志文件
/var/log/maillog	郵件服務的日志
/var/log/xferlog	ftp服務的日志
/var/log/secure		網絡連接及系統登錄的安全信息
/var/log/cron		定時任務的日志
/var/log/wtmp		記錄所有的登入和登出	last -f 查看
/var/log/btmp		記錄失敗的登入嘗試

二、日志管理程序

  • 在RHEL6中,syslogd已經被rsyslog取代,它可以將日志寫入數據庫,並可以利用模板和插件控制輸入輸出。
  • rsyslog程序管理本地和遠程日志
    • 安裝軟件
    • 根據需求修改配置文件
    • 啟動服務
    • 測試驗證

三、日志級別

# man syslog
日志信息分為以下級別,從上到下級別一次降低
	none	none不是一個等級,它表示不記錄服務的所有信息
0 	emerg	系統不可用
1	alert	特別留意的報警信息
2	crit	非常嚴重的狀況
3	err		錯誤信息	
4	warning	警告信息
5	notice	稍微需要注意的信息
6	info	正常信息
7	debug	調試信息,開發人員使用

四、日志配置

[root@server ~]# rpm -q rsyslog
rsyslog-5.8.10-8.el6.x86_64
[root@server ~]# rpm -ql rsyslog
/etc/logrotate.d/syslog
/etc/pki/rsyslog	
/etc/rc.d/init.d/rsyslog		//啟動腳本
/etc/rsyslog.conf		//主配置文件
/etc/rsyslog.d			//子配置文件
/etc/sysconfig/rsyslog
/sbin/rsyslogd
/usr/share/man/man5/rsyslog.conf.5.gz
/usr/share/man/man8/rsyslogd.8.gz

[root@server ~]# grep -v ^# /etc/rsyslog.conf 
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf

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

authpriv.*                                              /var/log/secure

mail.*                                                  -/var/log/maillog


cron.*                                                  /var/log/cron

*.emerg                                                 *

uucp,news.crit                                          /var/log/spooler

local7.*                                                /var/log/boot.log

$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"

:programname, startswith, "spice-vdagent"	/var/log/spice-vdagent.log;SpiceTmpl

1.日志定義相關符號
配置文件中常見的表示符合
.	用來分隔服務和級別
*	任何服務,或者任何級別
= 	有等號表示等於某一級別,沒有等號表示大於或者等於某一級別
!	排除操作,前面有相同服務的表達式,這個操作才有意義
		代表從前面表達式所包含的內容中排除某些內容
;	用於分隔不同的	服務,級別,組合
,	用於分隔不同服務
-   用於指定目標文件時,代表異步寫入

舉例說明
mail.=info
mail.info		mail服務大於等於info級別的日志
mail.info;cron.=info	/var/log/test.log
mail,cron.err
cron.=warning
mail,cron.info

cron.info;cron.!=err	012456
0123456		0124567
cron.info;cron.!err		456
0123456		4567

特別說明:
 The facility is one of the following keywords: auth,
       authpriv, cron, daemon, kern, lpr, mail, mark, news,
       security  (same  as  auth),  syslog,  user, uucp and
       local0 through local7.(設備載體)
log facility 設備	設施:用來記錄一種類型日志的日志設備

daemon
auth
authpriv
user
mail
lpr
news
uucp
ftp
local7
       

本地日志管理ssh

 [root@server ~]# man sshd_config
 SyslogFacility
         Gives the facility code that is used when logging
         messages from sshd(8).  The possible values are: DAE-
         MON, USER, AUTH, AUTHPRIV, LOCAL0, LOCAL1, LOCAL2,
         LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.  The default
         is AUTH.
  1. 更改ssh服務的默認日志記錄載體
  2. 通過rsyslog程序去管理來自指定設備載體的日志記錄到指定的文件(修改/etc/rsyslog.conf)
  3. 測試驗證
1.修改ssh服務配置文件
[root@server ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
[root@server ~]# vim /etc/ssh/sshd_config 
SyslogFacility LOCAL6
2.重啟服務
[root@server ~]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
3.將來自LOCAL6設備載體日志記錄指定位置(rsyslog)
[root@server ~]# vim /etc/rsyslog.conf
local6.*                                                /var/log/ssh
4.重啟rsyslog服務
[root@server ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
5.客戶端測試
[root@client ~]# ssh 10.1.1.2
Last login: Fri Apr 26 12:27:33 2019 from 10.1.1.1
[root@server log]# ll ssh
-rw------- 1 root root 0 Apr 26 13:40 ssh
[root@server log]# tail -f ssh
Apr 26 13:42:09 server sshd[2447]: Accepted publickey for root from 10.1.1.3 port 35951 ssh2
Apr 26 13:44:10 server sshd[2447]: Received disconnect from 10.1.1.3: 11: disconnected by user
此時進行ssh訪問,日志會在local6和/var/log/messages里都出現

如果不想記錄到/messages,可修改/etc/rsyslog.conf,添加local6.none,則不再顯示ssh的日志
*.info;mail.none;authpriv.none;cron.none;local6.none              /var/log/messages

五、遠程日志管理

目前:把多台服務器的日志遠程記錄到其中一台日志服務器集中化管理,方便對其統一分析和管理

環境:

log-server:10.1.1.2

應用服務器:10.1.1.3

ssh服務服務——>其他人遠程訪問該應用服務器產生ssh服務日志——>遠程記錄到log-server上

client:10.1.1.4

ssh:10.1.1.3——>日志記錄10.1.1.2

需求:把web服務器上的ssh服務日志,遠程記錄到log-server上

思路:

web應用服務器上操作

  1. 將web服務器上的ssh服務的日志單獨記錄
    • 指定ssh服務的設備載體
    • 重啟服務
  2. 將來自於ssh服務的日志設備載體上的日志遠程發送到log-server上

以下操作在log-server上操作

  1. 通過修改配置文件,打開日志傳輸端口
    • 加載相應模塊 tcp | udp
    • 打開接收端口 默認514端口
  2. 啟動服務后日志默認會保存到/var/log/messages

步驟:

以下操作在log-service(10.1.1.2)服務上完成
1.加載相應模塊打開接收端口(可以選擇udp、tcp都打開)
[root@log-server ~]# vim /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
2.重啟服務
service rsyslog restart
[root@log-server ~]# netstat -nltup |grep 514		//驗證端口是否打開
tcp        0      0 0.0.0.0:514                 0.0.0.0:*                   LISTEN      2822/rsyslogd       
tcp        0      0 :::514                      :::*                        LISTEN      2822/rsyslogd       
udp        0      0 0.0.0.0:514                 0.0.0.0:*                               2822/rsyslogd       
udp        0      0 :::514                      :::*                                    2822/rsyslogd

以下操作在應用服務器完成(10.1.1.3):
1.指定ssh服務的日志文件的設備載體
[root@ssh-server ~]# vim /etc/ssh/sshd_config 
SyslogFacility LOCAL0
2.重啟ssh服務
[root@ssh-server ~]# service sshd restart
3.修改/etc/rsyslog.conf來指定ssh服務的日志發送到遠端去
[root@ssh-server ~]# vim /etc/rsyslog.conf 

# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514

local0.*        @10.1.1.2:514	//一個@表示udp,兩個@表示tcp  
最關鍵的一步,將日志遠程發送給10.1.1.2


4.重啟rsyslog服務
[root@ssh-server ~]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

測試驗證(client:10.1.1.4)
[root@client ~]# ssh 10.1.1.3
The authenticity of host '10.1.1.3 (10.1.1.3)' can't be established.
RSA key fingerprint is a5:98:06:58:84:35:d3:f4:4c:f8:43:a1:a5:12:f5:8e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.1.1.3' (RSA) to the list of known hosts.
root@10.1.1.3's password: 
Last login: Fri Apr 26 14:46:31 2019 from 10.1.1.1

[root@log-server ~]# tail -f /var/log/messages
Apr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2
[root@ssh-server ~]# tail -f /var/log/messages
Apr 26 15:12:30 ssh-server sshd[2858]: Accepted password for root from 10.1.1.4 port 58561 ssh2
(不想記錄就修改/etc/rsyslog.conf,將local0.none加在/var/log/messages那行里)

注意:selinux和防火牆,還有udp和tcp 端口514是否打開

六、日志輪轉

日志輪循(輪轉):日志輪轉,切割,備份,歸檔

  • 為什么要日志輪轉?
  1. 避免日志過大占滿/var/log的文件系統
  2. 方便日志查看
  3. 將丟棄系統中最舊的日志文件,以節省空間
  4. 日志輪轉的程序是logrotate
  5. logrotate本身不是系統守護進程,它是通過計划crond每天執行
  • 如何進行日志輪轉?
    • 了解相關配置文件
[root@log-server ~]# rpm -ql logrotate
/etc/cron.daily/logrotate		周期性計划任務
/etc/logrotate.conf				配置文件
/etc/logrotate.d				子配置文件存放路徑
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.7.8
/usr/share/doc/logrotate-3.7.8/CHANGES
/usr/share/doc/logrotate-3.7.8/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate.status

[root@log-server ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs	保留4周備份日志
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file		日期作為后綴給舊文件重命名
dateext

# 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 and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp		
	minsize 1M
    rotate 1	保留1份日志文件,每一個月備份一次日志文件
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

常見的一些參數:
daily		指定轉儲周期為每天
monthly		指定轉儲周期為每月
weekly		每周輪轉一次
rotate 4	同一個文件最多輪轉4次,4次之后就刪除該文件
create 0664 root uttmp	輪轉之后創建新文件,權限是0664,屬於root用戶和utmp組
dateext		用日期來做輪轉之后的文件的后綴名
compress	用gzip對輪轉后的日志進行壓縮
minsize	30K	文件必須大於30k,且周期到了,才會輪轉
size 30K	文件大於30k才會輪轉,不論周期是否已到
missingok	如果日志文件不存在,不報錯
notifempty	如果日志文件是空的,不輪轉
delaycompress	下一次輪轉的時候才壓縮
sharedscripts	不管有多少個文件待輪轉,prerotate和postrotate代碼只執行一次
prerotate		如果符合輪轉的條件,則在輪轉之前執行prerotate和endscript之間的shell代碼
postrotate		輪轉完成后執行postrotate和endscript之間的shell代碼

[root@server~]# cat /etc/logrotate.d/syslog 
這個子配置文件,沒有指定的參數都會以默認方式輪轉
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts	不管有多少個文件待輪轉,prerotate和postrotate代碼只執行一次
    postrotate		轉換完后執行postrotate和endscirpt之間的shell代碼
	/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
	輪轉后對rsyslog的pid進行刷新(但pid其實不變)
    endscript
}
思考:為什么輪轉后需要對rsyslog的pid進行刷新?
ll -i 查看文件的inode	
-HUP 平滑重啟

不以時間為后綴進行輪轉,在/etc/logrotate.conf/ nodateext

清空環境

重啟服務

結論

后刷新pid的話,logger -t "呵呵" "再見!"會寫入舊文件(messages.1)里面

將這句話放在/bin/kill這條命令后面,會寫入新文件里

最新的文件是messages,第一次強制輪轉后的舊文件是messages.1,cat messages.1會看到logger -t "呵呵" "再見!",到第二次就成messages.2。而第二次輪轉后的messages.1成了第一次輪轉后的messages的老文件。(看時間區別)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM