RH214|第十一章 分析和存儲日志

描述系統(tǒng)日志架構(gòu)

目標(biāo)

完成本節(jié)內(nèi)容后,你能夠描述Red Hat Enterprise Linux用于記錄事件的基本日志架構(gòu)。

系統(tǒng)登錄

進(jìn)程和操作系統(tǒng)內(nèi)核記錄了發(fā)生的事件的日志如筛。這些日志用于審計系統(tǒng)和排除故障。

許多系統(tǒng)將事件的日志記錄在文本文件中芋哭,保存在/var/log目錄下见秽。這些日志可以用普通的文本工具來檢查,比如lesstail桅打。

Red Hat Enterprise Linux 中內(nèi)置了一個基于 Syslog 協(xié)議的標(biāo)準(zhǔn)日志系統(tǒng)是嗜。許多程序都使用這個系統(tǒng)來記錄事件并將其組織成日志文件。Systemd-journald和rsyslog服務(wù)處理Red Hat Enterprise Linux 8中的syslog消息挺尾。

systemd-journald服務(wù)是操作系統(tǒng)事件記錄架構(gòu)的核心鹅搪。它從許多來源收集事件消息,包括內(nèi)核遭铺、啟動進(jìn)程早期階段的輸出丽柿、守護(hù)進(jìn)程啟動和運(yùn)行時的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤,以及系統(tǒng)日志事件魂挂。然后甫题,它將它們重組成標(biāo)準(zhǔn)格式,并將它們寫入一個結(jié)構(gòu)化的锰蓬、有索引的系統(tǒng)日志中幔睬。默認(rèn)情況下眯漩,這個日志被存儲在一個文件系統(tǒng)中芹扭,不會在重啟時持續(xù)存在。

但是赦抖,rsyslog服務(wù)會在systemd-journald收到的syslog消息到達(dá)時讀取syslog消息舱卡。然后,它會處理syslog事件队萤,將其記錄到日志文件中轮锥,或者根據(jù)自己的配置將其轉(zhuǎn)發(fā)到其他服務(wù)中。

rsyslog服務(wù)將syslog消息分類并寫入到/var/log中的日志文件中要尔,這些消息在重啟后會持續(xù)存在舍杜。rsyslog服務(wù)根據(jù)發(fā)送每個消息的程序類型或設(shè)施,以及每個syslog消息的優(yōu)先級赵辕,將日志消息排序到特定的日志文件中既绩。

除了syslog消息文件之外,/var/log目錄還包含系統(tǒng)上其他服務(wù)的日志文件还惠。下表列出了/var/log目錄中的一些有用的文件饲握。

選定的系統(tǒng)日志文件

日志文件 儲存的信息類型
/var/log/messages 大多數(shù)系統(tǒng)日志消息都會在這里記錄。例外情況包括與身份驗(yàn)證和電子郵件處理、計劃任務(wù)執(zhí)行有關(guān)的消息救欧,以及那些純粹與調(diào)試有關(guān)的消息衰粹。
/var/log/secure 與安全和認(rèn)證事件相關(guān)的Syslog消息。
/var/log/maillog 與郵件服務(wù)器相關(guān)的Syslog消息笆怠。
/var/log/cron 與定時任務(wù)執(zhí)行相關(guān)的系統(tǒng)日志消息铝耻。
/var/log/boot.log 與系統(tǒng)啟動相關(guān)的非系統(tǒng)日志控制臺消息。

查看系統(tǒng)日志文件

目標(biāo)

完成本節(jié)內(nèi)容后蹬刷,您應(yīng)該能夠解釋相關(guān)系統(tǒng)日志文件中的事件以排除故障或查看系統(tǒng)狀態(tài)田篇。

記錄事件到系統(tǒng)中

許多程序使用syslog協(xié)議將事件記錄到系統(tǒng)中。 每個日志消息均按功能(消息的類型)和優(yōu)先級(消息的嚴(yán)重性)分類箍铭。 可用的功能記錄在rsyslog.conf(5)man page中泊柬。

下表從高到低列出了標(biāo)準(zhǔn)的8個系統(tǒng)日志優(yōu)先級。

Syslog優(yōu)先級概述

代碼 優(yōu)先級 嚴(yán)重程度
0 emerg 系統(tǒng)無法使用
1 alert 必須立即采取行動
2 crit 危急情況
3 err 非嚴(yán)重錯誤條件
4 warning 警告條件
5 notice 正常但重要的事件
6 info 信息事件
7 debug 調(diào)試級消息

rsyslog服務(wù)使用日志消息的設(shè)施和優(yōu)先級來決定如何處理它們诈火。這是由 /etc/rsyslog.conf 文件和 /etc/rsyslog.d 目錄中的任何以 .conf 為擴(kuò)展名的文件中的規(guī)則配置的兽赁。軟件包可以通過在/etc/rsyslog.d目錄下安裝一個適當(dāng)?shù)奈募磔p松地添加規(guī)則。

每個控制如何對syslog消息進(jìn)行排序的規(guī)則都是配置文件中的一行冷守。每一行的左邊表示該規(guī)則所匹配的系統(tǒng)日志消息的功能和嚴(yán)重程度刀崖。每行的右邊表示要將日志消息保存在什么文件中(或在其他地方傳遞消息)。星號 (*) 是匹配所有值的通配符拍摇。

