使用shell脚本进行日志监控并发送邮件

时间:2017-06-14 04:15:28

标签: bash shell scripting sh weblogic12c

帮助编写脚本。以下是日志格式。 我想编写一个在LIVE日志中搜索关键字的脚本。假设有些人已停止服务器,它将显示shutdown或force_shutdown 它还在日志中显示“服务器关闭已由$ user启动”。

<Apr 19, 2017 1:11:00 PM EDT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING> 
<Apr 19, 2017 1:11:06 PM EDT> <Notice> <Log Management> <BEA-170027> <The Server has established connection with the Domain level Diagnostic Service successfully.> 
<Apr 19, 2017 1:11:06 PM EDT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to shutdown> 
<Apr 19, 2017 1:11:06 PM EDT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to force_shutdown> 

<Jan 9, 2008 6:50:30 PM EST> <Notice> <WebLogicServer> <BEA-000388> <JVM
called WLS shutdown hook. The server will force shutdown now> 
<Jan 9, 2008 6:50:30 PM EST> <Alert> <WebLogicServer> <BEA-000396> <Server shutdown has been requested by <WLS Kernel>> 
<Jan 9, 2008 6:50:30 PM EST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to FORCE_SHUTTING_DOWN>

想要显示所有信息服务器IP和服务器主机,并在显示时显示确切的时间戳,以及向哪个用户发送邮件,并向用户发送包含所有详细信息的用户。 请帮帮我

1 个答案:

答案 0 :(得分:0)

您可以使用以下脚本实时读取文件:(备注:脚本不读取整个文件,只读取新的未来行)

#!/bin/bash

LOG_FILE="/var/log/foo"

tail -n 0 -f "$LOG_FILE" | while IFS= read -r line; do
     echo $line
done

您可以使用grep

轻松搜索所需的字符串
#!/bin/bash

LOG_FILE="/var/log/foo"
SEARCHED="Server shutdown"

tail -n 0 -f "$LOG_FILE" | while IFS= read -r line; do
    if [ $(echo "${line}" | grep "${SEARCHED}") ] ; then
         echo "String find in : $line"
    fi
done

最后一部分,您可以使用awk解析该行以提取您想要的内容并发送它。在Google上搜索,您可以找到很多示例:)