我为nagios写了一个bash脚本,根据某个时间戳格式查看日志文件并搜索字符串。该脚本应该返回在最后“n”分钟内找到的错误数。为此,我使用grep with --date =“ - 10 min”。现在,这将查看10分钟前的错误日志,并根据提供的逻辑返回错误。因为我想检查从10分钟前开始的一切我正在使用for循环,唯一的问题是我无法重置变量,我找不到任何解决方案。已经谷歌搜索并尝试了var =,var =“”,unset var等。任何建议都将受到高度赞赏,请参阅下面的脚本。
#!/bin/bash
LOG_FILE=$1
ERROR_MESSAGE=$2
TIME_SPAN=$3
WARNING_THRESHOLD=$4
CRITICAL_THRESHOLD=$5
for (( i = $TIME_SPAN; i >= 0; --i )); do
TIME_SPAN=$i
echo "$TIME_SPAN"
GET_ERRORS=`grep "$(date +'%d %b %Y %H:%M' --date="-$TIME_SPAN min")" $LOG_FILE | grep -oi "\($ERROR_MESSAGE\)" -wc`
let COUNT=COUNT+GET_ERRORS
GET_ERRORS=""
done
if [ "$COUNT" -lt "$WARNING_THRESHOLD" ]; then
echo "OK - $COUNT errors found in: $LOG_FILE"
exit 0
elif [[ ( "$COUNT" -ge "$WARNING_THRESHOLD" ) && ( "$COUNT" -lt "$CRITICAL_THRESHOLD" ) ]]; then
echo "WARNING - $COUNT errors found in: $LOG_FILE"
exit 1
elif [ "$COUNT" -ge "$CRITICAL_THRESHOLD" ]; then
echo "CRITICAL - $COUNT errors found in: $LOG_FILE"
exit 2
fi
更新
我找到了这个bug。只减少了$ i,而我也应该减少$ time_span。我冒昧地更改了主题的标题并添加了完整的功能代码,因为其他人可能会使用此脚本来监视最近'n'分钟内的日志。我在nagios交换中找不到类似的东西。
非常感谢您的反馈! 亲切的问候, 伊万