想写一个shell脚本日志关键字监控,要跳过老数据
时间: 2023-08-02 11:24:33 浏览: 114
应用服务监控脚本用shell写的
好的,下面是一个基于Shell脚本实现日志关键字监控并跳过老数据的示例:
```bash
#!/bin/bash
# 定义日志文件路径
LOG_FILE=/var/log/syslog
# 定义关键字
KEYWORD="error"
# 定义检测的时间间隔,单位为秒
INTERVAL=60
# 定义上次检测的位置
LAST_POS=0
# 如果上次检测记录位置的文件存在,则读取上次的位置
if [ -f last_pos.txt ]; then
LAST_POS=$(cat last_pos.txt)
fi
while true; do
# 获取日志文件的大小
FILE_SIZE=$(wc -c < $LOG_FILE)
# 如果文件大小小于上次检测的位置,则说明文件被回滚了,将上次位置设为0
if [ $FILE_SIZE -lt $LAST_POS ]; then
LAST_POS=0
fi
# 计算本次检测需要读取的字节数
SIZE_TO_READ=$((FILE_SIZE - LAST_POS))
# 如果需要读取的字节数小于等于0,则等待一段时间后重新检测
if [ $SIZE_TO_READ -le 0 ]; then
sleep $INTERVAL
continue
fi
# 读取日志文件中新增的内容
NEW_CONTENT=$(tail -c $SIZE_TO_READ $LOG_FILE)
# 记录本次读取到的位置
LAST_POS=$FILE_SIZE
echo $LAST_POS > last_pos.txt
# 检查新增内容中是否包含关键字
if echo "$NEW_CONTENT" | grep -q "$KEYWORD"; then
# 如果包含关键字,则触发告警
echo "发现关键字 $KEYWORD,时间:$(date)" >> alarm.log
# TODO: 发送告警邮件或短信等
fi
# 等待一段时间后重新检测
sleep $INTERVAL
done
```
该脚本首先定义了日志文件路径、关键字、检测的时间间隔和上次检测的位置等变量。然后进入一个无限循环,在每次循环中读取日志文件新增的内容,检查是否包含关键字,如果包含则触发告警并记录到日志文件中。同时,记录本次读取到的位置,以便下次循环时跳过已经检测过的内容。如果在本次循环中没有发现新增的内容,则等待一段时间后重新检测。
该脚本可以根据实际需求进行修改,比如修改关键字、日志文件路径等。同时,可以将该脚本加入到定时任务中,实现自动监控。
阅读全文