日常妙招屋
白蓝主题五 · 清爽阅读
首页  > 网络监控

用bash命令轻松搞定日期操作,网络日志分析不再难

网络监控的时候,经常要查日志。比如服务器出问题了,想看看昨天下午3点到5点之间有没有异常请求。这时候如果手动翻文件,费时又容易出错。其实用bash的日期操作命令,几行代码就能精准定位目标时间段的日志。

获取当前时间很简单

在终端里输入下面这句,就能看到现在的时间:

date +"%Y-%m-%d %H:%M:%S"

输出像这样:2024-04-05 15:30:22。格式可以根据需要调整,%Y是四位年份,%m是月份,%d是几号,%H、%M、%S分别是时分秒。

往前推几天也能算

比如你想查前天的访问日志,可以这样写:

yesterday=$(date -d "2 days ago" +"%Y-%m-%d")

然后配合grep去查日志文件:

grep "$yesterday 15:" /var/log/nginx/access.log

这就把前天下午3点左右的请求都筛出来了,排查问题快多了。

生成时间戳做文件备份名

有时候要定期备份配置文件,加上日期更清楚。比如写个脚本自动备份:

cp /etc/nginx/nginx.conf /backup/nginx.conf.$(date +"%Y%m%d_%H%M")

备份出来的文件名就是 nginx.conf.20240405_1530 这种格式,一目了然。

跨小时段查日志也方便

要是问题发生在跨小时的时间段,比如从14:58到15:03,直接按字符串匹配会漏掉。可以用date命令生成精确范围:

start_time=$(date -d "14:58" +"%H:%M")
end_time=$(date -d "15:03" +"%H:%M")
awk -v start="$start_time" -v end="$end_time" '$4 ~ /\[.*:'start'.*:.*\]/ || $4 ~ /\[.*:'end'.*:.*\]/' /var/log/nginx/access.log

虽然awk部分有点复杂,但核心还是靠date命令提供准确的时间点。

这些小技巧用熟了,查日志就像翻手机相册按时间找照片一样顺手。不用再打开一堆文件肉眼扫描,效率高了不少。