Linux 学会看日志文件处理问题
rsyslog是一個進程,是一個命令。管理日志的。–》系統日志記錄器
它有一個配置文件:/etc/rsyslog.conf
自己創建日志時,要修改該配置文件。
日志的作用:
- 用于記錄系統、程序運行中發生的各種事件;
- 通過閱讀日志,有助于診斷和解決系統故障
日志文件的分類:
- 內核及系統日志
- 由系統服務rsyslog統一進行管理,日志格式基本相似
- 用戶日志
- 記錄系統用戶登錄及退出系統的相關信息
- 程序日志
- 由各種應用程序獨立管理的日志文件,記錄格式不統一
日志記錄的一般格式:
時間標簽 主機名 子系統名 消息字段
/var/log –》此目錄下有很多的日志文件。
eg:tailf /var/log/cron –》監聽cron命令的日志文件的末尾五行。
相應的應用程序獨立進行管理的日志文件:
- Web服務:/var/log/httpd/
- access_log、error_log
- 代理服務:/var/log/squid/
- access.log、cache.log、squid.out、store.log
- FTP服務:/var/log/xferlog
等等
保存了用戶登錄、退出等信息的日志文件:
- /var/log/lastlog:最近的用戶登錄事件
- /var/log/wtmp:用戶登錄、注銷及系統開、關機事件
- /var/run/utmp:當前登錄的每個用戶的詳細信息
- /var/log/secure:與用戶驗證相關的安全性事件
用戶登錄分析:
- who、w、user、last、ac、lastlog等命令,其中:
- last 最近登錄系統的用戶;
- lastlog 查看所有的用戶的登錄信息
日志分析工具:
- 文本查看、grep過濾檢索、Webmin管理套件中查看
- awk、sed等文本過濾、格式化編輯工具
- Webalizer、Awstats等專用日志分析工具
- 其他市面上的商業日志分析工具等
syslog系統日志
syslog系統日志/etc/syslog.conf
由系統服務syslogd 統一管理:
- 軟件包:sysklogd-1.4.1-29.2
- 主要程序:/sbin/klogd、/sbin/syslogd
- 系統日志的配置文件:/etc/syslog.conf
(設備類別.日志級別 消息發送到的文件)
(像cron級別的日志文件,都寫到/var/log/cron里面去。)
設備類別[連接符]日志級別:
- . 記錄大于等于后面的級別日志
- .=只記錄等于后面的級別日志
- .!=只記錄不等于后面的級別日志
消息發送位置:
- 本地文件:通常就是文件的絕對路徑
- 打印機:例如 /dev/lp0 這個打印機裝置
- 用戶名稱:顯示給用戶
- 遠程主機:例如 @202.100.100.1
- *:所有在線的人
系統日志保存位置:默認為/var/log目錄下
主要日志文件介紹:
- 內核及公共消息日志:/var/log/messages
- 計劃任務日志:/var/log/cron
- 系統引導日志:/var/log/dmesg
- 郵件系統日志:/var/log/maillog
- 錯誤登錄日志:/var/log/faillog
用戶運行過的進程分析工具:
- accton、lastcomm
- sa:報告、清理和維護進程統計文件。
例子:
# accton /var/account/pacct --》啟用統計 # lastcomm --user root --》查看統計 lastcomm root pts/2 0.00 secs Thu Jul 28 21:22 lastcomm root pts/2 0.00 secs Thu Jul 28 21:22 accton S root pts/2 0.00 secs Thu Jul 28 21:22 #accton --》關閉統計- 1
- 2
- 3
- 4
- 5
- 6
PS:
配置文件和程序的關系:
配置文件為程序傳遞參數,告訴程序要做什么,或者哪些做,哪些不做等信息。
日志消息的級別loglevel(記住!)
- 0 EMERG(緊急):會導致主機系統不可用的情況 emergencies(零,最嚴重!!)
- 1 ALERT(警告):必須馬上采取措施解決的問題 alert
- 2 CRIT(嚴重):比較嚴重的情況 critical
- 3 ERR(錯誤):運行出現錯誤 error
- 4 WARNING(提醒):可能會影響系統功能的事件
- 5 NOTICE(注意):不會影響系統但值得注意
- 6 INFO(信息):一般信息 information
- 7 DEBUG(調試):程序或系統調試信息等
- 8 none 沒有優先級,不記錄任何日志消息。
日志的設備類型:SyslogFacility
- mail 郵件日志
- cron 計劃任務日志
- authpriv 用戶認證時產生的日志,如login命令、su命令。
- local0–local7 由自定義程序使用。
- news 網絡新聞傳輸協議(nntp)產生的消息。
- user 用戶進程。
- kern 系統內核消息。 kernel
- daemon 某些守護
/var/log/下面的日志文件
- messages —>默認情況下會記錄所有的日志信息
- secure —》安全認證相關的日志(ssh、useradd、passwd)
- dmesg —》系統在啟動的過程中加載了那些內核模塊的信息,對一些硬件的識別加載的驅動等信息。kernel啟動的過程中的信息
- boot.log —》啟動系統的過程之中出現的問題和正常的情況
- maillog —》與發郵件相關的日志
- lastlog —》記錄最近登錄過系統的用戶的信息 last
- cron —》計劃任務
- httpd —》獨立的目錄,記錄httpd進程產生相關的日志
- nginx —》獨立的目錄,記錄nginx進程產生的相關的日志
- mysqld.log —》mysql的日志
- yum.log —》yum的日志
- xferlog —-》ftp的日志
- wtmp —》lastlog 查看所有的用戶的登錄信息
主動記錄日志工具:logger:從命令行直接向系統日志文件寫入一行信息
# ping -c2 172.16.70.7|logger -i(ping命令的pid號)-t (信息)"This is a test" -p authpriv.info(設備類型) # tail -5 /var/log/secure Jul 28 21:26:20 localhost This is a test[5623]: 64 bytes from 172.16.70.7: icmp_seq=2 ttl=64 time=0.178 ms Jul 28 21:26:20 localhost This is a test[5623]: Jul 28 21:26:20 localhost This is a test[5623]: --- 172.16.70.7 ping statistics --- Jul 28 21:26:20 localhost This is a test[5623]: 2 packets transmitted, 2 received, 0% packet loss, time 1000ms Jul 28 21:26:20 localhost This is a test[5623]: rtt min/avg/max/mdev = 0.166/0.172/0.178/0.006 ms- 1
- 2
- 3
- 4
- 5
- 6
- 7
自己寫腳本實現記錄日志的功能
①修改 /etc/rsyslog.conf 文件
在#Save boot messages also to boot.log下面添加東西。
②刷新服務#service rsyslog restart
(刷新rsyslog服務后,就會發現在/var/log/下面出現了shell_monitor.log文件!)
(但是里面沒有東西!)
③腳本的內容
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
④#bash monitor.sh #執行腳本
#cat shell_monitor.log #查看自己定義的日志文件- 1
(發現里面有內容了!)(輸出的時候,先顯示-t的,再顯示前面echo的內容)
日志輪轉功能 logrotate
方便有效的管理日志,防止日志文件過大
日志輪轉命令:logrotate
日志輪轉主要配置文件:/etc/logrotate.conf
- 配合一個配置文件,再加上計劃任務,每天執行一次來達到循環的效果;
- 好處:總保留最近最新的日志。
日志輪轉主要配置文件:/etc/logrotate.conf (主配置文件)
# cat /etc/logrotate.conf |grep -v ^#|grep -v ^$ (刪除注釋行和空行) --》查看日志輪轉配置文件的內容 weekly --》每周一次 rotate 4 --》保留4個備份的日志文件 create --》創建新的空的日志文件 dateext --》以日期做后綴 include /etc/logrotate.d --》次要配置文件都存放在次目錄下 /var/log/wtmp { --》(單獨針對wtmp的)monthlycreate 0664 root utmp --》創建文件的時候,指定權限和屬組、屬主minsize 1M --》大于1M才輪轉日志rotate 1 --》保留1個備份日志 } /var/log/btmp { --》針對btmp的missingok --》如果某文件沒丟失,做什么monthlycreate 0600 root utmprotate 1 }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
PS:
沒有單獨的日志文件,在輪轉的時候,參考/etc/logrotate.conf里面的配置。
同時如果有單獨的日志文件,但是里面有些配置沒有,也會參考主配置文件里的內容。—》單獨配置文件里沒有的配置項,參考主配置文件公共的配置項,建議寫到主配置文件里,各個日志文件根據自身的特點,可以單獨寫一些配置。
日志輪轉是怎么實現的?
日志輪轉,依賴cron計劃任務的每天執行的任務來完成輪轉的。
系統把日志輪轉的腳本logrotate放在/etc/cron.daily目錄下:
mysqld日志輪轉文件
#vim /etc/logrotate.d/mysqld- 1
vim /etc/rsyslog.conf
①local6.* /var/log/mysqld.log
- 指定目錄的日志設備類型是local6
- 消息級別是,記錄到/var/log/mysqld.log
- 主要是告訴rsyslog進程去記錄,至于mysqld進程是否采用rsyslog進程去記錄日志,取決于mysqld進程。
- mysqld進程也許沒有采用rsyslog進程去幫助記錄日志,它自己有獨立的進程去實現日志的記錄功能。
②#service rsyslog restart –》刷新服務,讓配置文件生效。
#vim httpd /var/log/httpd/*log { --》指定輪轉的日志文件,具體如何輪轉,看大括號里的內容!missingok --》日志文件不存在的時候,繼續進行,不報錯。notifempty --》若日志文件為空,不輪轉(not if empty)sharedscripts --》配合prerotate和postrotate使用delaycompress --》推遲壓縮postrotate --》輪轉后執行下面的命令/sbin/service httpd reload > /dev/null 2>/dev/null || trueendscript }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
多個日志文件使用一套輪轉方法:
內核及公共消息日志:/var/log/messages
計劃任務日志:/var/log/cron
郵件系統日志:/var/log/maillog
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP cat /var/run/syslogd.pid 2>/dev/null 2>/dev/null || true
endscript
}
#
#########怎么讓日志輪轉(全)
①(添加設備類型、消息級別和消息發送目錄到)/etc/rsyslog.conf
local6.info /var/log/liupeng
②刷新服務#service rsyslog restart
③日志腳本的內容:(腳本放在哪里都行)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
(執行腳本后,會看到在/var/log/liupeng.log文件里面生成了內容。)
④進入/etc/logrorate目錄,添加輪轉日志配置文件liupeng:
#cd /etc/logrotate.d #vim liupeng /var/log/liupeng.log { --》指定輪轉的日志文件,具體如何輪轉,看大括號里的內容! rotate 4 --》保留4個weekly --》每周輪轉一次create --》創建新的空的日志文件dateext --》以日期做后綴missingok --》日志文件不存在的時候,繼續進行,不報錯。notifempty --》若日志文件為空,不輪轉(not if empty)sharedscripts prerorate輪轉之前執行的命令endscript }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
⑤#logrotate -vf /etc/logrotate.conf (-f 強制輪轉)
–》輪轉自己寫的日志。
PS:
- man 5 logrotate.conf –》man 5 配置文件:看這個配置文件里的所有功能
- prerorate:輪轉前需要做的事情;
- postrorate:輪轉后需要做的事情。
練習:自己編寫腳本實現記錄日志功能:
1.監控httpd、yum、mysql服務,如果服務正在運行寫入到日志文件,如果服務沒有運行也寫入到日志文件,然后啟動服務
2.日志文件的名字自己定義.例如:/var/log/liupeng_monitor.log
3.讓日志文件每個星期輪轉一次,保留4個文件,在輪轉之前將要刪除的日志文件復制到/backup目錄下。
fi
}
###########本地yum是否存在
local_yum_monitor(){
yum clean all &>/dev/null
if yum list &>/dev/null
then
echo “YUM_STATUS_CLEAR” | logger -it “YUM_STATUS” -p local6.info
else
echo “YUM_STATUS_ERROR” | logger -it “YUM_STATUS_WRONG” -p local6.alert
bash yum_install.sh
fi
}
###############日志輪轉
my_lograte(){ --》日志輪轉
[ -d /backup ]||mkdir /backup
if ! [ -f /etc/logrotat.d/monitor ]
then
echo
“/var/log/liupeng_monitor.log {
rotate 4
weekly
dateext
create
prerotate
/bin/cp -n /var/log/liupeng_monitor.log-* /backup/
–》-n選項:若存在,則不再覆蓋!
endscript
}” >/etc/logrotate.d/monitor
fi
}
if [ -f ./monitor.conf ]
then
conf=(cat ./monitor.conf |egrep -v <span class="hljs-string">"#|^$|^yum"</span>)
for i in conf[@]</span><spanclass="hljs?keyword">do</span>monitor<spanclass="hljs?variable">{conf[@]}</span> <span class="hljs-keyword">do</span> monitor <span class="hljs-variable">conf[@]</span><spanclass="hljs?keyword">do</span>monitor<spanclass="hljs?variable">i &
done
if cat ./monitor.conf|egrep “^yum_check=1$” &>/dev/null
then
local_yum_monitor
fi
else
echo -e “#[SERVICE_NAME]\nhttpd\nmysqld\n#[YUM]\nyum_check=1” > monitor.conf
fi
my_lograte
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
總結
以上是生活随笔為你收集整理的Linux 学会看日志文件处理问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【译】A look at MobileI
- 下一篇: 【译】BINDER TRANSACTIO