Linux 学会看日志文件处理问题
rsyslog是一個進(jìn)程,是一個命令。管理日志的。–》系統(tǒng)日志記錄器
它有一個配置文件:/etc/rsyslog.conf
自己創(chuàng)建日志時,要修改該配置文件。
日志的作用:
- 用于記錄系統(tǒng)、程序運行中發(fā)生的各種事件;
- 通過閱讀日志,有助于診斷和解決系統(tǒng)故障
日志文件的分類:
- 內(nèi)核及系統(tǒng)日志
- 由系統(tǒng)服務(wù)rsyslog統(tǒng)一進(jìn)行管理,日志格式基本相似
- 用戶日志
- 記錄系統(tǒng)用戶登錄及退出系統(tǒng)的相關(guān)信息
- 程序日志
- 由各種應(yīng)用程序獨立管理的日志文件,記錄格式不統(tǒng)一
日志記錄的一般格式:
時間標(biāo)簽 主機名 子系統(tǒng)名 消息字段
/var/log –》此目錄下有很多的日志文件。
eg:tailf /var/log/cron –》監(jiān)聽cron命令的日志文件的末尾五行。
相應(yīng)的應(yīng)用程序獨立進(jìn)行管理的日志文件:
- Web服務(wù):/var/log/httpd/
- access_log、error_log
- 代理服務(wù):/var/log/squid/
- access.log、cache.log、squid.out、store.log
- FTP服務(wù):/var/log/xferlog
等等
保存了用戶登錄、退出等信息的日志文件:
- /var/log/lastlog:最近的用戶登錄事件
- /var/log/wtmp:用戶登錄、注銷及系統(tǒng)開、關(guān)機事件
- /var/run/utmp:當(dāng)前登錄的每個用戶的詳細(xì)信息
- /var/log/secure:與用戶驗證相關(guān)的安全性事件
用戶登錄分析:
- who、w、user、last、ac、lastlog等命令,其中:
- last 最近登錄系統(tǒng)的用戶;
- lastlog 查看所有的用戶的登錄信息
日志分析工具:
- 文本查看、grep過濾檢索、Webmin管理套件中查看
- awk、sed等文本過濾、格式化編輯工具
- Webalizer、Awstats等專用日志分析工具
- 其他市面上的商業(yè)日志分析工具等
syslog系統(tǒng)日志
syslog系統(tǒng)日志/etc/syslog.conf
由系統(tǒng)服務(wù)syslogd 統(tǒng)一管理:
- 軟件包:sysklogd-1.4.1-29.2
- 主要程序:/sbin/klogd、/sbin/syslogd
- 系統(tǒng)日志的配置文件:/etc/syslog.conf
(設(shè)備類別.日志級別 消息發(fā)送到的文件)
(像cron級別的日志文件,都寫到/var/log/cron里面去。)
設(shè)備類別[連接符]日志級別:
- . 記錄大于等于后面的級別日志
- .=只記錄等于后面的級別日志
- .!=只記錄不等于后面的級別日志
消息發(fā)送位置:
- 本地文件:通常就是文件的絕對路徑
- 打印機:例如 /dev/lp0 這個打印機裝置
- 用戶名稱:顯示給用戶
- 遠(yuǎn)程主機:例如 @202.100.100.1
- *:所有在線的人
系統(tǒng)日志保存位置:默認(rèn)為/var/log目錄下
主要日志文件介紹:
- 內(nèi)核及公共消息日志:/var/log/messages
- 計劃任務(wù)日志:/var/log/cron
- 系統(tǒng)引導(dǎo)日志:/var/log/dmesg
- 郵件系統(tǒng)日志:/var/log/maillog
- 錯誤登錄日志:/var/log/faillog
用戶運行過的進(jìn)程分析工具:
- accton、lastcomm
- sa:報告、清理和維護(hù)進(jìn)程統(tǒng)計文件。
例子:
# accton /var/account/pacct --》啟用統(tǒng)計 # lastcomm --user root --》查看統(tǒng)計 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 --》關(guān)閉統(tǒng)計- 1
- 2
- 3
- 4
- 5
- 6
PS:
配置文件和程序的關(guān)系:
配置文件為程序傳遞參數(shù),告訴程序要做什么,或者哪些做,哪些不做等信息。
日志消息的級別loglevel(記住!)
- 0 EMERG(緊急):會導(dǎo)致主機系統(tǒng)不可用的情況 emergencies(零,最嚴(yán)重!!)
- 1 ALERT(警告):必須馬上采取措施解決的問題 alert
- 2 CRIT(嚴(yán)重):比較嚴(yán)重的情況 critical
- 3 ERR(錯誤):運行出現(xiàn)錯誤 error
- 4 WARNING(提醒):可能會影響系統(tǒng)功能的事件
- 5 NOTICE(注意):不會影響系統(tǒng)但值得注意
- 6 INFO(信息):一般信息 information
- 7 DEBUG(調(diào)試):程序或系統(tǒng)調(diào)試信息等
- 8 none 沒有優(yōu)先級,不記錄任何日志消息。
日志的設(shè)備類型:SyslogFacility
- mail 郵件日志
- cron 計劃任務(wù)日志
- authpriv 用戶認(rèn)證時產(chǎn)生的日志,如login命令、su命令。
- local0–local7 由自定義程序使用。
- news 網(wǎng)絡(luò)新聞傳輸協(xié)議(nntp)產(chǎn)生的消息。
- user 用戶進(jìn)程。
- kern 系統(tǒng)內(nèi)核消息。 kernel
- daemon 某些守護(hù)
/var/log/下面的日志文件
- messages —>默認(rèn)情況下會記錄所有的日志信息
- secure —》安全認(rèn)證相關(guān)的日志(ssh、useradd、passwd)
- dmesg —》系統(tǒng)在啟動的過程中加載了那些內(nèi)核模塊的信息,對一些硬件的識別加載的驅(qū)動等信息。kernel啟動的過程中的信息
- boot.log —》啟動系統(tǒng)的過程之中出現(xiàn)的問題和正常的情況
- maillog —》與發(fā)郵件相關(guān)的日志
- lastlog —》記錄最近登錄過系統(tǒng)的用戶的信息 last
- cron —》計劃任務(wù)
- httpd —》獨立的目錄,記錄httpd進(jìn)程產(chǎn)生相關(guān)的日志
- nginx —》獨立的目錄,記錄nginx進(jìn)程產(chǎn)生的相關(guān)的日志
- mysqld.log —》mysql的日志
- yum.log —》yum的日志
- xferlog —-》ftp的日志
- wtmp —》lastlog 查看所有的用戶的登錄信息
主動記錄日志工具:logger:從命令行直接向系統(tǒng)日志文件寫入一行信息
# ping -c2 172.16.70.7|logger -i(ping命令的pid號)-t (信息)"This is a test" -p authpriv.info(設(shè)備類型) # 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
自己寫腳本實現(xiàn)記錄日志的功能
①修改 /etc/rsyslog.conf 文件
在#Save boot messages also to boot.log下面添加?xùn)|西。
②刷新服務(wù)#service rsyslog restart
(刷新rsyslog服務(wù)后,就會發(fā)現(xiàn)在/var/log/下面出現(xiàn)了shell_monitor.log文件!)
(但是里面沒有東西!)
③腳本的內(nèi)容
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
④#bash monitor.sh #執(zhí)行腳本
#cat shell_monitor.log #查看自己定義的日志文件- 1
(發(fā)現(xiàn)里面有內(nèi)容了!)(輸出的時候,先顯示-t的,再顯示前面echo的內(nèi)容)
日志輪轉(zhuǎn)功能 logrotate
方便有效的管理日志,防止日志文件過大
日志輪轉(zhuǎn)命令:logrotate
日志輪轉(zhuǎn)主要配置文件:/etc/logrotate.conf
- 配合一個配置文件,再加上計劃任務(wù),每天執(zhí)行一次來達(dá)到循環(huán)的效果;
- 好處:總保留最近最新的日志。
日志輪轉(zhuǎn)主要配置文件:/etc/logrotate.conf (主配置文件)
# cat /etc/logrotate.conf |grep -v ^#|grep -v ^$ (刪除注釋行和空行) --》查看日志輪轉(zhuǎn)配置文件的內(nèi)容 weekly --》每周一次 rotate 4 --》保留4個備份的日志文件 create --》創(chuàng)建新的空的日志文件 dateext --》以日期做后綴 include /etc/logrotate.d --》次要配置文件都存放在次目錄下 /var/log/wtmp { --》(單獨針對wtmp的)monthlycreate 0664 root utmp --》創(chuàng)建文件的時候,指定權(quán)限和屬組、屬主minsize 1M --》大于1M才輪轉(zhuǎn)日志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:
沒有單獨的日志文件,在輪轉(zhuǎn)的時候,參考/etc/logrotate.conf里面的配置。
同時如果有單獨的日志文件,但是里面有些配置沒有,也會參考主配置文件里的內(nèi)容。—》單獨配置文件里沒有的配置項,參考主配置文件公共的配置項,建議寫到主配置文件里,各個日志文件根據(jù)自身的特點,可以單獨寫一些配置。
日志輪轉(zhuǎn)是怎么實現(xiàn)的?
日志輪轉(zhuǎn),依賴cron計劃任務(wù)的每天執(zhí)行的任務(wù)來完成輪轉(zhuǎn)的。
系統(tǒng)把日志輪轉(zhuǎn)的腳本logrotate放在/etc/cron.daily目錄下:
mysqld日志輪轉(zhuǎn)文件
#vim /etc/logrotate.d/mysqld- 1
vim /etc/rsyslog.conf
①local6.* /var/log/mysqld.log
- 指定目錄的日志設(shè)備類型是local6
- 消息級別是,記錄到/var/log/mysqld.log
- 主要是告訴rsyslog進(jìn)程去記錄,至于mysqld進(jìn)程是否采用rsyslog進(jìn)程去記錄日志,取決于mysqld進(jìn)程。
- mysqld進(jìn)程也許沒有采用rsyslog進(jìn)程去幫助記錄日志,它自己有獨立的進(jìn)程去實現(xiàn)日志的記錄功能。
②#service rsyslog restart –》刷新服務(wù),讓配置文件生效。
#vim httpd /var/log/httpd/*log { --》指定輪轉(zhuǎn)的日志文件,具體如何輪轉(zhuǎn),看大括號里的內(nèi)容!missingok --》日志文件不存在的時候,繼續(xù)進(jìn)行,不報錯。notifempty --》若日志文件為空,不輪轉(zhuǎn)(not if empty)sharedscripts --》配合prerotate和postrotate使用delaycompress --》推遲壓縮postrotate --》輪轉(zhuǎn)后執(zhí)行下面的命令/sbin/service httpd reload > /dev/null 2>/dev/null || trueendscript }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
多個日志文件使用一套輪轉(zhuǎn)方法:
內(nèi)核及公共消息日志:/var/log/messages
計劃任務(wù)日志:/var/log/cron
郵件系統(tǒng)日志:/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
}
#
#########怎么讓日志輪轉(zhuǎn)(全)
①(添加設(shè)備類型、消息級別和消息發(fā)送目錄到)/etc/rsyslog.conf
local6.info /var/log/liupeng
②刷新服務(wù)#service rsyslog restart
③日志腳本的內(nèi)容:(腳本放在哪里都行)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
(執(zhí)行腳本后,會看到在/var/log/liupeng.log文件里面生成了內(nèi)容。)
④進(jìn)入/etc/logrorate目錄,添加輪轉(zhuǎn)日志配置文件liupeng:
#cd /etc/logrotate.d #vim liupeng /var/log/liupeng.log { --》指定輪轉(zhuǎn)的日志文件,具體如何輪轉(zhuǎn),看大括號里的內(nèi)容! rotate 4 --》保留4個weekly --》每周輪轉(zhuǎn)一次create --》創(chuàng)建新的空的日志文件dateext --》以日期做后綴missingok --》日志文件不存在的時候,繼續(xù)進(jìn)行,不報錯。notifempty --》若日志文件為空,不輪轉(zhuǎn)(not if empty)sharedscripts prerorate輪轉(zhuǎn)之前執(zhí)行的命令endscript }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
⑤#logrotate -vf /etc/logrotate.conf (-f 強制輪轉(zhuǎn))
–》輪轉(zhuǎn)自己寫的日志。
PS:
- man 5 logrotate.conf –》man 5 配置文件:看這個配置文件里的所有功能
- prerorate:輪轉(zhuǎn)前需要做的事情;
- postrorate:輪轉(zhuǎn)后需要做的事情。
練習(xí):自己編寫腳本實現(xiàn)記錄日志功能:
1.監(jiān)控httpd、yum、mysql服務(wù),如果服務(wù)正在運行寫入到日志文件,如果服務(wù)沒有運行也寫入到日志文件,然后啟動服務(wù)
2.日志文件的名字自己定義.例如:/var/log/liupeng_monitor.log
3.讓日志文件每個星期輪轉(zhuǎn)一次,保留4個文件,在輪轉(zhuǎn)之前將要刪除的日志文件復(fù)制到/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
}
###############日志輪轉(zhuǎn)
my_lograte(){ --》日志輪轉(zhuǎn)
[ -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
總結(jié)
以上是生活随笔為你收集整理的Linux 学会看日志文件处理问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【译】A look at MobileI
- 下一篇: 基本查询(Query查询中文)