例如亮钦,下面這一行將記錄發(fā)送到 authpriv 工具的消息,以任何優(yōu)先級記錄到 /var/log/secure 文件中充活。

authpriv.*                  /var/log/secure

日志消息有時與rsyslog.conf中的多個規(guī)則匹配蜂莉。 在這種情況下,一條消息存儲在多個日志文件中混卵。 為了限制存儲的消息映穗,優(yōu)先級字段中的關(guān)鍵字none指示在指定的文件中不應(yīng)存儲有關(guān)所指示功能的消息。

除了將syslog消息記錄到文件中之外幕随,還可以將它們打印到所有已登錄用戶的終端上蚁滋。 rsyslog.conf文件具有一個設(shè)置,可將所有具有emerg優(yōu)先級的syslog消息打印到所有已登錄用戶的終端赘淮。

rsyslog規(guī)則示例

#### 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
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
# Log all the mail messages in one place. 
mail.*                                                  -/var/log/maillog
# Log cron stuff
cron.*                                                  /var/log/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

日志文件切割

logrotate工具可以切割日志文件辕录,以防止它們在包含/var/log目錄的文件系統(tǒng)中占用過多的空間。當(dāng)一個日志文件被切割時梢卸,它將被重命名走诞,并以一個擴(kuò)展名表示它被輪換的日期。例如低剔,舊的/var/log/messages文件可能會變成/var/log/messages-2019-01-30速梗,如果在2019-01-30切割肮塞,那么舊的/var/log/messages-20190130就會變成/var/log/messages-20190130。一旦舊的日志文件被切割姻锁,就會創(chuàng)建一個新的日志文件枕赵,并通知寫到它的服務(wù)。

經(jīng)過一定的切割次數(shù)后位隶,一般在四周后拷窜,最老的日志文件會被丟棄,以釋放磁盤空間涧黄。一個定時任務(wù)每天運(yùn)行logrotate程序篮昧,查看是否有日志需要切割。大多數(shù)日志文件都是每周切割一次笋妥,但logrotate會切割一些速度較快的日志文件懊昨,或較慢的日志文件,或當(dāng)它們達(dá)到一定的大小時春宣,就會切割酵颁。

本課程不介紹logrotate的配置。 有關(guān)更多信息月帝,請參見logrotate(8)man page躏惋。

分析syslog日志

日志信息從最上面的最舊的信息開始,最新的信息在日志文件的最后嚷辅。rsyslog服務(wù)在記錄日志文件中的條目時簿姨,使用了一個標(biāo)準(zhǔn)格式。下面的例子解釋了/var/log/secure日志文件中的日志消息的剖析簸搞。

Feb 11 20:11:48 localhost sshd[1433]: Failed password for student from 172.25.0.10 port 59344 ssh2
  • 記錄日志條目的文件的時間戳扁位。
  • 發(fā)送日志消息的主機(jī)
  • 發(fā)送日志消息的程序或進(jìn)程名稱和PID號
  • 發(fā)送的信息

監(jiān)控日志

監(jiān)視一個或多個日志文件的事件,有助于重現(xiàn)問題和問題攘乒。tail -f /path/to/file 命令會輸出指定的文件的最后10行贤牛,并在文件中寫入新的行時繼續(xù)輸出。

例如则酝,為了監(jiān)控登錄失敗的嘗試,在一個終端中運(yùn)行tail命令闰集,然后在另一個終端中以root用戶的身份運(yùn)行ssh命令沽讹,當(dāng)一個用戶嘗試登錄系統(tǒng)時,以root用戶的身份運(yùn)行ssh命令武鲁。

在第一個終端中爽雄,運(yùn)行以下尾部命令:

[root@host ~]# tail -f /var/log/secure

在第二個終端中,運(yùn)行下面的ssh命令:

[root@host ~]# ssh root@localhost 
root@localhost's password: redhat 
...output omitted...
[root@host ~]# 

返回到第一個終端沐鼠,查看日志挚瘟。

...output omitted...
Feb 10 09:01:13 host sshd[2712]: Accepted password for root from 172.25.254.254  port 56801 ssh2
Feb 10 09:01:13 host sshd[2712]: pam_unix(sshd:session): session opened for user  root by (uid=0)

手動發(fā)送SYSLOG消息

logger命令可以向rsyslog服務(wù)發(fā)送消息叹谁。默認(rèn)情況下,它以notice優(yōu)先級(user.notice)向user工具發(fā)送消息乘盖,除非用 -p 選項(xiàng)指定了其他選項(xiàng)焰檩。這對測試rsyslog服務(wù)配置的任何更改都很有用。

要向記錄在 /var/log/boot.log 文件中的 rsyslog 服務(wù)發(fā)送消息订框,請執(zhí)行以下logger命令析苫。

[root@host ~]# logger -p local7.notice "Log entry created on host"

審閱系統(tǒng)日志

目標(biāo)

