如何配置命令输出最近一小时日志,实现hourly audit需求?
嘿,针对你想自动化每小时日志审计、提取过去一小时日志的需求,我整理了几个实用的方案,适配不同的日志场景:
方案1:用journalctl(Systemd系统首选)
如果你的系统用systemd管理日志(大部分现代Linux发行版都是),journalctl自带的时间过滤功能非常省心,直接就能提取过去一小时的日志:
journalctl --since "1 hour ago"
要是只想聚焦某个服务的日志(比如你的应用叫my-app.service),可以加上单元名缩小范围:
journalctl -u my-app.service --since "1 hour ago"
如果需要把审计结果存档,直接重定向到带时间戳的文件即可:
journalctl --since "1 hour ago" > /var/log/hourly-audit-$(date +'%Y%m%d-%H').log
方案2:处理普通文本日志文件
如果你的日志是纯文本格式(比如/var/log/app.log),且每行都带标准时间戳(比如YYYY-MM-DD HH:MM:SS),可以用awk结合date命令精准过滤:
awk -v start="$(date -d '1 hour ago' +'%Y-%m-%d %H:%M:%S')" '$0 >= start' /var/log/app.log
适配不同时间格式
如果你的日志时间格式是MM/DD/YYYY HH:MM这类,只需要调整date的输出格式就行:
awk -v start="$(date -d '1 hour ago' +'%m/%d/%Y %H:%M')" '$0 >= start' /var/log/app.log
如果日志有滚动压缩(比如app.log.1.gz),可以用zcat读取压缩日志并过滤:
zcat /var/log/app.log.1.gz | awk -v start="$(date -d '1 hour ago' +'%Y-%m-%d %H:%M:%S')" '$0 >= start'
方案3:自动化每小时审计(Crontab配置)
要彻底摆脱手动操作,用crontab设置定时任务就可以实现全自动:
- 先创建一个审计脚本,比如
/usr/local/bin/hourly-audit.sh,根据你的日志类型选对应内容:
#!/bin/bash # 选项1:使用journalctl的场景 journalctl --since "1 hour ago" > /var/log/hourly-audit-$(date +'%Y%m%d-%H').log # 选项2:使用普通文本日志的场景 # awk -v start="$(date -d '1 hour ago' +'%Y-%m-%d %H:%M:%S')" '$0 >= start' /var/log/app.log > /var/log/hourly-audit-$(date +'%Y%m%d-%H').log
- 给脚本添加执行权限:
chmod +x /usr/local/bin/hourly-audit.sh
- 编辑crontab定时任务:
crontab -e
- 添加下面这一行,让脚本每小时整点自动执行:
0 * * * * /usr/local/bin/hourly-audit.sh >> /var/log/hourly-audit-cron.log 2>&1
这样每小时0分,系统就会自动提取过去一小时的日志,并存到带时间戳的文件里,方便后续回溯。
后续扩展:添加过滤条件
要是之后需要过滤特定错误,直接在命令末尾追加grep即可,比如:
journalctl --since "1 hour ago" | grep "Connection refused" # 普通日志场景 awk -v start="$(date -d '1 hour ago' +'%Y-%m-%d %H:%M:%S')" '$0 >= start' /var/log/app.log | grep "ERROR"
内容的提问来源于stack exchange,提问作者DomJangles
相关产品推荐
相关产品推荐

