【问题标题】:Shellscript to monitor a log file if keyword triggers then run the snmptrap command用于监视日志文件的 Shell 脚本,如果关键字触发则运行 snmptrap 命令
【发布时间】:2018-11-02 19:15:50
【问题描述】:

有没有办法使用shell script 来监控日志文件,例如 tail -f /var/log/errorlog.txt 那么如果出现down 之类的关键字,则生成SNMPTRAPsnmp manager 并继续监控

我有一个SNMP 脚本可用于生成SNMPTrap,它看起来像

snmptrap -v v2c -c community host "Error message"

假设脚本名称为snmp.sh

我的问题是如何执行以下操作

  1. 跟踪日志
  2. 如果关键字[down] 匹配,则使用 snmp.sh 脚本发送警报
  3. 请假

根据建议我尝试了这个

tail -F  /data/log/test.log |

egrep -io 'got signal 15 | now exiting' | 

while read -r line ;
do

    case "$line" in
       "got signal 15")
        echo "hi"
            ;;
        "now exiting")
        echo "hi2"
             ;;
        *)


    esac
done

但问题是 tail 不适用于 case 语句,每当新的日志详细信息添加时,它不会进入 case 语句并回显输出

如果我使用 cat/less/more 可以得到输出

谁能告诉我在这里犯了什么错误?

提前致谢

【问题讨论】:

    标签: linux bash shell rhel snmp-trap


    【解决方案1】:

    听起来你想要的模式是这样的:

    tail -f /var/log/errorlog.txt | grep -e down -e unmounted | while read -r line
    do
        case "$line" in
            down)
                ./snmp.sh …
                ;;
            unmounted)
                ./snmp.sh …
                ;;
            *)
                echo "Unhandled keyword ${line}" >&2
                exit 1
        esac
    done
    

    【讨论】:

    • 这个脚本是否会持续监控,一旦它识别出它应该生成陷阱并从它离开的地方重新开始监控的关键字?另外,我的另一个问题是我想添加更多关键字,例如错误、卸载、失败.. 脚本应该一次查找所有关键字并在找到任何关键字时启动 snmptrap
    • 没有陷阱。它只是为每一行执行命令。如果您想处理多个关键字,只需使用grep -e error -e unmounted …
    • 是的,我明白了,但是当我使用 tail 运行时,脚本会连续运行。我的问题是让我们说第一个脚本监控第 18 行并找到“down”关键字并发出警报,一旦它生成警报,它应该回到第 19 行并再次开始监控,如何配置?另一个澄清是我们可以使用 CASE 功能来监控所有关键字并生成警报吗?
    • 这个解决方案正是这样做的。它永远运行,分别同步处理每个匹配项。
    • 我找不到这个
    【解决方案2】:

    试试

    tail -f /var/log/errorlog.txt | grep "down" | while read line; do snmp.sh; done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多