完成本節(jié)內(nèi)容后,您能夠在系統(tǒng)日志中找到并解釋系統(tǒng)日志中的條目穿扳,以排除故障或查看系統(tǒng)狀態(tài)衩侥。

發(fā)現(xiàn)事件

systemd-journald服務(wù)將日志數(shù)據(jù)存儲在一個稱為日志的結(jié)構(gòu)化的、有索引的二進(jìn)制文件中矛物。這些數(shù)據(jù)包括關(guān)于日志事件的額外信息茫死。例如,對于syslog事件履羞,這包括工具和原始消息的優(yōu)先級璧榄。

要從日志中檢索日志消息,請使用 journalctl 命令吧雹。您可以使用此命令查看日志中的所有消息骨杂,或根據(jù)各種選項(xiàng)和標(biāo)準(zhǔn)搜索特定事件。如果您以根用戶身份運(yùn)行該命令雄卷,您可以完全訪問日志搓蚪。普通用戶也可以使用此命令,但可能會被限制查看某些消息丁鹉。

[root@host ~]# journalctl 
...output omitted...
Feb 21 17:46:25 host.lab.example.com systemd[24263]: Stopped target Sockets.
Feb 21 17:46:25 host.lab.example.com systemd[24263]: Closed D-Bus User Message Bus  Socket.
Feb 21 17:46:25 host.lab.example.com systemd[24263]: Closed Multimedia System.
Feb 21 17:46:25 host.lab.example.com systemd[24263]: Reached target Shutdown.
Feb 21 17:46:25 host.lab.example.com systemd[24263]: Starting Exit the Session...
Feb 21 17:46:25 host.lab.example.com systemd[24268]: pam_unix(systemduser:session): session c> Feb 21 17:46:25 host.lab.example.com systemd[1]: Stopped User Manager for UID  1001. Feb 21 17:46:25 host.lab.example.com systemd[1]: user-runtime-dir@1001.service:
 Unit not neede>
Feb 21 17:46:25 host.lab.example.com systemd[1]: Stopping /run/user/1001 mount  wrapper... Feb 21 17:46:25 host.lab.example.com systemd[1]: Removed slice User Slice of UID  1001.
Feb 21 17:46:25 host.lab.example.com systemd[1]: Stopped /run/user/1001 mount  wrapper. Feb 21 17:46:36 host.lab.example.com sshd[24434]: Accepted publickey for root from
 172.25.250.> Feb 21 17:46:37 host.lab.example.com systemd[1]: Started Session 20 of user root.
Feb 21 17:46:37 host.lab.example.com systemd-logind[708]: New session 20 of user  root.
Feb 21 17:46:37 host.lab.example.com sshd[24434]: pam_unix(sshd:session): session  opened for u> Feb 21 18:01:01 host.lab.example.com CROND[24468]: (root) CMD (run-parts /etc/ cron.hourly) Feb 21 18:01:01 host.lab.example.com run-parts[24471]: (/etc/cron.hourly) starting
 0anacron
Feb 21 18:01:01 host.lab.example.com run-parts[24477]: (/etc/cron.hourly) finished
 0anacron lines 1464-1487/1487 (END) q

journalctl 命令突出顯示重要的日志消息:noticewarning優(yōu)先級的消息用黑體字顯示妒潭,而error優(yōu)先級或更高的消息用紅體字顯示。

成功使用日志進(jìn)行故障排除和審核的關(guān)鍵是限制日志搜索以僅顯示相關(guān)輸出揣钦。

默認(rèn)情況下雳灾, journalctl -n 會顯示最近10個日志條目。您可以通過指定要顯示多少條日志條目的可選參數(shù)來調(diào)整冯凹。對于最近的五個日志條目谎亩,運(yùn)行下面的 journalctl 命令。

[root@host ~]# journalctl -n 5 
-- Logs begin at Wed 2019-02-20 16:01:17 +07, end at Thu 2019-02-21 18:01:01 +07.
 -
 ...output omitted...
Feb 21 17:46:37 host.lab.example.com systemd-logind[708]: New session 20 of user  root. Feb 21 17:46:37 host.lab.example.com sshd[24434]: pam_unix(sshd:session): session  opened for u> Feb 21 18:01:01 host.lab.example.com CROND[24468]: (root) CMD (run-parts /etc/ cron.hourly) Feb 21 18:01:01 host.lab.example.com run-parts[24471]: (/etc/cron.hourly) starting
 0anacron
Feb 21 18:01:01 host.lab.example.com run-parts[24477]: (/etc/cron.hourly) finished
 0anacron 
 lines 1-6/6 (END) q

tail -f 命令類似宇姚, journalctl -f 命令輸出系統(tǒng)日志的最后 10 行匈庭,并在日志中寫入新的日志條目時繼續(xù)輸出。要退出 journalctl -f 進(jìn)程浑劳,請使用 Ctrl+C 組合鍵阱持。

[root@host ~]# journalctl -f
-- Logs begin at Wed 2019-02-20 16:01:17 +07. --
...output omitted...
Feb 21 18:01:01 host.lab.example.com run-parts[24477]: (/etc/cron.hourly) finished
 0anacron
