菜单
开源

timestamp

注意

Promtail 已被弃用,并在长期支持 (LTS) 阶段,持续到 2026 年 2 月 28 日。Promtail 将于 2026 年 3 月 2 日达到生命周期结束 (EOL)。您可以在此处找到迁移资源。

timestamp 阶段是一种操作阶段,可以在日志行发送到 Loki 之前更改其时间戳。如果不存在 timestamp 阶段,日志行的时间戳默认为日志条目被抓取的时间。

Schema

yaml
timestamp:
  # Name from extracted data to use for the timestamp.
  source: <string>

  # Determines how to parse the time string. Can use
  # pre-defined formats by name: [ANSIC UnixDate RubyDate RFC822
  # RFC822Z RFC850 RFC1123 RFC1123Z RFC3339 RFC3339Nano Unix
  # UnixMs UnixUs UnixNs].
  format: <string>

  # Fallback formats to try if the format fails to parse the value
  # Can use pre-defined formats by name: [ANSIC UnixDate RubyDate RFC822
  # RFC822Z RFC850 RFC1123 RFC1123Z RFC3339 RFC3339Nano Unix
  # UnixMs UnixUs UnixNs].
  [fallback_formats: []<string>]

  # IANA Timezone Database string.
  [location: <string>]

  # Which action should be taken in case the timestamp can't
  # be extracted or parsed. Valid values are: [skip, fudge].
  # Defaults to "fudge".
  [action_on_failure: <string>]

参考时间

format 字段可以指定如何解释参考时间(定义为 Mon Jan 2 15:04:05 -0700 MST 2006)的格式,也可以是以下常用形式之一:

  • ANSIC: Mon Jan _2 15:04:05 2006
  • UnixDate: Mon Jan _2 15:04:05 MST 2006
  • RubyDate: Mon Jan 02 15:04:05 -0700 2006
  • RFC822: 02 Jan 06 15:04 MST
  • RFC822Z: 02 Jan 06 15:04 -0700
  • RFC850: Monday, 02-Jan-06 15:04:05 MST
  • RFC1123: Mon, 02 Jan 2006 15:04:05 MST
  • RFC1123Z: Mon, 02 Jan 2006 15:04:05 -0700
  • RFC3339: 2006-01-02T15:04:05-07:00
  • RFC3339Nano: 2006-01-02T15:04:05.999999999-07:00

此外,以下 format 值支持常见的 Unix 时间戳:

  • Unix: 1562708916 或带小数部分 1562708916.000000123
  • UnixMs: 1562708916414
  • UnixUs: 1562708916414123
  • UnixNs: 1562708916000000123

自定义格式会直接传递给 Go 的 time.Parse 函数中的 layout 参数。如果自定义格式未指定年份部分,Promtail 将假定使用系统时钟指示的当前年份。

自定义格式使用的语法通过时间戳的每个组成部分(即 Mon Jan 2 15:04:05 -0700 MST 2006)的特定值来定义参考日期和时间。下表显示了自定义格式中应使用的受支持参考值。

时间戳组成部分格式值
06, 2006
1, 01, Jan, January
2, 02, _2 (右对齐,两位数)
星期Mon, Monday
3 (12 小时制), 03 (12 小时制带零前缀), 15 (24 小时制)
4, 04
5, 05
秒的小数部分.000 (毫秒带零前缀), .000000 (微秒), .000000000 (纳秒), .999 (毫秒不带末尾零), .999999 (微秒), .999999999 (纳秒)
12 小时制周期pm, PM
时区名称MST
时区偏移-0700, -070000 (带秒), -07, 07:00, -07:00:00 (带秒)
时区 ISO-8601Z0700 (Z 代表 UTC 或时间偏移), Z070000, Z07, Z07:00, Z07:00:00

为了正确格式化时间,对于时间戳 2006/01/02 03:04:05.000

  • 如果您想要 24 小时制格式,应使用 15:04:0.000
  • 如果您想要 12 小时制格式,应使用 3:04:05.000 PM03:04:05.000 PM

失败时采取的操作

action_on_failure 设置定义了在提取数据中不存在 source 字段或时间戳解析失败时,该阶段应采取的操作。支持的操作包括:

  • fudge(默认):将时间戳更改为上次已知的时间戳,并加上 1 纳秒(以保证日志条目顺序)
  • skip:不更改时间戳,保留 Promtail 抓取日志条目时的时间

示例

yaml
- timestamp:
    source: time
    format: RFC3339Nano

此阶段在提取的 map 中查找 time 字段,并以 RFC3339Nano 形式(例如 2006-01-02T15:04:05.999999999-07:00)读取其值。生成的时间值将用作随日志行发送到 Loki 的时间戳。