在 Linux 上用 Bash 指令碼監控 messages 紀錄檔

2019-07-31 21:14:00

目前市場上有許多開源監控工具可用於監控 Linux 系統的效能。當系統達到指定的閾值限制時,它將傳送電子郵件警報。它可以監視 CPU 利用率、記憶體利用率、交換利用率、磁碟空間利用率等所有內容。

如果你只有很少的系統並且想要監視它們,那麼編寫一個小的 shell 指令碼可以使你的任務變得非常簡單。

在本教學中,我們新增了一個 shell 指令碼來監視 Linux 系統上的 messages 紀錄檔。

我們過去新增了許多有用的 shell 指令碼。如果要檢視這些內容,請導航至以下連結。

此指令碼將檢查 /var/log/messages 檔案中的 “warning“、“error” 和 “critical”,如果發現任何有關的東西,就給指定電子郵件地址發郵件。

如果伺服器有許多匹配的字串,我們就不能經常執行這個可能填滿收件箱的指令碼,我們可以在一天內執行一次。

為了解決這個問題,我讓指令碼以不同的方式觸發電子郵件。

如果 /var/log/messages 檔案中昨天的紀錄檔中找到任何給定字串,則指令碼將向給定的電子郵件地址傳送電子郵件警報。

注意:你需要更改電子郵件地址,而不是我們的電子郵件地址。

# vi /opt/scripts/os-log-alert.sh
#!/bin/bash#Set the variable which equal to zeroprev_count=0count=$(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="[email protected]"    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 $MESSAGEfi

os-log-alert.sh 檔案設定可執行許可權。

$ chmod +x /opt/scripts/os-log-alert.sh

最後新增一個 cron 任務來自動執行此操作。它將每天 7 點鐘執行。

# crontab -e
0 7 * * * /bin/bash /opt/scripts/os-log-alert.sh

注意:你將在每天 7 點收到昨天紀錄檔的電子郵件提醒。

輸出:你將收到類似下面的電子郵件提醒。

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: ([email protected]) [WARNING] Authentication failed for user [daygeek]Jul  3 16:25:36 ns1 pure-ftpd: ([email protected]) [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]