温馨提示×

如何按时间筛选linux日志

小樊
44
2026-09-02 10:27:01
栏目: 智能运维

在 Linux 中按时间筛选日志通常有几种常见方式,取决于你用的是系统日志(rsyslog / journald)还是普通文本日志文件。下面按场景给你总结。


一、使用 journalctl(推荐,适用于 systemd 系统)

如果你的系统使用 systemd(大多数现代 Linux 发行版),日志由 journald 管理。

1️⃣ 按时间范围筛选

journalctl --since "2024-01-01 00:00:00" --until "2024-01-02 23:59:59"

2️⃣ 最近一段时间

journalctl --since "1 hour ago"
journalctl --since "30 min ago"
journalctl --since "yesterday"

3️⃣ 查看某个服务的日志

journalctl -u nginx --since "2024-06-01"

4️⃣ 实时 + 时间筛选

journalctl -f --since "10 min ago"

二、使用 grep + 文本日志(最常见)

如果你的日志是普通文件,如:

/var/log/messages
/var/log/syslog
/var/log/nginx/access.log

1️⃣ 按日期字符串筛选(最常见)

grep "2024-06-01" /var/log/syslog

2️⃣ 按时间范围(字符串匹配)

grep "Jun  1 10:" /var/log/messages

3️⃣ 多天筛选

grep -E "2024-06-0[1-3]" /var/log/nginx/access.log

三、使用 awk 精确按时间筛选(推荐高级用法)

假设日志时间格式是:

2024-06-01 10:15:30 ...

筛选某时间段

awk '$1>="2024-06-01" && $1<="2024-06-02"' /var/log/app.log

精确到小时

awk '$1=="2024-06-01" && $2>="10:00:00" && $2<="11:00:00"' /var/log/app.log

四、使用 sed 按行区间(适合大文件)

如果日志是按时间顺序写的:

sed -n '/2024-06-01 10:00/,/2024-06-01 11:00/p' /var/log/app.log

五、使用 logrotate 历史日志

如果你要查旧日志:

zcat /var/log/syslog.1.gz | grep "2024-05-30"

或:

zgrep "2024-05-30" /var/log/syslog.*

六、常见实战示例

✅ 查今天 Nginx 错误日志:

grep "$(date '+%Y-%m-%d')" /var/log/nginx/error.log

✅ 查过去 1 小时 SSH 登录:

journalctl -u ssh --since "1 hour ago"

✅ 查某个时间段的报错:

awk '$1>="2024-06-01 09:00" && $1<="2024-06-01 10:00" && /ERROR/' app.log

如果你能告诉我:

  • 用的是 哪种日志(systemd / nginx / 自定义)
  • 日志 时间格式
  • 想筛选 具体时间段

我可以帮你写一条精确命令

0