描述系統(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目錄下见秽。這些日志可以用普通的文本工具來檢查,比如less和tail桅打。
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 命令突出顯示重要的日志消息:notice或warning優(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, alert 和 emerg 優(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:00 到 2019-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窗怒、 volatile或auto,方法如下蓄拣。
- 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)需要一個true或false參數(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ū)挂据。