Linux运维之认识与分析日志文件(rsyslog服务),时间同步服务(chronyd服务)及时间管理命令(timedatectl)
一、實驗環境(rhel7.0版本)
主機環境:rhel7.0
各主機信息
| server | 172.25.254.1 |
| client | 172.25.254.2 |
?
二、日志文件介紹
?
1、Linux? 常見的日志文件文件名
?
日志文件可以幫助我們了解很多系統重要地事件,包括登錄者的部分信息,因此日志文件地權限通常設置為僅有 root 能夠讀取而已。
?
(1)/varlog/boot.log
開機啟動的時候系統內核會去檢測與啟動硬件,接下來開始啟動各種內核支持的功能等。這些流程都會記錄在? /var/log/boot.log? 里面。不過這個文件只會存儲本次開機啟動的信息,之前的啟動信息并不會被保留下來。
?
(2)/var/log/cron
你的? crontab? 任務有沒有實際被執行?執行過程有沒有發生錯誤?你的? /etc/crontab? 是否編寫正確?在這個日志文件內查詢看看。
?
(3)/var/log/dmesg
記錄系統在開機的時候內核檢測過程所產生的各項信息。由于? CentOS? 默認將開機啟動時內核的硬件檢測過程取消顯示,因此額外將數據記錄一份在這個文件中。
?
(4)/var/log/lastlog
可以記錄系統上面所有賬號最近一次登錄系統時的相關信息。lastlog? 命令就是利用這個文件的記錄信息來顯示的。
?
(5)/var/log/maillog
記錄郵件的往來信息,其實主要是記錄? postfix (SMTP 協議提供者)與 dovecot(POP3 協議提供者)所產生的信息。SMTP? 是發送郵件所使用的通訊協議,POP3 則是接收郵件使用的通訊協議。postfix? 與 dovecot? 則分別是兩個完成通訊協議的軟件,
?
(6)/var/log/messages
這個文件相當重要,幾乎系統發生的錯誤信息(或是重要的信息)都會記錄在這個文件中,如果系統發生莫名的錯誤時,這個文件是一定要查看的日志文件之一。
?
(7)/var/log/secure
基本上,只要牽涉到【需要輸入賬號密碼】的軟件,那么當登錄時(不管登錄正確或錯誤)都會被記錄在此文件中。包括系統的 login 程序、圖形用戶界面模式登錄所使用的? gdm、su、sudo? 等程序,還有網絡連接的? ssh、telnet? 等程序,登錄信息都會被記錄在這里。
?
(8)/var/log/wtmp
這兩個文件可以記錄正確登錄系統者的賬戶信息(wtmp),last? 命令就是來讀取? wtmp? 顯示的,這對于檢查一般賬號者的使用操作很有幫助。
?
(9)/var/log/httpd/*、/var/log/samba/*
不同的網絡服務會使用自己的日志文件來記錄它們自己產生的各項信息,上述的目錄則是個別服務所產生的日志文件。
?
2、日志文件所需相關服務(daemon)與程序
?
- systemd-journald.service:最主要的信息記錄者,由? systemd? 提供
- rsyslog.service:主要收集登錄系統與網絡等服務的信息
- logrotate:主要在進行日志文件的輪循功能。
所謂的? logrotate? 基本上就是將舊的日志文件更改名稱,然后建立一個空的日志文件,如此一來,新的日志文件將重新開始記錄,然后只要將舊的日志文件留下一陣子,就可以達到將日志文件【輪循】的目的。此外,如果舊的記錄(大概要保存幾個月)保存了一段時間沒有問題,那么就可以讓系統自動地將它刪除,免得占用很對寶貴地硬盤空間。
?
3、Redhat 7.x? 使用? systemd? 提供的? journalctl? 日志管理
?
基本上,系統由? systemd? 所管理,那所有經由? systemd? 啟動的服務,如果再啟動或結束的過程中發生一些問題或是正常的信息,就會將該信息由 systemd-journald.service 以二進制的方式記錄下來,之后再將這個信息發送給 rsyslog.service? 作進一步的記錄。
?
4、日志文件內容的一般格式
?
系統產生的信息并記錄下來的內容中,每條信息均會記錄下面幾個重要內容:
- 事件發生的日期與時間;
- 發生此事件的主機名;
- 啟動此事件的服務名稱(systemd、crond? 等)或命令與函數名稱(如? su、login...);
- 該信息的實際內容。
?
另外,不知道你會不會覺得很奇怪?為什么日志文件就是登錄本機的數據,那怎么日志文件格式中,第二個字段項目是【主機名】?這是因為日志文件可以做成日志文件服務器,可以收集來自其他服務器的日志文件數據。所以,為了了解到該信息主要是來自于哪一臺主機,當然得要有第二個字段項目說明該信息來自哪一臺主機名。
?
三、rsyslog.service:記錄日志文件的服務
?
1、rsyslog.service 的配置文件:/etc/rsyslog.conf
?
(1)/etc/rsyslog.conf? 文件基本模塊介紹
?
?/etc/rsyslog.conf?? 這個文件規定了【(1)什么服務? (2)的什么等級信息? (3)需要被記錄在哪里(設備或文件)】這三個東西。所以設置的語法會是這樣:
服務名臣[.=!]信息等級 信息記錄的文件名或設備或主機 # 下面以 mail 這個服務產生的 info 等級為例。60 mail.* -/var/log/maillog # 這一行說明:mail 服務產生的大于等于 info 等級的信息,都記錄到 /var/log/maillog 文件中?
我們將上面的數據簡單的分為三部分來說明:
?
【1】、服務名稱
可使用 man? 3? syslog? 查詢到相關的信息
| 相對序號 | 服務類別 | 說明 |
| 0 | kern(kernel) | 就是內核(kernel)產生的信息,大部分都是硬件檢測以及內核功能的啟用 |
| 1 | user | 在用戶層級所產生的信息,例如后續會介紹到的,用戶使用 logger 明厘米嗯來記錄日志文件的功能 |
| 2 | 只要與郵件收發有關的信息記錄都屬于這個 | |
| 3 | daemon | 主要是系統的服務所產生的信息,例如 systemd? 的信息就與這個有關 |
| 4 | auth | 主要與認證/授權有關的機制,例如 login、ssh、su 等需要賬號/密碼的東西 |
| 5 | syslog | 就是由? syslog? 相關協議產生的信息,其實就是 rsyslogd 這個程序本身產生的信息 |
| 6 | lpr | 亦即是打印相關的信息 |
| 7 | news | 與新聞組服務器有關的東西 |
| 8 | uucp | 全名為 UNIX? to? UNIX? Protocol,早期用于 UNIX? 系統間的程序數據交換 |
| 9 | cron | 就是計劃任務 cron、at 等產生信息記錄的地方 |
| 10 | authpriv | 與 auth 類似,但記錄較多賬號的私人信息,包括 pam 模塊的運行等 |
| 11 | ftp | 與 FTP 通訊協議有關的信息輸出 |
| 16~23 | local0~local7 | 保留給本機用戶使用的一些日志信息,較常與終端互動 |
舉例來說,sendmail 與 postfix 及 dovecot 都是與郵件有關的軟件,這些軟件在設計日志文件記錄時,都會主動調用?? syslog? 內的? mail? 服務名稱。所以上述三個軟件(sendmail、postfix、dovecot)產生的信息在 syslog 看起來,就會是【mail】類型的服務了。
?
【2】、信息等級
可使用 man? 3? syslog? 查詢到相關的信息
| 等級數值 | 等級名稱 | 說明 |
| 8 | none | 什么都不記錄 |
| 7 | debug | 用來 debug (除錯)時產生的數據 |
| 6 | info | 僅是一些基本的信息說明而已 |
| 5 | notice | 雖然是正常信息,但比 indo 還需要被注意到的一些信息內容 |
| 4 | warning(warn) | 警示的信息,可能有問題,但是還不至于影響到某個 daemon 運行的信息?;旧?#xff0c;info、notice、warn 這三個信息等級都是在告知一些基本信息而已,應該還不至于造成一些系統運行困擾 |
| 3 | err(error) | 一些重大的錯誤信息,例如篇日志文件的某些設置值造成該服務無法啟動的信息說明,通常借由 err 的錯誤告知,應該可以了解到該服務無法啟動的問題 |
| 2 | crit | 比 erroe? 還要嚴重的錯誤信息,這個 crit 是臨界點(critical)的縮寫,這個錯誤已經很嚴重了 |
| 1 | alert | 警告,已經很有問題的等級,比 crit 還要嚴重 |
| 0 | emerg(panic) | 疼痛等級,意指系統已經幾乎要宕機的狀態,很嚴重的錯誤等級。通常大概只有硬件出問題,導致整個內核無法順利運行,就會出現這樣的等級的信息。 |
特別留意一下在信息等級之前還有【.=!】的連接符號,它代表的意思是這樣的:
- .:代表【比后面還要嚴重的等級(含該等級)都會被記錄下來】的意思,例如:mail.info 代表只要是 mail 的信息,而且該信息等級嚴重于? info (含 info 本身)時,就會被記錄下來的意思。
- .=:代表所需要的等級就是后面接的等級而已,其他的不要
- .!:代表不等于,亦即是除了該等級外的其他等級都記錄
?
【3】、信息記錄的文件名或設備或主機
下面是一些常見的放置處:
?
(2)例題
?
【1】、如果我要將我的 mail 相關的數據寫入到 /var/log/maillog? 當中,那么 /etc/rsyslog.conf? 的語法如何設計?
mail.info /var/log/maillog?
【2】、我要將新聞組數據(news)及計劃任務(cron)的信息都寫入到一個稱為? /var/log/cronnews 的文件中,但是這兩個程序的警告信息則額外地記錄在 /var/log/cronnews.warn? 中,那我該如何設置 rsyslog.conf
news.*;cron.* /var/log/cronnews news.=warn;cron.=warn /var/log/cronnews.warn?
【3】、我的? messages? 這個文件需要記錄所有的信息,但是就是不想要記錄? cron、mail 及 news? 的信息,那么應該怎么寫才好?
可以有下面的兩種寫法:
*.*;cron,mail,news.none /var/log/messages *.*;cron.none;mail.none;news.none /var/log/messages使用【,】分隔時,那么等級只要接在最后一個即可,如果是以【;】來分的話,那么就需要將服務與等級都寫上去。
?
(3)Redhat? 7.x? 默認的 rsyslog.conf? 內容
[root@server ~]# vim /etc/rsyslog.conf50 #kern.* /dev/console54 *.info;mail.none;authpriv.none;cron.none /var/log/messages57 authpriv.* /var/log/secure60 mail.* -/var/log/maillog64 cron.* /var/log/cron67 *.emerg :omusrmsg:*70 uucp,news.crit /var/log/spooler73 local7.* /var/log/boot.log上面第四行關于? mail? 的記錄中,在記錄的文件? /var/log/maillog? 前面有個減號【-】是干什么用的?由于郵件所產生的信息比較多,因此我們希望郵件產生的信息先存儲在速度較快的內存緩沖區中(buffer),等到數據量足夠打了才一次性地將所由數據都寫入磁盤,這樣有助于日志文件地讀取性能。只不過有與信息是暫存在內存中,因此若不正常關機導致登錄信息未回到日志文件中,可能會造成部分數據地丟失。
?
(4)自行增加日志文件文件功能
?
【1】、范例一:如果你想要讓【所有的信息】都額外寫入到? /var/log/admin.log? 這個文件時,你該怎么做?
‘
1、先設置好所要添加的參數 [root@server ~]# vim /etc/rsyslog.conf #在文件的任意地方,加入下面這兩行內容75 # Add by root 2019/06/16 <==再次強調,自己修改的時候加入一些說明76 *.* /var/log/admin.log2、重新啟動 rsyslog.service [root@server ~]# systemctl restart rsyslog.service [root@server ~]# ll -d /var/log/admin.log -rw-r--r--. 1 root root 531 Jun 16 14:30 /var/log/admin.log # 看吧,自動建立了這個日志文件?
2、日志文件的安全性設置
?
有沒有辦法防止日志文件被刪除?或是被? root? 自己不小心修改?
基本上,我們可以通過一個隱藏的屬性來設置你的日志文件,成為【只可以增加數據,但是不能被刪除】的狀態——使用 chattr? 的a 這個屬性,那么或許可以達到些許的保護。
不過,如果你的? root? 賬號被破解,那么下面的設置是無法保護的,因為你要記得【root? 是可以在系統上面進行任何事情的】。
另外,要注意的是,當【你不小心“手動”修改過日志文件后,例如? /var/log/messages,當你不小心用 vim 打開它,離開卻執行? :wq? 的參數,那么該文件未來將不會再繼續進行記錄操作】,這個問題真的經常發生。由于你以? vim? 存儲了日志文件,則 rsyslog.service 會被誤判為該文件已被修改過了,將導致 rsyslog.service? 不再寫入新內容到該文件。要想讓該日志文件繼續寫入,你只要重啟 rsyslog.service? 即可。
?
[root@server ~]# chattr +a /var/log/admin.log [root@server ~]# lsattr /var/log/admin.log -----a---------- /var/log/admin.log?
3、日志文件服務器的設置
?
Redhat 7.x? 默認的 rsyslog.service? 本身就已經具有這個日志文件服務器的功能了,只是默認并沒有啟動該功能而已。你可以通過 【man? rsyslogd】去查詢一下相關的選項就能夠知道。
既然是日志文件服務器,那么我們的? Linux? 主機當然會啟動一個端口來監聽,這個默認的端口就是 UDP? 或? TCP 的514 端口。
?
(1)服務端(日志接收方)——172.25.254.1
?
1、編輯配置文件 [root@server ~]# vim /etc/rsyslog.conf # 找到下面這幾行 14 # Provides UDP syslog reception15 #$ModLoad imudp16 #$UDPServerRun 51417 18 # Provides TCP syslog reception19 #$ModLoad imtcp20 #$InputTCPServerRun 514 # 上面的是 UDP 端口,下面的是 TCP 端口。UDP:不可靠傳輸協議(無連接);TCP:可靠傳輸協議(有連接) # 下面使用 UDP 端口,即取消 15 和 16 行的注釋 15 $ModLoad imudp # 日志接受模塊16 $UDPServerRun 514 # 開啟接受端口2、重啟服務 [root@server ~]# systemctl restart rsyslog.service [root@server ~]# netstat -antulpe | grep 514 udp 0 0 0.0.0.0:514 0.0.0.0:* 0 82148 5314/rsyslogd udp6 0 0 :::514 :::* 0 82149 5314/rsyslogd 3、關閉防火墻 [root@server ~]# systemctl stop firewalld [root@server ~]# systemctl disable firewalld?
(2)客戶端(日志發送方)——172.25.254.2
?
1、編輯配置文件 [root@client ~]# vim /etc/rsyslog.conf #在文件的任意地方,加入下面這行內容75 *.* @172.25.254.1 ### *.* @@172.25.254.1 #若用 TCP 傳輸,設置要變成這樣2、重啟服務 [root@client ~]# systemctl restart rsyslog.service?
(3)測試
?
(1)在發送方和接受方都清空日志文件
[root@server ~]# > /var/log/messages[root@client ~]# > /var/log/messages?
(2)在日志發送方:
[root@client ~]# logger test [root@client ~]# cat /var/log/messages # 查看日志是否生成 ...(省略)... Jun 16 15:22:31 client root: test?
(3)在日志接受方查看
[root@server ~]# cat /var/log/messages | grep test Jun 16 15:26:15 client root: test?
4、日志采集格式的設定
?
(1)客戶端(日志發送方)——172.25.254.2
?
1、編輯配置文件 [root@client ~]# vim /etc/rsyslog.conf #在文件的任意地方加入如下兩行的內容45 $template LOGFMT,"%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n" 77 *.* /var/log/xin;LOGFMT2、重啟服務 [root@client ~]# systemctl restart rsyslog.service ### 參數介紹 ### LOGFMT <==相當于變量名 %timegenerated% <==顯示日志時間 %FROMHOST-IP% <==顯示主機IP %syslogtag% <==日志記錄目標 %msg%" <==日志內容 \n <==換行?
(2)測試
?
(1)在發送方和接受方都清空日志文件
[root@server ~]# > /var/log/messages[root@client ~]# > /var/log/messages [root@client ~]# > /var/log/xin?
(2)在日志發送方:
?
[root@client ~]# logger world [root@client ~]# cat /var/log/messages | grep world Jun 16 16:01:29 client root: world [root@client ~]# cat /var/log/xin | grep world Jun 16 16:01:29 127.0.0.1 root: world?
(3)在日志接受方查看
[root@server ~]# cat /var/log/messages | grep world Jun 16 16:01:29 client root: world?
四、日志文件的輪循(logrotate)
?
rsyslog? 使用? daemon? 的方式來啟動,當有需求的時候立刻就會被執行,但是? logrotate? 卻是在規定的時間到了之后才來進行日志文件的輪循,所以這個? logrotate? 程序當然就是掛在? cron? 下面進行的。
仔細看一下,/etc/cron.daily/ 里面的文件,嘿嘿,/etc/cron.daily/logrotate? 就是記錄了每天要進行的日志文件輪循的操作。
?
1、logrotate 的配置文件
?
既然 logrotate? 主要是針對日志文件來進行輪循的操作,所以,它當然必須要記錄【在什么狀態下才經日志文件進行輪循】的設置。那么? logrotate? 這個程序的參數配置文件在哪里?那就是:
- /etc/logrotate.conf
- /etc/logrotate.d/
?其中 logrotate.conf? 才是主要的參數文件,至于 logrotate.d? 則是一個目錄,該目錄里面的所有文件都會被主動地讀入? /etc/logrotate.conf? 當中來使用。另外,在 /etc/logrotate.d/ 里面地文件中,如果沒有規定到一些詳細設置,則以? /etc/logrotate.conf? 這個文件地規定來指定為默認值。
?
下面,我們來看一下默認的? logrotate? 的內容吧!
[root@server ~]# vim /etc/logrotate.conf # 下面的設置是"logrotate 的默認設置值",如果個別的文件設置了其他的參數, # 則將以個別的文件設置為主,若該文件沒有設置到的參數則以這個文件的內容為默認值。3 weekly <==默認每個星期對日志文件進行一次輪循的任務6 rotate 4 <==保留幾個日志文件,默認是保留4個9 create <==由于日志文件被更名,因此建立一個新的來繼續存儲之意12 dateext <==就是這個設置值,可以讓被輪循的文件名稱加上日期18 include /etc/logrotate.d <==將 /etc/logrotate.d 這個目錄中的所有文件都讀進來執行輪循的任務21 /var/log/wtmp { <==僅針對/var/log/wtmp 所設置的參數22 monthly <==每個月一次,替換每周23 create 0664 root utmp <==指定新建文件的權限與所屬賬號/組24 minsize 1M <==文件容量一定要超過 1M 后才進行輪循(略過時間參數)25 rotate 1 <==僅保留一個,亦即僅有 wtmp.1 保留而已26 }現將 /etc/logrotate.conf 文件的語法總結如下:
日志文件的絕對路徑與文件名...{
????????????? 個別的參數設置值,如 monthly,compress 等
}
?
下面,我們再以? /etc/logrotate.d/syslog? 這個輪循 rsyslog.service? 服務的文件,來看看該如何設置它的輪循?
[root@server ~]# vim /etc/logrotate.d/syslog /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler {sharedscriptspostrotate/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || trueendscript }在上面的語法當中,我們知道正確的? logrotate? 的寫法為:
- 文件名:被處理的日志文件絕對路徑文件名寫在前面,可以使用空格符分隔多個日志文件;
- 參數:上述文件名進行輪循的參數使用 {} 包括起來;
- 執行腳本:可調用外部命令來進行額外的命令執行,這個設置值需與 sharedscripts...endscript 設置合用才行。至于可用的環境為:
那么? /etc/logrotate.d/syslog? 內設置的 5 個文件的輪循功能就變成了:
請特別留意,那么/bin/kill? -HUP? 的意義,這一行的目的在于將系統的? rsyslogd? 重新以其參數文件(rsyslog.conf)的數據讀入一次,也可以想成是? reload? 的意思。由于我們建立了一個空的記錄文件,如果不執行此行來重新啟動服務的話,那么記錄的時候將會發生錯誤。
?
假設我們針對? /var/log/message? 這個文件增加? chattr? +a? 的屬性時,依據? logrotate? 的工作原理,我們知道,這個? /var/log/messages 這個文件將被更名成為? /var/log/messages.1。但是由于加上這個? +a? 的參數,所以更名是不可能成功的。那怎么辦?就利用? prerotate? 與 postrotate? 來進行日志文件輪循前、后所需要做的操作。
[root@server ~]# vim /etc/logrotate.d/syslog /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler {sharedscriptsprerotate /usr/bin/chattr -a /var/log/messages <==新增的內容endscript <==新增的內容sharedscripts <==新增的內容postrotate/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true/usr/bin/chattr -a /var/log/messages <==新增的內容endscript }?
2、實際測試 logrotate 的操作
?
logrotate [-vf] logfile 選項與參數: -v:啟動顯示模式,會顯示 logrotate 運行的過程 -f:不論是否符合配置文件的數據,強制每個日志文件都進行輪循的操作?
【1】、范例一:強制執行一次 logrotate? 看看整個流程是什么
[root@server ~]# logrotate -v /etc/logrotate.conf reading config file /etc/logrotate.conf <==讀取主要配置文件 including /etc/logrotate.d <==調用外部的設置 reading config file chrony <==就是外部設置 ...(中間省略)... Handling 20 logs <==共有20個日志文件被記錄 ...(中間省略)... rotating pattern: /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spoolerweekly (4 rotations) empty log files are rotated, old logs are removed considering log /var/log/cron <==開始處理 messagelog does not need rotating <==因為時間未到,不需要修改?
五、systemd-journald.service? 簡介
?
雖然? systemd-journald? 所記錄的數據在內存中,但是系統還是利用文件屬性是將它記錄到? /run/log? 下面。不過? /run? 在 Redhat? 7.x 的系統上,其實是內存中的數據,所以重新啟動后,這個? /run/log? 下面的數據當然就被刷新,舊的就不存在了。
?
1、使用 journalctl? 查看登錄信息
?
journalctl [-nrpf] [--since TIME] [--util TIME] _optional 選項與參數: 默認會顯示全部的 log 內容,從舊的輸出到最新的信息 -n:顯示最近的幾行的意思,找最新的信息相當有用 -r:反向輸出,從罪新娘的輸出到最舊的信息 -p:顯示后面所接的信息重要性排序。參看上面的 rsyslogd 的信息等級對應的表格 -f:類似 tail -f 的功能,持續顯示 journal 日志的內容(即時監控時相當有幫助) --since --util:設置開始與結束的時間,讓在該期間內的數據輸出而已 _SYSTEMD_UNIT=unit.service:只輸出 unit.service 的信息而已 _COMM=bash:只輸出與 bash 有關的信息 _PID=pid:只輸出此 PID 號的信息 _UID=uid:只輸出此 UID 號的信息 SYSLOG_FACILITY=[0-23]:使用 syslog.h 規范的服務對應的序號來調用出正確的數據。參看上面的 rsyslogd 的服務名稱對應的表格?
【1】、范例一:顯示目ian系統中所有的 journal 日志數據
通過? less? 一頁頁翻動給管理員查看,數據量相當大。
?
【2】、范例二:僅顯示出 2019/06/16 整天以及(2)僅今天(3)僅昨天的日志數據內容
?
?
?
通過? less? 一頁頁翻動給管理員查看,數據量相當大。
?
【3】、范例三:只找出 crond.service 的數據,同時只列出最新的 10 條即可
通過? less? 一頁頁翻動給管理員查看,數據量相當大。
?
【4】、范例四:找出 su 、login 執行的日志文件,同時只列出最新的 10 條即可
?
【5】、范例五:找出信息嚴重等級為錯誤(error)的信息
通過? less? 一頁頁翻動給管理員查看,數據量相當大。
?
【6】、范例六、找出與登錄認證服務(auth、authprive)有關的日志文件信息
?
【7】、查看日志的詳細參數
sshd服務重啟之后,進程號發生改變
?
2、logger? 命令的應用
?
logger [-p 服務名稱.等級] "信息" 選項與參數: 服務名稱.等級:參考上面 rsyslogd 的內容?
【1】、范例一:指定一下,讓 root 來使用? logger? 來傳送數據到日志文件中
?
3、保存 journal? 的方式
?
再強調一次,這個? systemd-journald.service? 的信息是不會放到下一次開機啟動后的,所以,重新啟動后,之前的記錄會丟失。雖然我們大概都有啟動? rsyslogd? 這個服務來進行后續的日志文件放置,不過如果你比較喜歡? journalctl? 的讀寫方式,那么可以將這些數據保存下來。
?
systemd-journald.service? 的配置文件為:/etc/systemd/journald.conf。也可以通過? 【man 5 journald.conf】 來查看。
?
第一步:mkdir? /var/log/journal
?
第二步:chown root:systemd-journal /var/log/journal/
?
第三步:chmod? 2775? /var/log/journal
?
第四步:重新加載該配置進程
killall -1 systemd-journald?? 或? systemctl? restart? systemd-journald.service
?
第五步:ls /var/log/journal,會發現生成了b398e018986f4c65894352dec2a79216目錄(用于存放journal日志)
系統重啟之后的日志,存放在/var/log/journal/b398e018986f4c65894352dec2a79216/目錄中
?
六、分析日志文件
?
1、Redhat? 默認提供的? logwatch
?
Redhat? 7.x? 上面默認的? logwatch? 所提供的分析工具,它會每天分析一次日志文件,并且將數據以? email? 的格式寄送給? root。
?
不過,在我們的安裝方式里面,默認并沒有安裝 logwatch,所以,需要手動安裝? logwatch。
?
[root@server ~]# yum install logwatch -y <==安裝 logwatch [root@server ~]# ll /etc/cron.daily/0logwatch -rwxr-xr-x. 1 root root 434 Dec 29 2013 /etc/cron.daily/0logwatch安裝完畢后,logwatch? 就已經寫入到了? cron? 的執行列表中。未來則每天會發送一封郵件給? root。因為我們剛剛安裝,那可以來分析一下。很簡單,直接執行 0logwatch? 即可。
[root@server ~]# /etc/cron.daily/0logwatch [root@server ~]# mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 1 message 1 new >N 1 logwatch@server.loca Mon Jun 17 16:00 138/5131 "Logwatch for server (L" & 1 Message 1: From root@server.localdomain Mon Jun 17 16:00:40 2019 Return-Path: <root@server.localdomain> X-Original-To: root Delivered-To: root@server.localdomain To: root@server.localdomain From: logwatch@server.localdomain Subject: Logwatch for server (Linux) Auto-Submitted: auto-generated Precedence: bulk Content-Type: text/plain; charset="iso-8859-1" Date: Mon, 17 Jun 2019 16:00:39 +0800 (CST) Status: R# logwatch 會說明分析的時間與 logwatch 版本等信息 ################### Logwatch 7.4.0 (03/01/11) #################### Processing Initiated: Mon Jun 17 16:00:38 2019Date Range Processed: yesterday( 2019-Jun-16 )Period is day.Detail Level of Output: 0Type of Output/Format: mail / textLogfiles for Host: server################################################################## # 開始一項一項的進行數據分析。--------------------- Cron Begin ------------------------ **Unmatched Entries**INFO (RANDOM_DELAY will be scaled with factor 53% if used.)INFO (RANDOM_DELAY will be scaled with factor 25% if used.)---------------------- Cron End ------------------------- ...(中間省略)... # 當然也得說明一下目前系統的磁盤使用狀況。--------------------- Disk Space Begin ------------------------ Filesystem Size Used Avail Use% Mounted on/dev/vda3 8.4G 3.4G 5.0G 40% /devtmpfs 489M 0 489M 0% /dev/dev/vda1 197M 102M 95M 52% /boot---------------------- Disk Space End -------------------------?
七、時間同步服務(chronyd.service)
?
(1)服務端——172.25.254.1
?
1、編輯配置文件 [root@server ~]# vim /etc/chrony.conf22 allow 172.25.254.0/24 允許哪些客戶端來同步本機時間29 local stratum 10 本機不同步任何主機的時間,本機作為時間源2、重啟服務 [root@server ~]# systemctl restart chronyd.service?
?
(2)客戶端——172.25.254.2
?
1、編輯配置文件 [root@client ~]# vim /etc/chrony.conf3 server 0.rhel.pool.ntp.org iburst4 server 1.rhel.pool.ntp.org iburst5 server 2.rhel.pool.ntp.org iburst6 server 3.rhel.pool.ntp.org iburst # 刪除 4、5、6行,并將第 3 行內容修改為如下的內容3 server 172.25.254.1 iburst2、重啟服務 [root@client ~]# systemctl restart chronyd.service?
(3)測試:
?
在客戶端:chronyc sources -v
看到*,表示時間同步成功
?
七、timedatectl命令——永久修改
?
1、timedatectl? ? ?? 管理系統時間,顯示當前時間信息
?
2、timedatectl? ? list-timezones? ? ? ? ?? 查看支持的所有時區
?
3、timedatectl? ? set-timezone?? 時區 ? ? ? ? ? ? 設定當前時區
?
4、cat /etc/adjtime? ? ? ? ? ? ?? 用于查看UTC時間還是Local時間
?
5、timedatectl? ? set-local-rtc? ? ?? 0|1 ? ? ? ? ? ?? 設定是否使用UTC時間
?
6、timedatectl? ? set-time? ?? 時間 ? ? ? ? 設定當前時間
?
7、timedatectl? ? status? ? ? ? ? ? 管理系統時間,顯示當前時間信息(效果同1)
總結
以上是生活随笔為你收集整理的Linux运维之认识与分析日志文件(rsyslog服务),时间同步服务(chronyd服务)及时间管理命令(timedatectl)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: string数据库使用和实践第三部分数据
- 下一篇: 【课件整理复习】第十一章 图像识别与文字