Centos 7/8 日志管理


LogSystem

CentOS 7/8 使用systemd-journald來做日志中心庫,使用rsyslog來做日志持久化,使用logrotate來做日志文件輪轉。

 

systemd-Journald

systemd-journald 守護進程提供一種改進的日志管理服務,可以收集來自內核,啟動過程的早期階段,標准輸出,系統日志,以及守護進程啟動和運行期間的錯誤的消息。

它將這些消息寫到一個結構化的事件日志中,默認情況下不在重新啟動之間保留。

 

持久化systemd日志

默認情況下,systemd 的日志保存在 /run/log/journal 中,系統重啟就會清除,這是RHEL7的新特性。通過新建 /var/log/journal 目錄,日志會自動記錄到這個目錄中,並永久存儲。

# 1. 修改journal存儲模式 [root@study ~]# sed -i "/^#Storage/cStorage=persistent" /etc/systemd/journald.conf # 2. 先處理所需要的目錄與相關權限設置 ( 可選,服務重啟后會自動創建該目錄 ) [root@study ~]# mkdir /var/log/journal [root@study ~]# chown root:systemd-journal /var/log/journal [root@study ~]# chmod 2775 /var/log/journal # 3. 重新啟動 systemd-journald 並且觀察備份的日志數據! [root@study ~]# systemctl restart systemd-journald.service [root@study ~]# ll /var/log/journal/ drwxr-sr-x. 2 root systemd-journal 27 Aug 20 02:37 309eb890d09f440681f596543d95ec

 

journalctl常用命令

# 以flow形式查看日志 $ journalctl -f # 查看內核日志 $ journalctl -k # 查看指定服務日志 $ journalctl -u docker.serivce # 查看指定日期日志 $ journalctl --since="2018-09-21 10:21:00" -u docker $ journalctl --since="2018-09-21 10:21:00" --until="2018-09-21 10:22:00" -u docker # 查看指定級別日志 $ journalctl -p 3 -u docker.service 操作系統提供了從0 (emerg) 到 7 (debug) 一共7個級別的日志,7個級別的含義為: 0: emerg 1: alert 2: crit 3: err 4: warning 5: notice 6: info
    7: debug # 查看日志占用的磁盤空間 $ journalctl --disk-usage # 設置日志占用的空間 $ journalctl --vacuum-size=500M # 設置日志保存的時間 $ journalctl --vacuum-time=1month # 檢查日志文件一致性 $ journalctl –-verify

 

rsyslog

rsyslog 服務隨后根據優先級排列日志信息,將它們寫入到 /var/log目錄中永久保存

rsyslog 配置文件 /etc/rsyslog.conf

*.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 # 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

logrotate ‐ rotates, compresses, and mails system logs. logrotate是Linux自帶的日志切割工具,logrotate是基於cron運行的。

logrotate的配置文件是/etc/logrotate.conf,其定義了logrotate的玩法:每周,最多4周,文件名加時間后綴,默認不壓縮。

# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # 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/ # system-specific logs may be also be configured here.

/etc/logrotate.d/中定義了需要切割Service的文件,syslog也在其中。

# cat /etc/logrotate.d/syslog /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler

logrotate是基於cron運行的,其腳本路徑為 /etc/cron.daily/logrotate

$ cat /etc/cron.daily/logrotate #!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi exit $EXITVALUE

logrotate基於CRON運行,所以執行時間由CRON控制

  • ubuntu查看/etc/crontab
  • centos查看/etc/anacrontab

沒錯,run-parts是運行一個目錄中的所有腳本或程序

沒錯,logrotate腳本是/etc/cron.daily/目錄下面的腳本,CRON每天05:01運行/etc/cron.daily/目錄下面的所有腳本

 

最后看一下Nginx的logrotate

# cat /etc/logrotate.d/nginx /var/log/nginx/*log { create 0664 nginx root daily rotate 10 missingok notifempty compress sharedscripts postrotate /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM