文章目錄
- 1、日志服務簡介
- 2、linux系統中的常見日志
- 3、日志服務Rsyslog
- (1)服務對應rpm包
- (2)服務組態檔
- (3)組態檔格式
- 服務名稱
- 連接符號
- 日志等級
- 日志記錄位置
- (4)組態檔內容
- 4、日志輪替
- (1)組態檔內容詳解
- (2)logrotate組態檔的主要引數
- (3)案例決議
1、日志服務簡介
在Centos 6.x/Redhat 6.x中日志服務已經由rsyslog取代了原先的syslog服務,rsyslog相比syslog具有一些新的特點:
- 基于TCP網路協議傳輸日志資訊;
- 更安全的網路傳輸方式;
- 有日志訊息的及時分析框架;
- 后臺資料庫;
- 組態檔中可以寫簡單的邏輯判斷;
- 與syslog組態檔相兼容;
2、linux系統中的常見日志
系統中的日志默認存盤路徑為:/var/log/
[root@Redhat8 log]# pwd
/var/log
[root@Redhat8 log]# ls
anaconda dnf.librepo.log-20210829 libvirt secure-20210822
audit dnf.librepo.log-20210905 maillog secure-20210829
boot.log-20210821 dnf.log maillog-20210822 secure-20210905
boot.log-20210825 dnf.log.1 maillog-20210829 speech-dispatcher
boot.log-20210902 dnf.rpm.log maillog-20210905 spooler
btmp firewalld mariadb spooler-20210822
btmp-20210901 gdm messages spooler-20210829
chrony glusterfs messages-20210822 spooler-20210905
cron hawkey.log messages-20210829 sssd
cron-20210822 hawkey.log-20210822 messages-20210905 swtpm
cron-20210829 hawkey.log-20210829 private tuned
cron-20210905 hawkey.log-20210905 qemu-ga vmware-vgauthsvc.log.0
cups httpd rhsm wtmp
dnf.librepo.log insights-client samba
dnf.librepo.log-20210822 lastlog secure
日志檔案說明:
- /var/log/cron :記錄系統定時任務相關日志;
- /var/logcups/ :記錄列印資訊的日志;
- /var/log/dmesg :記錄系統在開機時內核自檢的資訊,可以使用dmesg命令直接查看內核自檢資訊;
[root@Redhat8 log]# dmesg
- /var/log/btmp :記錄錯誤登錄日志,此檔案為二進制檔案(保護日志內容,防止陌生用戶查看并可修改日志內容),需要使用lastb命令查看;
[root@Redhat8 log]# lastb
- /var/log/lastlog :記錄系統中所有用戶最后一次的登錄時間的日志,此檔案為二進制檔案,需要使用lastlog命令查看;
[root@Redhat8 log]# lastlog
-
/var/log/maillog :記錄郵件資訊;
-
/var/log/message :記錄系統重要資訊的日志,這個日志檔案中會記錄Linux系統的絕大多數重要資訊,如果系統出現問題,首先檢查此日志檔案;
-
/var/log/secure :記錄驗證和授權方面的資訊,只要涉及賬戶和密碼的程式都會被記錄;
-
/var/log/wtmp :永久記錄所有用戶的登錄、注銷資訊,同時記錄系統的啟動、重啟、關機事件,此檔案為二進制檔案,需要使用last命令查看;
[root@Redhat8 log]# last -
/var/log/utmp :記錄當前已經登錄的用戶資訊,此檔案會隨著用戶的登錄和注銷而不斷變化,只記錄當前登錄用戶的資訊,此檔案為二進制檔案,需要使用w、who、users等命令查看;
[root@Redhat8 log]# w
00:09:31 up 9 days, 5:59, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty2 tty2 01Sep21 9days 9:11 0.00s /usr/libexec/gsd-disk-utility-notify
root pts/0 10.81.10.55 23:58 0.00s 0.03s 0.00s w
[root@Redhat8 log]#
[root@Redhat8 log]# who
root tty2 2021-09-01 18:12 (tty2)
root pts/0 2021-09-10 23:58 (10.81.10.55)
[root@Redhat8 log]# users
root root
除了系統默認的日志之外,采用rpm方式安裝的系統服務也會默認將日志記錄在/var/log/目錄下,不過這些日志不是由rsyslog服務來記錄和管理的,而是各個服務使用自己的日志管理檔案來記錄自身日志;
/var/log/httpd/
/var/log/mail/
/var/log/samba/
/var/log/ssd/
3、日志服務Rsyslog
(1)服務對應rpm包
[root@Redhat8 log]# rpm -qa rsyslog
rsyslog-8.1911.0-3.el8.x86_64
(2)服務組態檔
[root@Redhat8 log]# rpm -qc rsyslog
/etc/logrotate.d/syslog
/etc/rsyslog.conf
/etc/sysconfig/rsyslog
(3)組態檔格式
#服務名稱[連接符號]日志等級 日志記錄位置
authpriv.* /var/log/secure
服務名稱
- auth (LOG_AUTH) :安全和認證相關訊息,不推薦使用authpriv替代;
- authpriv (LOG_AUTHPRIV) :安全和認證相關訊息,私有;
- cron (LOG_CRON) :系統定時任務cront與at產生的相關日志;
- daemon (LOG_DAEMON) :各個守護行程產生的日志;
- ftp (LOG_FTP) :ftp守護行程產生的日志;
- kern (LOG_KERN) :內核產生的日志;
- local0-local7 (LOG_LOCAL0-7) :為本地使用預留的服務;
- lpr (LOG_LPR) :列印產生的日志;
- mail (LOG_MAIL) :郵件收發日志;
- news (LOG_NEWS) :與新聞服務器相關的日志;
- syslog (LOG_SYSLOG) :有syslog服務產生的日志;
- user (LOG_USER) :用戶等級類別的日志;
- uucp (LOG_UUCP) :uucp子系統的日志資訊;
…
連接符號
- " . " :只要比后面的等級高的(包含該等級)日志都記錄下來;
- " .= " :只記錄所需等級的日志,其他等級不記錄;
- " .! " :除了該等級的日志外其他等級全部記錄;
日志等級
- debug (LOG_DEBUG) :一般的除錯資訊說明;
- info (LOG_INFO) :基本的通知資訊;
- notice (LOG_NOTICE) :普通資訊,有一定重要性;
- warning (LOG_WARNING) :警告資訊,不會影響到服務的運行;
- err (LOG_ERR) :錯誤資訊,可以影響服務或系統的運行;
- crit (LOG_CRIT) :臨界狀況資訊,比err等級嚴重;
- alert (LOG_ALERT) :警告狀態資訊,比crit等級嚴重,需要立即采取行動;
- emerg (LOG_EMERG) :疼痛等級資訊,系統無法使用;
-
- :所有等級資訊;
- none :忽略此日志服務;
日志記錄位置
即當前日志輸出到那個檔案中進行保存,或者輸出到某個遠程日志服務器上(UDP 514),日志的記錄位置是固定的;
- 日志檔案的絕對路徑:最常見的保護方法;
- 系統設備檔案:代表列印機輸出方式;
- 轉發到遠程主機:使用TCP/UDP埠發送到遠程主機上,若使用"@192.168.10.10:514",就會把日志內容使用UDP協議發送到192.168.10.10的UDP 514埠,若使用"@@192.168.10.10:514",就會把日志內容使用TCP協議發送到192.168.10.10的TCP 514埠;
- 用戶名:此處可以定義接受該日志用戶名," * " 代表所有用戶;
- " ~ " 代表忽略此日志,不定義接收;
(4)組態檔內容
[root@Redhat8 log]# cat /etc/rsyslog.conf
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
#加載模塊
module(load="imuxsock" # provides support for local system logging (e.g. via logger command)
#加載imuxsock模塊,為本地系統登錄提供支持
SysSock.Use="off") # Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
module(load="imjournal" # provides access to the systemd journal
StateFile="imjournal.state") # File to store the position in the journal
#module(load="imklog") # reads kernel messages (the same are read from journald)
#加載imklog模塊,為內核登錄提供支持
#module(load"immark") # provides --MARK-- message capability
#加載immark模塊,提供標記資訊的能力
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")
#加載UDP模塊,允許使用UDP的514埠接收采用UDP協議轉發的日志
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
#module(load="imtcp") # needs to be done just once
#input(type="imtcp" port="514")
#加載TCP模塊,允許使用TCP的514埠接收采用TCP協議轉發的日志
#### GLOBAL DIRECTIVES ####
#定義全域設定
# Where to place auxiliary files
global(workDirectory="/var/lib/rsyslog")
#作業目錄位置
# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
#定義日志的時間使用默認的時間戳格式
# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")
#包含/etc/rsyslog.d/目錄中的所有以conf子組態檔
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
#所有日志存放在messages檔案內,除了郵件、認證、定時任務
# The authpriv file has restricted access.
authpriv.* /var/log/secure
#認證日志記錄在secure檔案內
# Log all the mail messages in one place.
mail.* -/var/log/maillog
#郵件日志記錄在maillog檔案內
# Log cron stuff
cron.* /var/log/cron
#定時任務記錄在cron檔案內
# Everybody gets emergency messages
*.emerg :omusrmsg:*
#所有疼痛級別日志全網通知
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### sample forwarding rule ###
#action(type="omfwd"
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#queue.filename="fwdRule1" # unique name prefix for spool files
#queue.maxdiskspace="1g" # 1gb space limit (use as much as possible)
#queue.saveonshutdown="on" # save messages to disk on shutdown
#queue.type="LinkedList" # run asynchronously
#action.resumeRetryCount="-1" # infinite retries if host is down
# Remote Logging (we use TCP for reliable delivery)
# remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
#Target="remote_host" Port="XXX" Protocol="tcp")
4、日志輪替
日志輪替的作用就是把舊的日志檔案移動并改名,同時建立新的空日志檔案,當舊日志檔案超過保存的范圍之后,就會進行洗掉,那么舊日志檔案改名之后,命令規范即參考下面組態檔內容;
若組態檔中有 dateext 引數,則日志檔案名稱不會重疊,此引數不需要日志檔案改名,只需要保存指定的日志個數,洗掉多余的日志檔案即可;
[root@Redhat8 log]# ll | grep -w secure
-rw-------. 1 root root 1790 Sep 14 21:50 secure
-rw-------. 1 root root 12375 Aug 21 22:59 secure-20210822
-rw-------. 1 root root 82846 Aug 28 02:19 secure-20210829
-rw-------. 1 root root 7135 Sep 3 21:00 secure-20210905
-rw-------. 1 root root 6715 Sep 11 01:50 secure-20210912
若沒有 dateext ,那么日志檔案就需要進行改名了,第一次進行日志輪替時,當前的 secure 日志會自動改名為 secure.1 ,然后新建 secure 日志用來保存新的日志,當第二次進行輪替時, secure.1 會自動改名為 secure.2 ,當前的 secure 日志會自動改名為 secure.1 然后也會新建 secure 日志,用來保存新日志,以此類推;
(1)組態檔內容詳解
[root@Redhat8 log]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# 每周對日志檔案進行一次輪替
# keep 4 weeks worth of backlogs
rotate 4
#最多保存四次輪替檔案,產生第5個檔案則洗掉第一個備份日志檔案
# 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
#包含子目錄/etc/logrotate.d中的所有組態檔
# system-specific logs may be also be configured here.
[root@Redhat8 logrotate.d]# ll /etc/logrotate.d/
total 80
-rw-r--r--. 1 root root 91 Dec 11 2019 bootlog
-rw-r--r--. 1 root root 130 Feb 19 2018 btmp
-rw-r--r--. 1 root root 160 May 10 2019 chrony
-rw-r--r--. 1 root root 71 Feb 15 2020 cups
-rw-r--r--. 1 root root 212 Nov 25 2019 dnf
-rw-r--r--. 1 root root 194 Dec 2 2019 httpd
-rw-r--r--. 1 root root 172 Nov 5 2019 iscsiuiolog
-rw-r--r--. 1 root root 165 Mar 16 2020 libvirtd
-rw-r--r--. 1 root root 142 Mar 16 2020 libvirtd.qemu
-rw-r--r--. 1 root root 492 Aug 16 2019 mariadb
-rw-r-----. 1 root named 514 Feb 27 2020 named
-rw-r--r--. 1 root root 106 Jun 2 2015 numad
-rw-r--r--. 1 root root 408 Aug 13 2018 psacct
-rw-r--r--. 1 root root 155 Feb 13 2020 samba
-rw-r--r--. 1 root root 237 Mar 17 2020 sssd
-rw-r--r--. 1 root root 71 Apr 3 2020 subscription-manager
-rw-r--r--. 1 root root 226 Dec 11 2019 syslog
-rw-r--r--. 1 root root 32 Feb 19 2018 up2date
-rw-r--r--. 1 root root 100 Nov 4 2019 wpa_supplicant
-rw-r--r--. 1 root root 145 Feb 19 2018 wtmp
(2)logrotate組態檔的主要引數
- daily :日志的輪替周期是每天;
- weekly :日志的輪替周期是每周;
- monthly :日志的輪替周期是每月;
- rotate number :保留日志檔案的個數,0代表無備份;
- compress :日志輪替時舊日志檔案是否進行壓縮;
- create mode owner group :創建新日志檔案時是否指定日志的權限、所屬者、所屬組;
- mail address :當日志輪替時,輸出內容通過郵件外發到指定地址;
- missingok :如果日志不存在,則忽略該日志的告警資訊;
- notifempty :如果日志檔案為空,則不進行日志輪替;
- minsize number :日志輪替最小值,達到該值才會進行輪替;
- size number :設定輪替為指定大小,超過此大小則進行輪替,取消時間輪替;
- dateext :以日期作為日志輪替的檔案后綴;
- sharedscripts :在此關鍵字之后的腳本只執行一次;
- prerotate/endscript :在日志輪替之前執行腳本命令,endscript表示腳本結束;
- posttrotate/endscript :在日志輪替之后執行腳本命令,endscript表示腳本結束;
(3)案例決議
[root@Redhat8 logrotate.d]# cat ./syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
#以下腳本執行一次
postrotate
#在日志輪替之后執行腳本
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
#重啟rsyslog服務,并將結果回傳為空
endscript
#腳本執行結束
}
prerotate與posttrotate主要用于在日志輪替的同時,執行指定的腳本檔案,一般用于日志輪替之后重啟服務,需要強調的是,如果日志是寫入rsyslog服務的組態檔的,那么把新日志加入logrotate后,一定要重啟rsyslog服務,否則你會發現雖然新日志建立了,但是資料還是寫入了舊的日志當中,那是因為logrotate檔案知道日志輪替了,但是rsyslog服務卻不知道,因此就需要重啟服務來使得rsyslog服務知道日志輪替了來滿足將資料寫入新日志檔案內;
這里可以使用chattr給檔案加入a屬性,如果系統檔案加入了a屬性,那么這個檔案就只能增加資料,不能洗掉和修改已有的資料(root用戶也不能修改或洗掉),此方法可以保護日志檔案不被惡意修改;
#chattr
[root@Redhat8 shell]# touch test
[root@Redhat8 shell]# ll
total 0
-rw-r--r--. 1 root root 0 Sep 14 23:51 test
[root@Redhat8 shell]# chattr +a test
[root@Redhat8 shell]# ll
total 0
-rw-r--r--. 1 root root 0 Sep 14 23:51 test
[root@Redhat8 shell]# echo aaa > test
-bash: test: Operation not permitted
[root@Redhat8 shell]# rm -rf test
rm: cannot remove 'test': Operation not permitted
[root@Redhat8 shell]# chattr -a test
[root@Redhat8 shell]# echo aaa > test
[root@Redhat8 shell]# cat test
aaa
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300240.html
標籤:其他