Feb 21 18:22:42 host.lab.example.com sshd[24437]: Received disconnect from
 172.25.250.250 port 48710:11: disconnected by user
Feb 21 18:22:42 host.lab.example.com sshd[24437]: Disconnected from user root
 172.25.250.250 port 48710
Feb 21 18:22:42 host.lab.example.com sshd[24434]: pam_unix(sshd:session): session  closed for user root Feb 21 18:22:42 host.lab.example.com systemd-logind[708]: Session 20 logged out.
 Waiting for processes to exit.
Feb 21 18:22:42 host.lab.example.com systemd-logind[708]: Removed session 20.
Feb 21 18:22:43 host.lab.example.com sshd[24499]: Accepted  publickey for root from 172.25.250.250 port 48714 ssh2: RSA  SHA256:1UGybTe52L2jzEJa1HLVKn9QUCKrTv3ZzxnMJol1Fro
Feb 21 18:22:44 host.lab.example.com systemd-logind[708]: New session 21 of user  root. Feb 21 18:22:44 host.lab.example.com systemd[1]: Started Session 21 of user root. 
Feb 21 18:22:44 host.lab.example.com sshd[24499]: pam_unix(sshd:session): session  opened for user root by (uid=0) 
^C
[root@host ~]# 

為了幫助排查問題,您可能希望根據(jù)日志條目的優(yōu)先級來過濾日志的輸出魔熏。journalctl -p 取一個優(yōu)先級的名稱或編號衷咽,顯示該優(yōu)先級及以上的日志條目鸽扁。journalctl 命令可以理解 debug, info, notice, warning, err, crit, alertemerg 優(yōu)先級。

運(yùn)行下面的 journalctl 命令來列出err優(yōu)先級或更高的日志條目镶骗。

[root@host ~]# journalctl -p err 
-- Logs begin at Wed 2019-02-20 16:01:17 +07, end at Thu 2019-02-21 18:01:01 +07.
 --
 ..output omitted...
Feb 20 16:01:17 host.lab.example.com kernel: Detected CPU family 6 model 13  stepping 3 Feb 20 16:01:17 host.lab.example.com kernel: Warning: Intel Processor - this  hardware has not undergone testing by Red Hat and might not be certif> 
Feb 20 16:01:20 host.lab.example.com smartd[669]: DEVICESCAN failed: glob(3)  aborted matching pattern /dev/discs/disc* Feb 20 16:01:20 host.lab.example.com smartd[669]: In the system's table of devices
 NO devices found to scan 
 lines 1-5/5 (END) q

在查找特定事件時桶现,可以將輸出限制在特定的時間范圍內(nèi)。journalctl 命令有兩個選項(xiàng)可以將輸出限制到特定的時間范圍卖词,即 --since--until 選項(xiàng)巩那。這兩個選項(xiàng)都需要一個時間參數(shù),格式為 "YYY-MM-DD hh:mm:ss"(雙引號是為了保留選項(xiàng)中的空間)此蜈。如果省略了日期即横,該命令假定為當(dāng)前日期,如果省略了時間裆赵,該命令假定從00:00:00:00開始的整整一天东囚。除了日期和時間字段外,這兩個選項(xiàng)都以 yesterday战授、today,和 tomorrow 作為有效參數(shù)页藻。

運(yùn)行下面的 journalctl 命令來列出今天記錄中的所有日志條目。

[root@host ~]# journalctl --since today 
-- Logs begin at Wed 2019-02-20 16:01:17 +07, end at Thu 2019-02-21 18:31:14 +07.
 --
 ...output omitted...
Feb 21 18:22:44 host.lab.example.com systemd-logind[708]: New session 21 of user  root. Feb 21 18:22:44 host.lab.example.com systemd[1]: Started Session 21 of user root. 
Feb 21 18:22:44 host.lab.example.com sshd[24499]: pam_unix(sshd:session): session  opened for user root by (uid=0) 
Feb 21 18:31:13 host.lab.example.com systemd[1]: Starting dnf makecache...
Feb 21 18:31:14 host.lab.example.com dnf[24533]: Red Hat Enterprise Linux 8.0
 AppStream (dvd)    637 kB/s | 2.8 kB     00:00
Feb 21 18:31:14 host.lab.example.com dnf[24533]: Red Hat Enterprise Linux 8.0
 BaseOS (dvd)       795 kB/s | 2.7 kB     00:00 
Feb 21 18:31:14 host.lab.example.com dnf[24533]: Metadata cache created.
Feb 21 18:31:14 host.lab.example.com systemd[1]: Started dnf makecache.
lines 533-569/569 (END) q

運(yùn)行以下 journalctl 命令植兰,列出從 2019-02-10 20:30:002019-02-13 12:00:00:00 的所有日志條目份帐。

[root@host ~]# journalctl --since "2014-02-10 20:30:00" --until "2014-02-13
 12:00:00" 
 ...output omitted...

你也可以指定一個時間以來的所有條目相對于現(xiàn)在的所有條目。例如楣导,要指定最近一個小時內(nèi)的所有條目废境,可以使用以下命令。

[root@host ~]# journalctl --since "-1 hour" 
...output omitted...

