1.需求:
定期监控log文件1s刷新一行,发现新生成数据中,有超出阈值信息,就记录,或者报警。
2.脚本设计:
1版,1s读取一次文件最后一行,校核信息。
2版,Ns读取一次文件,并记录当前读到的行数lastest,下次读取lastest+1到当前行。<解决了卡顿1次刷多行>
3版,Ns读取一次文件,并记录当前读到的行数lastest,下次读取lastest+1到(当前行-1)。<解决了读取时,恰巧输出半行>
3.配置文件设计:
1版,项目名=阈值。(log和读取文件的列数,项目名,在shell中写死)
2版,项目名=列数,阈值。文件名=a。(shell脚本中匹配项目名)
3版,line1:文件名1,项目,列数,阈值
line2:文件名2,项目,列数,阈值<解决了:文件个数名称不定,check项目不定,列数不定的问题>
4.算法设计:
1)将文件名放入数组1中,并作防止重复的处理。
2)将配置文件放入数组2中,模拟[][4]的2维数组。
3)循环读取数组1中的文件行,针对数组2中,先匹配文件名,再做check处理。
4.关键知识点:
1)读取指定文件行内容:
awk -v line=${lastest+1} 'NR==line{print}' logFile
2)获取当前文件行数:
wc -l logFile | awk '{print $1}'
3)配置文件读入:
除去匹配空或者注释的行:"^[ \t]*$|^[ \t]*#"
eval ${echo $LINE | awk -F , '{printf("fileName='%s'; item='%s'; column='%s'; limit='%s'", $1, $2, $3, $4)}'}