linux 日志管理


系統日志存放的位置

linux中的日志文件存儲在 /var/log*

不同模塊的日志會記錄到不同的模塊中去

模塊 位置
內核及公共消息日志 /var/log/messages
計划任務日志 /var/log/cron
系統引導日志 /var/log/dmesg
郵件系統日志 /var/log/maillog

查看內核日志
tail -f /var/log/message

[root@ecs-t6-large-2-linux-20190824103606 ~]# tail -f /var/log/messages
Sep 15 07:15:30 ecs-t6-large-2-linux-20190824103606 nm-dispatcher: req:1 'dhcp4-change' [eth0]: new request (2 scripts)
Sep 15 07:15:30 ecs-t6-large-2-linux-20190824103606 nm-dispatcher: req:1 'dhcp4-change' [eth0]: start running ordered scripts...
Sep 15 08:00:26 ecs-t6-large-2-linux-20190824103606 systemd: Starting Docker Cleanup...
Sep 15 08:00:26 ecs-t6-large-2-linux-20190824103606 systemd: Started Docker Cleanup.
Sep 15 08:01:01 ecs-t6-large-2-linux-20190824103606 systemd: Started Session 312 of user root.
Sep 15 09:00:04 ecs-t6-large-2-linux-20190824103606 systemd: Starting Docker Cleanup...
Sep 15 09:00:04 ecs-t6-large-2-linux-20190824103606 systemd: Started Docker Cleanup.
Sep 15 09:01:01 ecs-t6-large-2-linux-20190824103606 systemd: Started Session 313 of user root.
Sep 15 09:03:59 ecs-t6-large-2-linux-20190824103606 systemd: Started Session 314 of user root.
Sep 15 09:03:59 ecs-t6-large-2-linux-20190824103606 systemd-logind: New session 314 of user root.

日志記錄的一般格式如下

Sep 15 09:03:59 ecs-t6-large-2-linux-20190824103606 systemd-logind: New session 314 of user root.
    時間            主機名                          子系統名            消息字段

日志的分類

內核及系統日志

系統日志由 rsyslog統一管理,日志的格式也基本相同

查看系統上rsyslog的版本

[root@ecs-t6-large-2-linux-20190824103606 ~]# rpm -q rsyslog
rsyslog-8.24.0-34.el7.x86_64

查看rsyslog的位置

[root@ecs-t6-large-2-linux-20190824103606 ~]# whereis rsyslog
rsyslog: /usr/lib64/rsyslog /etc/rsyslog.d /etc/rsyslog.conf
  • 主程序 /etc/rsyslog.d
  • 配置文件 /etc/rsyslog.conf

配置文件中可以配置日志的級別/記錄方式等

/etc/rsyslog.conf的配置規則

查看配置文件 cat /etc/rsyslog.conf 然后截取RULE部分

#### 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
local2.info						/tmp/test.log

記錄日志時,會從上到下讀取配置信息,只要匹配上就記錄信息,每命中一個配置,就記錄一下

日志設備

日志設備.級別 說明
auth -pam(linux中的認證機制) 產生的日志
authpriv -ssh,ftp 等登錄信息的驗證信息
cron 時間任務相關
kern -內核相關
lpr -打印
mail -郵件
mark(syslog) -rsyslog服務內部的信息,時間標識
news -新聞組
user -用戶程序產生的相關信息
uucp -unix to unix copy unix主機之間的相關通信
local 1~7 自定義日志設備文件

用戶可以使用local 1~7 自定義設置的設備,及其輸出方式

# 定制 , info級別以上的local2 日志,全部記錄到  /tmp/test.log
local2.info                                              /tmp/test.log

修改了日志文件需要重啟

systemctl restart rsyslog

如果依然無效, vim /etc/selinux/config,將 selinux = disable ,然后重啟

九種日志級別,自上而下級別由低到高

級別 說明
NONE 什么都不記錄
EMERG (緊急) 導致主機系統不可用的情況
ALERT(警告) 必須馬上采取解決措施
CRIT (嚴重) 比較嚴重的情況
ERR 運行時的錯誤
WARNING (提醒) 可能影響系統功能的事件
NOTICE(注意) 不會影響系統功能,但是值得注意
INFO 一般信息
DEBUG 調試信息

自下而上,信息記錄的越來越少

三種連接符號

符號 說明
. 記錄大於等於后面級別的日志
.= 只記錄等於后面級別的日志
.!= 只記錄不等於后面級別的日志

日志的處理方式

處理方式 說明
本地文件 通常就是文件的絕對路徑
打印機 如: /dev/lp0
用戶名稱 顯示給指定的用戶
遠程主機 @XX.XXX.XX.X
* 顯示給所有在線的用戶

用戶日志

記錄了系統上用戶登錄/登出的相關信息

用戶日志 說明
/var/log/lastlog 最近的用戶登錄事件
/var/log/wtmp 用戶的登錄/注銷/及系統的開關機事件
/var/log/utmp 當前登錄的每個用戶的詳細信息
/var/log/secure 和用戶驗證相關的安全性事件