除了日志的可見內(nèi)容外筒繁,還有一些附加到日志條目上的字段噩凹,這些字段只有在開啟了常規(guī)輸出時才能看到。任何顯示的額外字段都可以用來過濾日志查詢的輸出毡咏。這對于減少日志中某些事件的復(fù)雜搜索輸出很有用驮宴。

[root@host ~]# journalctl -o verbose 
-- Logs begin at Wed 2019-02-20 16:01:17 +07, end at Thu 2019-02-21 18:31:14 +07.
 --
 ...output omitted...
Thu 2019-02-21 18:31:14.509128 +07... 
    PRIORITY=6
    _BOOT_ID=4409bbf54680496d94e090de9e4a9e23
    _MACHINE_ID=73ab164e278e48be9bf80e80714a8cd5
    SYSLOG_FACILITY=3
    SYSLOG_IDENTIFIER=systemd
    _UID=0
    _GID=0
    CODE_FILE=../src/core/job.c
    CODE_LINE=826
    CODE_FUNC=job_log_status_message
    JOB_TYPE=start
    JOB_RESULT=done
    MESSAGE_ID=39f53479d3a045ac8e11786248231fbf
    _TRANSPORT=journal
    _PID=1
    _COMM=systemd
    _EXE=/usr/lib/systemd/systemd
    _CMDLINE=/usr/lib/systemd/systemd --switched-root --system --deserialize 18
    _CAP_EFFECTIVE=3fffffffff
    _SELINUX_CONTEXT=system_u:system_r:init_t:s0
    _SYSTEMD_CGROUP=/init.scope
    _SYSTEMD_UNIT=init.scope
    _SYSTEMD_SLICE=-.slice
    UNIT=dnf-makecache.service     MESSAGE=Started dnf makecache.
    _HOSTNAME=host.lab.example.com
    INVOCATION_ID=d6f90184663f4309835a3e8ab647cb0e
    _SOURCE_REALTIME_TIMESTAMP=1550748674509128 
lines 32239-32275/32275 (END) q

下面列出了系統(tǒng)日志的常用字段,可以用來搜索與特定過程或事件相關(guān)的行呕缭。

  • _COMM 命令的名稱
  • _EXE 進(jìn)程的可執(zhí)行文件的路徑
  • _PID 進(jìn)程的PID
  • _UID 運(yùn)行該進(jìn)程的用戶的UID
  • _SYSTEMD_UNIT 啟動該進(jìn)程的systemd單元

可以用 journalctl 命令將多個系統(tǒng)日志字段組合起來堵泽,形成一個細(xì)粒度的搜索查詢。例如臊旭,下面的 **journalctl **命令顯示了來自 PID 1182 進(jìn)程的所有與 sshd.service systemd 服務(wù)相關(guān)的日志條目落恼。

[root@host ~]# journalctl _SYSTEMD_UNIT=sshd.service _PID=1182 
Apr 03 19:34:27 host.lab.example.com sshd[1182]: Accepted password for root  from ::1 port 52778 ssh2 
Apr 03 19:34:28 host.lab.example.com sshd[1182]: pam_unix(sshd:session): session  opened for user root by (uid=0) 
...output omitted...

保存系統(tǒng)日志

目標(biāo)

完成本節(jié)內(nèi)容后,您能夠配置系統(tǒng)日志离熏,以保存服務(wù)器重啟時的事件記錄。

永久存儲系統(tǒng)日志

默認(rèn)情況下戴涝,系統(tǒng)日志被保存在/run/log/journal目錄下滋戳,這意味著當(dāng)系統(tǒng)重啟時钻蔑,日志會被清除。你可以在/etc/systemd/journald.conf文件中更改systemd-journald服務(wù)的配置設(shè)置奸鸯,使日志在重啟時持續(xù)存在咪笑。

/etc/systemd/journald.conf 文件中的存儲參數(shù)定義了是以易失性方式存儲系統(tǒng)日志,還是在重啟時持久地存儲系統(tǒng)日志娄涩。將此參數(shù)設(shè)置為persistent窗怒、 volatileauto,方法如下蓄拣。

  • persistent:將日志存儲在/var/log/journal目錄下扬虚,并在重啟后持續(xù)存在。如果/var/log/journal目錄不存在球恤,systemd-journald服務(wù)將創(chuàng)建該目錄辜昵。
  • volatile:將日志存儲在易失性/ run / log / journal目錄中。由于/run文件系統(tǒng)是臨時性的咽斧,只存在于運(yùn)行時內(nèi)存中堪置,所以存儲在其中的數(shù)據(jù),包括系統(tǒng)日志张惹,在重啟后不會持久化舀锨。
  • auto: rsyslog決定使用持久性存儲還是易失性存儲。如果/var/log/ journal目錄存在宛逗,那么rsyslog使用持久性存儲坎匿,否則使用易失性存儲。如果沒有設(shè)置存儲參數(shù)拧额,這是默認(rèn)的操作碑诉。

持久性系統(tǒng)日志的優(yōu)點(diǎn)是在啟動時可以立即獲得歷史數(shù)據(jù)。但是侥锦,即使有了持久化日志进栽,也不是所有的數(shù)據(jù)都會永遠(yuǎn)保存。日志有一個內(nèi)置的日志切割機(jī)制恭垦,每月觸發(fā)一次快毛。此外,在默認(rèn)情況下番挺,日志不允許獲得大于它所處的文件系統(tǒng)的10%唠帝,也不允許留下少于15%的文件系統(tǒng)空閑的日志。這些值可以在/etc/systemd/journald.conf中對運(yùn)行時和持久化日志進(jìn)行調(diào)整玄柏。當(dāng)systemdjournald進(jìn)程啟動時襟衰,當(dāng)前對日志的大小限制會被記錄下來。下面的命令輸出顯示了反映當(dāng)前大小限制的日志條目粪摘。

[user@host ~]$ journalctl | grep -E 'Runtime|System journal' 
Feb 25 13:01:46 localhost systemd-journald[147]: Runtime journal (/run/log/journal/ae06db7da89142138408d77efea9229c) is 8.0M, max 91.4M, 83.4M free. 
Feb 25 13:01:48 remotehost.lab.example.com systemd-journald[548]: Runtime journal  (/run/log/journal/73ab164e278e48be9bf80e80714a8cd5) is 8.0M, max 91.4M, 83.4M  free. 
Feb 25 13:01:48 remotehost.lab.example.com systemd-journald[548]: System journal  (/var/log/journal/73ab164e278e48be9bf80e80714a8cd5) is 8.0M, max 3.7G, 3.7G free.
Feb 25 13:01:48 remotehost.lab.example.com systemd[1]: Starting Tell Plymouth To  Write Out Runtime Data...
Feb 25 13:01:48 remotehost.lab.example.com systemd[1]: Started Tell Plymouth To  Write Out Runtime Data.

配置持久性系統(tǒng)日志

要配置 systemd-journald 服務(wù)在重啟時持久地保存系統(tǒng)日志瀑晒,請在 /etc/systemd/journald.conf 文件中設(shè)置 Storage 為 persistent绍坝。以超級用戶的身份運(yùn)行你選擇的文本編輯器來編輯 **/etc/systemd/journald.conf **文件。

[Journal]
Storage=persistent 
...output omitted...

編輯配置文件后苔悦,重新啟動systemd-journald服務(wù)轩褐,使配置更改生效。

[root@host ~]# systemctl restart systemd-journald

如果 systemd-journald 服務(wù)成功重啟玖详,可以看到 /var/log/ journal 目錄被創(chuàng)建把介,并包含一個或多個子目錄。這些子目錄的長名中有十六進(jìn)制字符蟋座,并包含*.journald文件拗踢。這些 *.journal 文件是二進(jìn)制文件,用于存儲結(jié)構(gòu)化和索引化的日志條目蜈七。

[root@host ~]# ls /var/log/journal
73ab164e278e48be9bf80e80714a8cd5 
[root@host ~]# ls /var/log/journal/73ab164e278e48be9bf80e80714a8cd5 
system.journal  user-1000.journal

當(dāng)系統(tǒng)日志會在重啟時持續(xù)存在秒拔,你會在 journalctl 命令的輸出中得到大量的條目,其中包括當(dāng)前系統(tǒng)啟動和之前的條目飒硅。要將輸出限制在特定的系統(tǒng)啟動中砂缩,請使用 journalctl 命令的 -b 選項(xiàng)。下面的 journalctl 命令將檢索僅限于第一次系統(tǒng)啟動時的條目三娩。

[root@host ~]# journalctl -b 1 
...output omitted...

下面的 journalctl 命令可以檢索僅限于第二次系統(tǒng)啟動時的條目庵芭。下面的參數(shù)只有在系統(tǒng)重啟兩次以上時才有意義:

[root@host ~]# journalctl -b 2

下面的 journalctl 命令可以檢索僅限于當(dāng)前系統(tǒng)啟動的條目:

[root@host ~]# journalctl -b

保持準(zhǔn)確的時間

目標(biāo)

完成本節(jié)后,您能夠使用NTP保持準(zhǔn)確的時間同步雀监,并配置時區(qū)双吆,以確保系統(tǒng)日志和日志記錄的事件的正確時間戳。

設(shè)置本地時鐘和時區(qū)

正確的同步系統(tǒng)時間對于跨系統(tǒng)的日志文件分析至關(guān)重要会前。網(wǎng)絡(luò)時間協(xié)議(NTP)是機(jī)器在互聯(lián)網(wǎng)上提供和獲取正確時間信息的標(biāo)準(zhǔn)方式好乐。機(jī)器可以從互聯(lián)網(wǎng)上的公共NTP服務(wù)中獲得準(zhǔn)確的時間信息,如NTP Pool Project.瓦宜。另一種選擇是使用高質(zhì)量的硬件時鐘向本地客戶提供準(zhǔn)確的時間蔚万。

timedatectl命令顯示了當(dāng)前時間相關(guān)的系統(tǒng)設(shè)置概覽,包括系統(tǒng)當(dāng)前的時間临庇、時區(qū)和NTP同步設(shè)置反璃。

