日志时间过滤是什么
按时间窗口查看容器日志:起始时间可以写成相对时长,也可以写成完整的时间点,配合结束时间与末尾行数限制,就能把一次事故的时间段单独摘出来。它解决的是日志量太大、翻不动的问题。
基本信息
| 起始时间 | 支持相对时长,例如最近半小时;也支持完整时间点 |
|---|---|
| 结束时间 | 限定窗口上界,与起始时间配合使用 |
| 行数限制 | 只取末尾若干行,和起始时间可以同时使用 |
| 时间戳 | 输出时可在每行前加时间戳,便于与监控对齐 |
| 时间基准 | 采用容器内进程写出日志时的时间记录 |
典型使用场景
- 事故回溯:把故障发生前后的时间窗单独取出来分析
- 发布验证:只看重启之后的时间段,确认新版本是否引入报错
- 定时巡检:取最近一段时间的错误输出,判断服务是否稳定
- 对比分析:同一服务的两个实例取相同时间窗,排查是全局问题还是单实例问题
- 避开噪声:长时间跑的服务只取感兴趣的时间段,日志量可控
常用示例
常用示例
docker logs --since 30m web # 最近半小时
docker logs --since 2h --until 1h web # 两小时前到一小时前
docker logs --since 2026-10-12T08:00:00 --until 2026-10-12T09:00:00 web # 绝对时间窗
docker logs -t --tail 50 web # 末尾五十行并带时间戳
docker logs --since 10m web 2>&1 | grep -i error | tail -30 # 时间窗内筛错误参数组合效果
| 组合 | 含义 | 使用提醒 |
|---|---|---|
| 起始时间加行数限制 | 先按时间过滤,再取末尾若干行 | 两者不冲突,可以放心一起用 |
| 起始与结束时间 | 取一个闭合时间窗 | 结束时间早于起始时间会得不到结果 |
| 相对时长 | 以当前时刻往前推算 | 单位秒、分、时都要写清楚 |
| 完整时间点 | 按绝对时刻过滤 | 带时区写更稳妥,避免与宿主时间基准错位 |
| 加时间戳输出 | 每行前显示记录时间 | 便于与监控图表逐条对齐 |
定位误差的来源
- 容器内时区与宿主不一致,看到的时间与本地直觉有偏差
- 应用输出带缓冲,日志记录时刻晚于事件实际发生时刻
- 日志轮转把窗口起点之前的记录删掉,看起来像服务没有输出
- 多实例日志混在一起时先按实例分开取,避免时间线互相干扰
- 相对时长以命令执行时刻为基准,长时间命令的输出窗口会随之变化
相对时长的单位要写全:单个数字加单位,例如十秒、十分钟、一小时,只写数字的语义在不同版本里有差异,明确写单位最稳。
取不到期望区间的日志时先确认时间基准:容器时区、宿主时区与日志本身的时间戳三者不一致是常见原因,先核对再怀疑应用。