如何编写脚本监控日志30分钟内连续出现CRITICAL关键字
解决方案:监控CPU日志连续CRITICAL告警的Bash脚本
下面是满足需求的Bash脚本,核心逻辑是实时跟踪日志、逐行校验关键字、维护连续计数,触发条件后自动终止监控:
#!/bin/bash # 替换为你的实际日志文件路径 LOG_FILE="/path/to/cpu_usage.out" # 连续CRITICAL计数初始化为0 critical_count=0 # 实时跟踪日志新增内容,逐行处理 tail -f "$LOG_FILE" | while read -r line; do if echo "$line" | grep -q "CRITICAL"; then # 匹配到CRITICAL,计数+1 ((critical_count++)) # 检查是否达到连续30次阈值 if [ "$critical_count" -eq 30 ]; then echo "触发告警:连续30分钟检测到CPU使用率CRITICAL" # 退出循环,管道另一端的tail会因SIGPIPE自动终止 exit 0 fi else # 出现非CRITICAL记录,重置计数 critical_count=0 fi done
关键逻辑说明
tail -f "$LOG_FILE":持续跟踪日志文件的新增行,确保能获取每分钟的CPU记录while read -r line:安全读取每一行内容,-r参数避免解析行内的转义字符grep -q "CRITICAL":静默校验当前行是否包含目标关键字,只返回状态码不输出冗余内容- 计数机制:每匹配一次CRITICAL就累加计数,遇到非CRITICAL行立即重置为0;当计数达到30时,脚本直接退出,此时管道中的
tail进程会收到SIGPIPE信号自动终止 - 可扩展性:在
exit 0前可添加邮件告警等自定义逻辑
测试方法
- 手动往日志文件追加CRITICAL行测试计数累加:
for i in {1..30}; do echo "CRITICAL: CPU usage high" >> /path/to/cpu_usage.out; done - 追加非CRITICAL行测试计数重置:
echo "INFO: CPU usage normal" >> /path/to/cpu_usage.out
内容的提问来源于stack exchange,提问作者Diligent Bug
相关产品推荐
相关产品推荐