[user@host ~]$ timedatectl
               Local time: Fri 2019-04-05 16:10:29 CDT
           Universal time: Fri 2019-04-05 21:10:29 UTC
                 RTC time: Fri 2019-04-05 21:10:29
                Time zone: America/Chicago (CDT, -0500)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

可以使用timedatectl list-timezones命令列出一個時區(qū)數(shù)據(jù)庫。

[user@host ~]$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako ...

時區(qū)名稱以IANA維護(hù)的公共時區(qū)數(shù)據(jù)庫為基礎(chǔ)假夺。時區(qū)的命名是根據(jù)大陸或海洋來命名的淮蜈,然后通常是以時區(qū)內(nèi)最大的城市來命名,但不一定是以時區(qū)內(nèi)最大的城市來命名已卷。例如梧田,美國的大部分山地時區(qū)是America/Denver。

在時區(qū)內(nèi)的地方有不同的夏令時規(guī)則的情況下,選擇正確的名稱可能是不直觀的柿扣。例如肖方,在美國闺魏,亞利桑那州(美國山地時間)的大部分地區(qū)根本沒有夏令時的調(diào)整未状,而是處于America/Phoenix時區(qū)。

tzselect 命令用于識別正確的 zoneinfo 時區(qū)名稱析桥。它可以交互式地提示用戶關(guān)于系統(tǒng)位置的問題司草,并輸出正確的時區(qū)名稱。它不會對系統(tǒng)的時區(qū)設(shè)置進(jìn)行任何更改泡仗。

超級用戶可以使用timedatectl set-timezone命令改變系統(tǒng)設(shè)置埋虹,更新當(dāng)前時區(qū)。下面的 timedatectl 命令將當(dāng)前時區(qū)更新為America/Phoenix娩怎。

[root@host ~]# timedatectl set-timezone America/Phoenix
[root@host ~]# timedatectl
               Local time: Fri 2019-04-05 14:12:39 MST
           Universal time: Fri 2019-04-05 21:12:39 UTC
                 RTC time: Fri 2019-04-05 21:12:39
                Time zone: America/Phoenix (MST, -0700)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

使用 timedatectl set-time 命令來改變系統(tǒng)的當(dāng)前時間搔课。時間是以 "YYY-MM-DD hh:mm:ss "格式指定的,可以省略日期或時間截亦。下面的 timedatectl 命令將時間改為 09:00:00:00爬泥。

[root@host ~]# timedatectl set-time 9:00:00
[root@serverX ~]$ timedatectl
               Local time: Fri 2019-04-05 09:00:27 MST
           Universal time: Fri 2019-04-05 16:00:27 UTC
                 RTC time: Fri 2019-04-05 16:00:27
                Time zone: America/Phoenix (MST, -0700)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

timedatectl set-ntp命令可以開啟或關(guān)閉NTP同步,以實(shí)現(xiàn)時間自動調(diào)整崩瓤。該選項(xiàng)需要一個truefalse參數(shù)來開啟或關(guān)閉袍啡。下面的 timedatectl 命令可以打開 NTP 同步。

[root@host ~]# timedatectl set-ntp true

在 Red Hat Enterprise Linux 8 中却桶,timedatectl set-ntp 命令將調(diào)整 chronyd NTP 服務(wù)是否運(yùn)行境输。其他Linux發(fā)行版可能會使用這個設(shè)置來調(diào)整不同的NTP或SNTP服務(wù)。

使用 Red Hat Enterprise Linux 中的其他實(shí)用程序(例如在圖形化 GNOME 設(shè)置應(yīng)用程序中)啟用或禁用 NTP颖系,也會更新此設(shè)置嗅剖。

配置和監(jiān)視CHRONYD

chronyd服務(wù)通過將通常不準(zhǔn)確的本地硬件時鐘(RTC)與配置的NTP服務(wù)器同步,使其保持正常狀態(tài)嘁扼。如果沒有網(wǎng)絡(luò)連接信粮, chronyd會計算RTC時鐘漂移,并記錄在/etc/ chrony.conf配置文件中指定的 driftfile 文件中偷拔。

默認(rèn)情況下蒋院,CHRONYD服務(wù)使用NTP Pool Project中的服務(wù)器進(jìn)行時間同步,不需要額外配置莲绰。當(dāng)有關(guān)機(jī)器位于一個孤立的網(wǎng)絡(luò)上時欺旧,改變NTP服務(wù)器可能會很有用。

NTP時間源的層次決定了其質(zhì)量蛤签。 層次決定了機(jī)器與高性能參考時鐘之間的跳數(shù)辞友。 參考時鐘是第0層時間源。 直接連接到它的NTP服務(wù)器是第1層,而來自NTP服務(wù)器的計算機(jī)同步時間是第2層的時間源称龙。

/etc/ chrony.conf配置文件中留拾,服務(wù)器和peer是時間源的兩類。服務(wù)器比本地NTP服務(wù)器高一個地層鲫尊,而對等者則在同一地層痴柔。可以指定一個以上的服務(wù)器和一個以上的對等者,每行一個。

