时间窗口过滤是什么
journalctl 的 --since 与 --until 定义一个时间窗口,参数既可以是 yesterday、-1h、2 hours ago 这类相对表达,也可以是 2026-10-12 09:00 这样的绝对时间。排障顺序通常是先框时间窗,再用单元、优先级、关键字逐层收窄。
基本信息
| 适用平台 | Linux + systemd(journalctl) |
|---|---|
| 命令语法 | journalctl --since 时间 [--until 时间] |
| 时间格式 | today / yesterday / -1h / '2 hours ago' / 09:00 / 2026-10-12 09:00 |
| 组合建议 | 与 -u、-p、-b、-n 叠加,先粗后细 |
典型使用场景
- 事故定位:从告警时间往前取 30 分钟日志,比翻全量输出快得多
- 变更窗口核对:用 --since 与 --until 只看发布时段,排除无关噪音
- 按天巡检:--since today 配合 -p err 快速过一遍错误
- 跨启动对比:先 journalctl --list-boots 取到编号,再用 -b -1 加时间窗定位上次启动的问题
- 日志交接:把时间窗内的输出导出成文件,交付他人时上下文完整
常用窗口
常用窗口
journalctl --since today --no-pager | tail -n 50
journalctl --since '2 hours ago' --until '1 hour ago'
journalctl --since 09:00 --until '09:30' # 今天 9:00-9:30
journalctl --since '2026-10-11' --until '2026-10-12 06:00'
journalctl --since yesterday -p err | head -n 30
journalctl -u myapp --since '-30 min' -o short-iso # 带时区偏移,便于跨机对齐配合 boot 使用
配合 boot 使用
journalctl --list-boots | tail -n 5
journalctl -b -1 --since '2026-10-11' --no-pager | head -n 50
journalctl -b --since '10 min ago' # 本次启动且最近 10 分钟时间写法对照
| 写法 | 含义 | 备注 |
|---|---|---|
| today / yesterday | 当天零点起 / 前一天零点起 | 按本地时区解释 |
| -1h 或 -30 min | 相对当前时间往前 | 单位可用 s、m、h、d、w |
| '2 hours ago' | 自然语言相对时间 | 含空格必须加引号 |
| 09:00 | 今天 09:00 | 未写日期时按近期最接近的时刻解析 |
| 2026-10-12 09:00 | 绝对时间 | 跨天排查务必写全日期 |
时间参数含空格时必须整体加引号,否则被 shell 拆成两个参数直接报错。
只写时分不写日期时按近期最接近的时刻解析,跨天排查容易少看一天,写全日期最稳。
把输出交给脚本时加 --no-pager,避免分页器截断;需要结构化处理就加 -o json,时间字段精度到微秒,便于与其他系统日志对齐。
排查远程主机或容器日志时先用 timedatectl 确认时区,再决定时间窗的写法,否则整体平移一小时会把人带偏。
journald 未持久化时(没有 /var/log/journal)重启前的窗口查不到任何记录,先确认日志留存范围。
查历史窗口前先确认日志是否跨重启保留:没有持久化时,重启之后的查询只能看到本次启动的记录,时间窗过滤会返回空结果,让人误以为那段时间什么都没发生。把时间窗与启动编号、服务单元一起使用,能在多次重启之间准确划定范围。