Linux系統中的日誌管理及優化方式

前言

日誌的採集是由各個程序來完成的,因爲你的程序會將自己的某些執行信息書寫到日誌中。
而journald和rsyslog是用來採集日誌的,並以某種格式保存。在企業7之前只有rsyslog。在企業7之後兩個都有。
journald是無法關閉的。
在系統中做任何重大的設置修改,都會產生日誌。

  • 實驗環境
    rhel7_node1:172.25.254.10
    rhel8_node1:172.25.254.11

journald

服務名稱:systemd-journald.service

[root@rhel7_node1 ~]# systemctl status systemd-journald.service
● systemd-journald.service - Journal Service
   Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-09 19:10:55 CST; 53min ago
     Docs: man:systemd-journald.service(8)
           man:journald.conf(5)
 Main PID: 3353 (systemd-journal)
   Status: "Processing requests..."
    Tasks: 1
   CGroup: /system.slice/systemd-journald.service
           └─3353 /usr/lib/systemd/systemd-journald

Mar 09 19:10:55 rhel7_node1.westos.com systemd-journal[3353]: Runtime journal…).
Mar 09 19:10:55 rhel7_node1.westos.com systemd-journal[3353]: Journal started
Hint: Some lines were ellipsized, use -l to show in full.

所提供的命令是journalctl
默認日誌存放路徑:/run/log(每次重啓系統會對日誌進行清空)

[root@rhel7_node1 ~]# cd /run/log
[root@rhel7_node1 log]# ls
journal
[root@rhel7_node1 log]# bootctl 
System:
   Machine ID: 4f72081b06bf47e99ea36241be61e2e4   #機器碼,顯示當前機器的日誌
      Boot ID: 15a33520fcfe40d48709fc6faa55a7ba

No suitable data is provided by the boot manager. See:
  http://www.freedesktop.org/wiki/Software/systemd/BootLoaderInterface
  http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec
for details.

[root@rhel7_node1 journal]# ls
4f72081b06bf47e99ea36241be61e2e4

