在Linux上用Bash腳本監(jiān)控messages日志
目前市場(chǎng)上有許多開(kāi)源監(jiān)控工具可用于監(jiān)控 Linux 系統(tǒng)的性能。當(dāng)系統(tǒng)達(dá)到指定的閾值限制時(shí),它將發(fā)送電子郵件警報(bào)。它可以監(jiān)視 CPU 利用率、內(nèi)存利用率、交換利用率、磁盤(pán)空間利用率等所有內(nèi)容。
如果你只有很少的系統(tǒng)并且想要監(jiān)視它們,那么編寫(xiě)一個(gè)小的 shell 腳本可以使你的任務(wù)變得非常簡(jiǎn)單。
在本教程中,我們添加了一個(gè) shell 腳本來(lái)監(jiān)視 Linux 系統(tǒng)上的 messages 日志。
我們過(guò)去添加了許多有用的 shell 腳本。如果要查看這些內(nèi)容,請(qǐng)導(dǎo)航至以下鏈接。
此腳本將檢查 /var/log/messages
文件中的 “warning“、“error” 和 “critical”,如果發(fā)現(xiàn)任何有關(guān)的東西,就給指定電子郵件地址發(fā)郵件。
如果服務(wù)器有許多匹配的字符串,我們就不能經(jīng)常運(yùn)行這個(gè)可能填滿(mǎn)收件箱的腳本,我們可以在一天內(nèi)運(yùn)行一次。
為了解決這個(gè)問(wèn)題,我讓腳本以不同的方式觸發(fā)電子郵件。
如果 /var/log/messages
文件中昨天的日志中找到任何給定字符串,則腳本將向給定的電子郵件地址發(fā)送電子郵件警報(bào)。
注意:你需要更改電子郵件地址,而不是我們的電子郵件地址。
# vi /opt/scripts/os-log-alert.sh
#!/bin/bash
#Set the variable which equal to zero
prev_count=0
count=$(grep -i "`date --date='yesterday' '+%b %e'`" /var/log/messages | egrep -wi 'warning|error|critical' | wc -l)
if [ "$prev_count" -lt "$count" ] ; then
# Send a mail to given email id when errors found in log
SUBJECT="WARNING: Errors found in log on "`date --date='yesterday' '+%b %e'`""
# This is a temp file, which is created to store the email message.
MESSAGE="/tmp/logs.txt"
TO="2daygeek@gmail.com"
echo "ATTENTION: Errors are found in /var/log/messages. Please Check with Linux admin." >> $MESSAGE
echo "Hostname: `hostname`" >> $MESSAGE
echo -e "\n" >> $MESSAGE
echo "+------------------------------------------------------------------------------------+" >> $MESSAGE
echo "Error messages in the log file as below" >> $MESSAGE
echo "+------------------------------------------------------------------------------------+" >> $MESSAGE
grep -i "`date --date='yesterday' '+%b %e'`" /var/log/messages | awk '{ $3=""; print}' | egrep -wi 'warning|error|critical' >> $MESSAGE
mail -s "$SUBJECT" "$TO" < $MESSAGE
#rm $MESSAGE
fi
為 os-log-alert.sh
文件設(shè)置可執(zhí)行權(quán)限。
$ chmod +x /opt/scripts/os-log-alert.sh
最后添加一個(gè) cron 任務(wù)來(lái)自動(dòng)執(zhí)行此操作。它將每天 7 點(diǎn)鐘運(yùn)行。
# crontab -e
0 7 * * * /bin/bash /opt/scripts/os-log-alert.sh
注意:你將在每天 7 點(diǎn)收到昨天日志的電子郵件提醒。
輸出:你將收到類(lèi)似下面的電子郵件提醒。
ATTENTION: Errors are found in /var/log/messages. Please Check with Linux admin.
+-----------------------------------------------------+
Error messages in the log file as below
+-----------------------------------------------------+
Jul 3 02:40:11 ns1 kernel: php-fpm[3175]: segfault at 299 ip 000055dfe7cc7e25 sp 00007ffd799d7d38 error 4 in php-fpm[55dfe7a89000+3a7000]
Jul 3 02:50:14 ns1 kernel: lmtp[8249]: segfault at 20 ip 00007f9cc05295e4 sp 00007ffc57bca1a0 error 4 in libdovecot-storage.so.0.0.0[7f9cc04df000+148000]
Jul 3 15:36:09 ns1 kernel: php-fpm[17846]: segfault at 299 ip 000055dfe7cc7e25 sp 00007ffd799d7d38 error 4 in php-fpm[55dfe7a89000+3a7000]
Jul 3 15:45:54 ns1 pure-ftpd: (?@5.188.62.5) [WARNING] Authentication failed for user [daygeek]
Jul 3 16:25:36 ns1 pure-ftpd: (?@104.140.148.58) [WARNING] Sorry, cleartext sessions and weak ciphers are not accepted on this server.#012Please reconnect using TLS security mechanisms.
Jul 3 16:44:20 ns1 kernel: php-fpm[8979]: segfault at 299 ip 000055dfe7cc7e25 sp 00007ffd799d7d38 error 4 in php-fpm[55dfe7a89000+3a7000]