首页/云/可观测性速查/时间函数:time、timestamp 与日期判断
Prometheus 与采集64 条

时间函数:time、timestamp 与日期判断

time() 返回查询时刻的 Unix 秒,timestamp() 返回样本自身时间戳;配合 day_of_week、hour 等函数可实现按时间段差异化的规则。

可观测性速查云更新于 2026-10-13

三个容易混的概念

PromQL 里与时间相关的函数容易混淆:time() 返回查询执行时刻的 Unix 秒,timestamp() 返回某个样本自身携带的时间戳,day_of_week、hour 等函数则基于评估时刻返回日期时间标量。区分这三者是写对规则的前提,混用会让数据中断检测失效,或让时间条件判断错位。

函数对照

函数返回值典型用途
time()查询时刻的 Unix 秒(标量)计算样本新鲜度、按当前时间做条件判断
timestamp(v)该样本的时间戳(秒)检测数据中断:当前时间减样本时间过大
day_of_week()星期几(0 表示周日)只在工作日生效的规则
hour()当前小时(0-23)营业时段与夜间使用差异化阈值
minute()当前分钟配合 hour 做更细的时间窗口控制

用法示例

用法示例
# 数据中断检测:当前时间与样本时间差超过 5 分钟
time() - timestamp(up{job="api"}) > 300

# 仅工作日生效的高负载检查
day_of_week() >= 1 <= 5 and node_load1 > 8

# 营业时段(9 点到 21 点)才评估的低流量告警
hour() >= 9 <= 21 and sum(rate(orders_total[5m])) < 1

典型使用场景

  • 用 time() 与 timestamp() 的差值判断 exporter 是否停止上报
  • 按业务时段设置差异化阈值,避免夜间低频流量触发误报
  • 在规则里排除特定星期或时段,配合维护窗口使用
  • 排查规则为何没触发时,先确认评估时刻各时间函数的取值
time()、day_of_week() 返回标量,可参与算术与比较;日期时间函数取执行评估的 Prometheus 进程时区,跨时区团队要统一约定并写进文档。
timestamp() 是每个样本自己的时间,同一次查询里不同序列的值可能不同,用于告警时通常搭配 up 这类固定序列。

排查顺序

  • 先确认指标本身是否还有新样本,没有样本时任何时间函数都算不出结果
  • 再确认告警的评估间隔与 for 时长,评估太稀会错过短时窗口
  • 最后核对进程时区与容器时区是否一致,容器默认 UTC 的场景尤其常见

易错点

  • timestamp() 返回样本时间而非当前时间,与 time() 混用前先确认语义
  • 进程时区会影响 day_of_week 等函数结果,跨时区团队要统一约定
  • 用时间函数做条件却不核对评估频率,低频评估会错过短时间窗口
  • 时间条件写进规则但没写业务说明,换人后没人知道为何白天夜间阈值不同

数据来源与参考

  • Prometheus 文档 · 日期与时间函数
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