server行的第一個參數(shù)是NTP服務(wù)器的IP地址或DNS名忍抽。在服務(wù)器的IP地址或名稱之后叉弦,可以列出服務(wù)器的一系列選項(xiàng)。建議使用iburst選項(xiàng),因?yàn)樵诜?wù)啟動后,為了更準(zhǔn)確的初始時鐘同步,會在短時間內(nèi)進(jìn)行四次測量糯耍。

/etc/chrony.conf文件中的以下服務(wù)器classroom.examplex.com iburst行會導(dǎo)致chronyd服務(wù)使用classroom.examplex.com NTP時間源。

# Use public servers from the pool.ntp.org project.
...output omitted...
server classroom.example.com iburst 
...output omitted...

chronyd指向本地時間源classroom.examplex.com后囊嘉,應(yīng)該重新啟動服務(wù)温技。

[root@host ~]# systemctl restart chronyd

chronyc命令的作用是作為 chronyd 服務(wù)的客戶端。在設(shè)置了 NTP 同步后哗伯,您應(yīng)該使用 chrony sources 命令來驗(yàn)證本地系統(tǒng)是否無縫地使用 NTP 服務(wù)器來同步系統(tǒng)時鐘荒揣。要獲得更多關(guān)于輸出的詳細(xì)說明,請使用 chronyc sources -v 命令焊刹。

[root@host ~]# chronyc sources -v
210 Number of sources = 1
  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||                                                /   xxxx = adjusted offset,
||         Log2(Polling interval) -.             |    yyyy = measured offset, ||                                  \            |    zzzz = estimated error.
||                                   |           |
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* classroom.example.com         8   6    17    23   -497ns[-7000ns] +/-  956us

S(Source state)字段中的*字符表示Classroom.examplex.com服務(wù)器被用作時間源系任,是機(jī)器當(dāng)前同步到的NTP服務(wù)器。

總結(jié)

  • systemd-journald和rsyslog服務(wù)捕獲日志消息并寫入相應(yīng)的文件虐块。
  • /var/log目錄中包含日志文件俩滥。
  • 日志文件的周期性切割,避免了文件系統(tǒng)空間被占滿贺奠。
  • 系統(tǒng)日志是臨時性的霜旧,不會在重啟時持續(xù)存在。
  • chronyd服務(wù)有助于將時間設(shè)置與時間源同步儡率。
  • 可以根據(jù)服務(wù)器的位置來更新服務(wù)器的時區(qū)挂据。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市儿普,隨后出現(xiàn)的幾起案子崎逃,更是在濱河造成了極大的恐慌,老刑警劉巖眉孩,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件个绍,死亡現(xiàn)場離奇詭異勒葱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)巴柿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門凛虽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人广恢,你說我怎么就攤上這事凯旋。” “怎么了袁波?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵瓦阐,是天一觀的道長。 經(jīng)常有香客問我篷牌,道長,這世上最難降的妖魔是什么踏幻? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任枷颊,我火速辦了婚禮,結(jié)果婚禮上该面,老公的妹妹穿的比我還像新娘夭苗。我一直安慰自己,他們只是感情好隔缀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布题造。 她就那樣靜靜地躺著,像睡著了一般猾瘸。 火紅的嫁衣襯著肌膚如雪界赔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天牵触,我揣著相機(jī)與錄音淮悼,去河邊找鬼。 笑死揽思,一個胖子當(dāng)著我的面吹牛袜腥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钉汗,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼羹令,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了损痰?” 一聲冷哼從身側(cè)響起福侈,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徐钠,沒想到半個月后癌刽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年显拜,在試婚紗的時候發(fā)現(xiàn)自己被綠了衡奥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡远荠,死狀恐怖矮固,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情譬淳,我是刑警寧澤档址,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站邻梆,受9級特大地震影響守伸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浦妄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一尼摹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剂娄,春花似錦蠢涝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耳胎,卻和暖如春惯吕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背场晶。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工混埠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诗轻。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓钳宪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扳炬。 傳聞我的和親對象是個殘疾皇子吏颖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 了解日志文件是很重要的事情。日志文件可以記錄系統(tǒng)在什么時間恨樟、哪臺主機(jī)半醉、哪個服務(wù)、出現(xiàn)了什么信息等劝术∷醵啵可以在系統(tǒng)出現(xiàn)問...
    Zhang21閱讀 5,301評論 0 5
  • 日志介紹 日志 記錄歷史事件:時間呆奕,地點(diǎn),人物衬吆,事件 日志級別:事件的關(guān)鍵性程度梁钾,Loglevel 系統(tǒng)日志服務(wù) ...
    Ben0606閱讀 1,735評論 0 2
  • 日志介紹rsyslog日志管理journalctlMySQL管理日志 一、日志介紹 (一)日志的基本概念 日志:將...
    哈嘍別樣閱讀 492評論 0 0
  • 作者:自由早晚亂余生自由早晚亂余生博客園:https://www.cnblogs.com/operationhom...
    碼農(nóng)小光閱讀 642評論 0 11
  • “寓教于樂”已經(jīng)成為目前最流行的教育孩子的方法逊抡∧沸海“樂”字的含義就是要在學(xué)習(xí)的過程中體味到輕松和快樂,樂于學(xué)習(xí)冒嫡,樂于...
    偉動力閱讀 823評論 0 0