[Tip]每次查看上一分钟的messages日志
最近需要对messages日志中的OOM日志做监控,自然就有了“每次查看上一分钟的messages日志”日志的需求。Linux查看日志自然是shell最方便的。
- 第一版
time=$(TZ='Asia/Shanghai' date -d "1 minute ago" +"%H:%M")
tail -n 10000 /var/log/messages | grep ${time}"
能用,但是不久就收到了误报的反馈,因为只grep的%H:%M
,那么12:12:00
和00:12:12
的日志都会命中🤣
- 第二版
time=$(TZ='Asia/Shanghai' date -d "1 minute ago" +"%d %H:%M:")
grep ${time}" /var/log/messages
采用更严格的过滤规则,明确日期并且在时间后面加上冒号,这个版本稳定工作了2周,直到2021年,收到反馈完全没有数据上报了。
查看日志发现定时任务正常运行,但是因为date输出默认对一位数的日期补0,但是messages日志中没有这么做,所以新年开始就一直没有日志命中。真是哭笑不得的bug😂
- 第三版
time=$(TZ='Asia/Shanghai' date -d "1 minute ago" +"%-d %H:%M:")
grep ${time}" /var/log/messages
所幸date支持不补〇的输出格式,在%
后面加-
即可。
至此,稳定可用的日志监控诞生😄