/var/log 中存放的是系統上各式各樣的日志文件, text類型的可以直接查看, 還有一些
是data類型的文件,這種文件是被系統上的命令使用的文件, 如 w who 命令

[root@ecs-t6-large-2-linux-20190824103606 ~]# file /var/log/utmp
/var/log/utmp: cannot open (No such file or directory)
[root@ecs-t6-large-2-linux-20190824103606 ~]# file /var/log/wtmp
/var/log/wtmp: data
[root@ecs-t6-large-2-linux-20190824103606 ~]# file /var/log/secure
/var/log/secure: ASCII text
[root@ecs-t6-large-2-linux-20190824103606 ~]# file /var/log/lastlog
/var/log/lastlog: data

用戶登錄分析

who、w、users、last、lastlog

手動記錄日志

命令: logger

作用: 從命令行直接向系統日志文件寫入一行信息

echo hahaha | logger -it "logger test" -p user.info

-p: 指定日志設備.日志規則
-it : 描述

查看

[root@ecs-t6-large-2-linux-20190824103606 ~]# tail -1 /var/log/messages
Sep 15 10:19:30 ecs-t6-large-2-linux-20190824103606 journal: logger test[25291]: hahaha

程序日志

由各種應用程序獨立控制的日志,格式不統一

日志轉儲 logrotate

系統上時時刻刻產生日志,為了防止它填滿硬盤,需要對它進行轉儲,說白了,就是刪除舊的日志文件,創建新的日志文件

查看他的配置文件

cat /etc/logrotate.conf

[root@ecs-t6-large-2-linux-20190824103606 ~]# cat /etc/logrotate.conf 
# see "man logrotate" for details
# 每周備份一次  mv
weekly

# 保留4份舊的日志文件
rotate 4

# 每次 輪轉備份 時,都使用新創建的日志文件
create

# 新創建的日志文件,使用日期當后綴
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
# 加載當前這個主要配置文件的同時, 通過下面的這條配置加載了次要配置文件
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here

# 文件的轉儲規則
/var/log/wtmp {
    monthly
    create 0664 root utmp
	minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

查看系統中次要的配置文件

[root@ecs-t6-large-2-linux-20190824103606 ~]# ll /etc/logrotate.d/
total 24
-rw-r--r--  1 root root  91 Apr 11  2018 bootlog
-rw-r--r--  1 root root 137 Sep 12 17:14 log_test
-rw-r--r--. 1 root root 136 Jun 10  2014 ppp
-rw-r--r--  1 root root 224 Oct 30  2018 syslog
-rw-r--r--  1 root root 100 Oct 31  2018 wpa_supplicant
-rw-r--r--  1 root root 103 Nov  5  2018 yum

可以仿照/etc/logrotate.d/ 配置自己的日志文件的轉儲規則

看一下 syslog的規則如下:

[root@ecs-t6-large-2-linux-20190824103606 ~]# cat /etc/logrotate.d/syslog 
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok  # 日志在轉儲期間,出現任何錯誤都ok
    sharedscripts # sharedscripts的作用是在所有的日志文件都輪轉完畢后統一執行一次腳本。如果沒有配置這條指令,那么每個日志文件輪轉完畢后都會執行一次腳本。
    # 下面的執行的shell 腳本
    postrotate
	/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

可以看到了,它里面配置了 /var/log/ cron定時任務,maillog郵件,message消息,secure用戶登錄登出 及打印服務spooler的日志轉儲規則

logrotate的參數

參數 說明
compress 通過gzip 壓縮轉儲以后的日志
nocompress 不需要壓縮時,用這個參數
copytruncate 用於還在打開中的日志文件,把當前日志備份並截斷
nocopytruncate 備份日志文件但是不截斷
create mode owner group 轉儲文件,使用指定的文件模式創建新 的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用時,轉儲的日志文件到 下一次轉儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮
errors address 專儲時的錯誤信息發送到指定的Email 地址
ifempty 即使是空文件也轉儲,這個是 logrotate 的缺省選項。
notifempty 如果是空文件的話,不轉儲
mail address 把轉儲的日志文件發送到指定的E-mail 地址
nomail 轉儲時不發送日志文件
olddir directory 轉儲后的日志文件放入指定的目錄,必須和當前 日志文件在同一個文件系統
noolddir 轉儲后的日志文件和當前日志文件放在同一個目錄下轉儲后的日志文件和當前日志文件放在同一個目錄下
prerotate/endscript 在轉儲以前需要執行的命令可以放入這個對之間,這兩個關鍵字必須單獨成行
daily 指定轉儲周期為每天
weekly 指定轉儲周期為每周
monthly 指定轉儲周期為每月
rotate count 指定日志文件刪除之前轉儲的次數,0 指沒有備 份,5 指保留5 個備份
ootext [+] list 不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig .rpmsave
size 當日志文件到達指定的大小時才轉儲,可以指定bytes(缺省)以及KB(sizek)或者MB (sizem)


免責聲明!

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



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