實驗步驟(journalctl命令的用法)

  • journalctl
    -n 3(日誌的最新3條)

       [root@rhel7_node1 journal]# systemctl restart sshd
      [root@rhel7_node1 journal]# journalctl -n 3
      -- Logs begin at Mon 2020-03-09 19:09:58 CST, end at Mon 2020-03-09 20:12:01 CST. --
      Mar 09 20:12:00 rhel7_node1.westos.com sshd[10817]: Server listening on :: port 22.
      Mar 09 20:12:01 rhel7_node1.westos.com polkitd[7090]: Unregistered Authentication Agent for unix-pr
      Mar 09 20:12:00 rhel7_node1.westos.com systemd[1]: Started OpenSSH server daemon.
    

    since “2020-02-13 17:00”(顯示17:00後的日誌)

        [root@rhel7_node1 ~]# journalctl --since "2020-03-10 16:25"
      -- Logs begin at Tue 2020-03-10 16:22:32 CST, end at Tue 2020-03-10 16:30:01 CST. --
      Mar 10 16:25:24 rhel7_node1.westos.com gnome-shell[9919]: JS WARNING: [resource:///org/gnome/shell/
      Mar 10 16:25:24 rhel7_node1.westos.com gnome-shell[9919]: JS WARNING: [resource:///org/gnome/shell/
      Mar 10 16:25:26 rhel7_node1.westos.com dbus[7066]: [system] Activating via systemd: service name='n
      ...
    

    until"2020-02-13 17:00"(顯示日誌到17:00)

      [root@rhel7_node1 ~]# journalctl --until "2020-03-10 16:22:33"
      -- Logs begin at Tue 2020-03-10 16:22:32 CST, end at Tue 2020-03-10 16:31:28 CST. --
      Mar 10 16:22:32 localhost.localdomain systemd-journal[85]: Runtime journal is using 8.0M (max allow
      Mar 10 16:22:32 localhost.localdomain kernel: Initializing cgroup subsys cpuset
      Mar 10 16:22:32 localhost.localdomain kernel: Initializing cgroup subsys cpu
      Mar 10 16:22:32 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
      ...
    

    -o(設置日誌的顯示方式)
    short(經典模式顯示日誌)

      [root@rhel7_node1 ~]# journalctl -o short
      -- Logs begin at Tue 2020-03-10 16:22:32 CST, end at Tue 2020-03-10 16:33:31 CST. --
      Mar 10 16:22:32 localhost.localdomain systemd-journal[85]: Runtime journal is using 8.0M (max allow
      Mar 10 16:22:32 localhost.localdomain kernel: Initializing cgroup subsys cpuset
      Mar 10 16:22:32 localhost.localdomain kernel: Initializing cgroup subsys cpu
      Mar 10 16:22:32 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
    

    verbose(顯示日誌的全部字節)

      [root@rhel7_node1 ~]# journalctl -o verbose
      -- Logs begin at Tue 2020-03-10 16:22:32 CST, end at Tue 2020-03-10 16:36:30 CST. --
      Tue 2020-03-10 16:22:32.608315 CST [s=f137873616914c5dae3d6ba6f1bfd010;i=1;b=ea79dda9bc13465f9f8acb
          PRIORITY=6
          _TRANSPORT=driver
          MESSAGE=Runtime journal is using 8.0M (max allowed 90.9M, trying to leave 136.4M free of 901.7M
          MESSAGE_ID=ec387f577b844b8fa948f33cad9a75e6
          _PID=85
          _UID=0
          _GID=0
          _COMM=systemd-journal
          _EXE=/usr/lib/systemd/systemd-journald
          _CMDLINE=/usr/lib/systemd/systemd-journald
          _CAP_EFFECTIVE=5402800cf
          _SYSTEMD_CGROUP=/system.slice/systemd-journald.service
          _SYSTEMD_UNIT=systemd-journald.service
          _SYSTEMD_SLICE=system.slice
          _BOOT_ID=ea79dda9bc13465f9f8acb8ed43f07b1
          _MACHINE_ID=4f72081b06bf47e99ea36241be61e2e4
          _HOSTNAME=localhost.localdomain
      Tue 2020-03-10 16:22:32.608396 CST [s=f137873616914c5dae3d6ba6f1bfd010;i=2;b=ea79dda9bc13465f9f8acb
          PRIORITY=6
          _BOOT_ID=ea79dda9bc13465f9f8acb8ed43f07b1
          _MACHINE_ID=4f72081b06bf47e99ea36241be61e2e4
    

    export(適合傳輸和備份的二進制格式)

      [root@rhel7_node1 ~]# journalctl -o export
      __CURSOR=s=f137873616914c5dae3d6ba6f1bfd010;i=1;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=170534;t=5a07b
      __REALTIME_TIMESTAMP=1583828552608315
      __MONOTONIC_TIMESTAMP=1508660
      _BOOT_ID=ea79dda9bc13465f9f8acb8ed43f07b1
      PRIORITY=6
      _TRANSPORT=driver
      MESSAGE=Runtime journal is using 8.0M (max allowed 90.9M, trying to leave 136.4M free of 901.7M ava
      MESSAGE_ID=ec387f577b844b8fa948f33cad9a75e6
      _PID=85
      ......
    

    json(js格式顯示輸出)

      [root@rhel7_node1 ~]# journalctl -o json
      { "__CURSOR" : "s=f137873616914c5dae3d6ba6f1bfd010;i=1;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=170534;
      { "__CURSOR" : "s=f137873616914c5dae3d6ba6f1bfd010;i=2;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=170585;
      { "__CURSOR" : "s=f137873616914c5dae3d6ba6f1bfd010;i=3;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=17059c;
      { "__CURSOR" : "s=f137873616914c5dae3d6ba6f1bfd010;i=4;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=1705ad;
      { "__CURSOR" : "s=f137873616914c5dae3d6ba6f1bfd010;i=5;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=1705b9;
      { "__CURSOR" : "s=f137873616914c5dae3d6ba6f1bfd010;i=6;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=1705c7;
      { "__CURSOR" : "s=f137873616914c5dae3d6ba6f1bfd010;i=7;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=1705d5;
      { "__CURSOR" : "s=f137873616914c5dae3d6ba6f1bfd010;i=8;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=1705e3;
      { "__CURSOR" : "s=f137873616914c5dae3d6ba6f1bfd010;i=9;b=ea79dda9bc13465f9f8acb8ed43f07b1;m=1705f5;
    

    -p(顯示指定級別的日誌)
    0 emerg(系統的嚴重問題日誌)
    1 alert(系統中立即要更改的信息)
    2 crit(嚴重級別會導致系統軟件不能正常工作)
    3 err(程序報錯)
    4 warning(程序警告)
    5 notice(重要信息的普通日誌)
    6 info(普通信息)
    7 debug(程序排錯信息)

      [root@rhel7_node1 ~]# journalctl -p err
      -- Logs begin at Tue 2020-03-10 16:22:32 CST, end at Tue 2020-03-10 16:41:07 CST. --
      Mar 10 16:22:54 rhel7_node1.westos.com kernel: piix4_smbus 0000:00:07.3: SMBus Host Controller not 
      Mar 10 16:23:14 rhel7_node1.westos.com smartd[7088]: DEVICESCAN failed: glob(3) aborted matching pa
      Mar 10 16:23:14 rhel7_node1.westos.com smartd[7088]: In the system's table of devices NO devices fo
      Mar 10 16:24:10 rhel7_node1.westos.com pulseaudio[10476]: [alsa-source-ES1371/1] alsa-source.c: ALS
      Mar 10 16:24:10 rhel7_node1.westos.com pulseaudio[10476]: [alsa-source-ES1371/1] alsa-source.c: Mos
      Mar 10 16:24:10 rhel7_node1.westos.com pulseaudio[10476]: [alsa-source-ES1371/1] alsa-source.c: We 
      Mar 10 16:24:24 rhel7_node1.westos.com spice-vdagent[11460]: Cannot access vdagent virtio channel /
      ...
    

    -F PRIORITY(查看可控日誌級別是234567因爲01是內核級別的)

      [root@rhel7_node1 ~]# journalctl -F PRIORITY
      2
      3
      4
      7
      5
      6
    

    -u sshd(指定查看服務)

      [root@rhel7_node1 ~]# journalctl -u sshd
      -- Logs begin at Tue 2020-03-10 16:22:32 CST, end at Tue 2020-03-10 16:47:43 CST. --
      Mar 10 16:23:33 rhel7_node1.westos.com systemd[1]: Starting OpenSSH server daemon...
      Mar 10 16:23:35 rhel7_node1.westos.com sshd[7725]: Server listening on 0.0.0.0 port 22.
      Mar 10 16:23:35 rhel7_node1.westos.com sshd[7725]: Server listening on :: port 22.
      Mar 10 16:23:35 rhel7_node1.westos.com systemd[1]: Started OpenSSH server daemon.
    

    disk-usage(查看日誌大小)

      [root@rhel7_node1 ~]# journalctl --disk-usage
      Archived and active journals take up 8.0M on disk.
    

    vacuum-size=1G(設定日誌存放大小:臨時)

      [root@rhel7_node1 ~]# journalctl --vacuum-size=1G
      Vacuuming done, freed 0B of archived journals on disk.
    

    vacuum-time=1W(設定日誌最長存放時間:臨時)

      [root@rhel7_node1 ~]# journalctl --vacuum-time=1W
      Failed to parse vacuum time: 1W
    

    -f(監控日誌)
    注意:需要查看某個服務的日誌的時候,先查找到這個服務的ID(systemctl -o verbose),然後顯示日誌的全部內容,查找這個服務的_SYSTEMD_UNIT,接下來輸入以下命令:journalctl _PID=10924 _SYSTEMD_UNIT=sshd.service

      [root@rhel7_node1 ~]# journalctl _PID=19655 _SYSTEMD_UNIT=sshd.service 
      -- Logs begin at Tue 2020-03-10 16:22:32 CST, end at Tue 2020-03-10 17:01:01 CST. --
      Mar 10 16:59:50 rhel7_node1.westos.com sshd[19655]: Server listening on 0.0.0.0 port 22.
      Mar 10 16:59:50 rhel7_node1.westos.com sshd[19655]: Server listening on :: port 22.
    

實驗步驟(用journald服務永久存放日誌)

系統中默認日誌在:/run/log/journal中
默認方式在系統重啓後日志會被清理要永久保持日誌請完成一下操作:

mkdir   /var/log/journal
chgrp   systemd-journal    /var/log/journal
chmod 2775     /var/log/journal
systemctl   restart  systemd-journald.service

當服務器重啓,日誌存放路徑會被制定到:/var/log/journal

測試:
1.在操作以上步驟之前查看日誌
2.重啓系統
3.再次查看日誌
4.可以看出之前的日誌並沒有被保存,只能看到重啓後的新日誌
5.完成上述操作後再次重啓系統可以看到日誌是被保存下來的

rsyslog

  • 服務名稱:rsyslog.service
  • 日誌存放:
    /var/log/messages #系統服務日誌,常規信息,服務報錯
    /var/log/secure #系統認證信息日誌
    /var/log/maillog #系統郵件日誌信息
    /var/log/cron #系統定時任務信息
    /var/log/boot.log #系統啓動日誌信息
  • 配置文件:/etc/rsyslog.conf

實驗步驟(自定義日誌採集路徑)

1.修改配置文件
vim /etc/rsyslog.conf

日誌類型.日誌級別 日誌存放路徑

*.*                                                     /var/log/westos     #把系統中所有級別的日誌存放到westos中


*.*;authpriv.none     							/var/log/westos      #把系統中所有級別的日誌存放到westos中,但是除了authpriv不存放到westos中

日誌類型:
auth #用戶認證
authpriv #服務認證
cron #時間任務
kern #內核類型
mail #郵件
news #系統更新信息
user #用戶

日誌級別:
debug
info
notice
waring
err
crit
alert
emerg
none

2.執行和測試

實驗步驟(如何更改日誌採集格式)

1.定義日誌採集格式

在配置文件中:
30 $template WESTOS, "%FROMHOST-IP% %timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"  #定義一個名爲WESTOS的格式
				#WESTOS:   格式名稱
				#%FORMHOST-IP%:日誌來源主機IP
				#%timegenerated%: 日誌生成時間
				#%syslogtag%: 日誌生成服務
				#%msg%: 日誌內容
				#\n: 換行

2.設定日誌採集格式應用
通配符.通配符authpriv.none /var/log/ westos;WESTOS

54 *.info;mail.none;authpriv.none;cron.none                /var/log/messages;WESTOS   #將此格式應用到某個記錄日誌的文件

3.清空原來的日誌文件

[root@rhel7_node1 log]# > /var/log/messages 

4.重啓日誌服務

[root@rhel7_node1 log]# systemctl restart rsyslog

5.查看新的日誌格式

[root@rhel7_node1 log]# cat /var/log/messages 
127.0.0.1 Mar 10 19:45:03 systemd: Stopping System Logging Service...
127.0.0.1 Mar 10 19:45:03 rsyslogd:  [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="23061" x-info="http://www.rsyslog.com"] exiting on signal 15.
127.0.0.1 Mar 10 19:45:03 systemd: Stopped System Logging Service.
127.0.0.1 Mar 10 19:45:03 systemd: Starting System Logging Service...
127.0.0.1 Mar 10 19:45:03 rsyslogd:  [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="23120" x-info="http://www.rsyslog.com"] start
127.0.0.1 Mar 10 19:45:03 systemd: Started System Logging Service.

實驗步驟(日誌的遠程同步)

在企業中,爲了方便管理,我們需要集中查看日誌,而不是一臺一臺的去查看。所以需要將所有人的日誌存放到一臺主機。

實驗環境:
rhel7_node1:172.25.254.10 #存放日誌作爲日誌接收端,所有人日誌都存放到此臺主機
rhel8_node1:172.25.254.11 #發送日誌到rhel7_node主機中

1.在rhel7中設定接收所有人日誌
先關閉火牆

systemctl stop firewalld 

選擇udp協議是因爲此實驗及其操作環境均在內網,且對效率要求較高

vim /etc/rsyslog.conf
15 $ModLoad imudp  ##打開日誌接受插件
16 ¥UDPServerRun  514 ##指定插件使用接口

重啓服務:

root@rhel7_node1 ~]# systemctl restart rsyslog

查詢端口:

root@rhel7_node1 ~]# netstat -antlupe | grep rsyslog
udp  0  0 0.0.0.0:514  0.0.0.0:*    0   67600   11115/rsyslogd
udp  0  0 :::514  :::*    0   67601   11115/rsyslogd
此時企業7的udp接受端口已經打開

2.rhel8中設定發送日誌到rhel7中
設置配置文件:

vim /etc/rsyslog.conf
*.*    @172.25.254.10
										#  @  表示使用udp傳輸日誌
										#  @@  表示使用tcp傳輸日誌
										#  @172.25.254.11  把本機日誌用udp方式發送到172.25.254.11主機

重啓服務:

systemctl restart rsyslog	

測試:

在rhel7和8中

"> /var/log/messages"   #清空日誌文件以便觀察

在rhel8中

logger westos test message  #製造日誌文件

在rhel7中可以看到8中生成的日誌

[root@rhel7_node1 log]# cat /var/log/messages
Mar 10 20:41:48 rhel8_node1 root[6352]: westos haha

timedatectl

查看當前系統時間:
[root@rhel7_node1 log]# timedatectl
Local time: Wed 2020-03-11 00:39:37 CST
Universal time: Tue 2020-03-10 16:39:37 UTC #格林威治時間,倫敦時間
RTC time: Tue 2020-03-10 16:39:38 #硬件時間
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
設定系統時間

timedatectl set-time "2020-02-13 10:41:55"   

顯示系統的所有時區

timedatectl list-timezones  

設定系統時區

timedatectl set-timezone "Asis/Shanghai" 

設定系統時間計算方法

timedatectl set-local-rtc 0|1  #0表示使用utc時間計算方法(即硬件時間+時區)
#1表示使用local時間計算方式

時間同步服務

產生原因:需要更改大量主機系統時間時,不能一臺一臺改
服務名稱: chronyd.service
配置文件: /etc/chrony.conf

實驗步驟(同步兩個主機的時間)

要求:在rhel7作爲時間源
rhel8同步rhel7時間
1.在rhel7中

編輯配置文件:
vim /etc/chrony.conf
26 allow 192.168.0.0/24   #允許172.25.254.0.網段主機同步時間
29 local stratum 10    #開啓時間同步服務功能並設定級別爲10
重啓時間同步服務並關閉火牆:
systemctl restart chronyd.service
systemctl stop firewalld

在rhel8中

vim /etc/chrony.conf
3 pool  172.25.254.11 iburst

重啓服務

systemctl restart chronyd

查看:
在rhel8中查看時間:

[root@rhel8_node1 ~]# date
2020年 03月 10日 星期二 17:00:50 CST

使用chronyc命令查看時間效果:

[root@rhel8_node1 ~]# 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
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 192.168.0.10                  3   6   177    56   -862us[ -565us] +/-   23ms    #證明已經從企業7上同步過來了時間

後記

journald響應比較快,處理靈活
rsyslog比較精準
本節實驗比較多!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章