时间处理类插件

时间处理类插件用于解析、提取、标准化日志时间。

插件效果示例

表格展示该原始日志在分别使用时间解析插件(原生)与不使用插件的情况下,保存到日志服务后的数据结构。

原始日志

不使用插件

使用时间解析插件(原生)

{"level":"INFO","timestamp":"2025-09-29T09:56:01+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}

Content:"{"level":"INFO","timestamp":"2025-09-29T09:56:01+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}"

image

时间处理类插件概览

日志服务提供以下多种类型的时间处理类插件,请按需要进行选择。

插件名称

类型

功能说明

时间解析

原生

解析并标准化日志中的时间字段。

提取日志时间

拓展

解析原始时间字段并可设为日志时间戳。

功能入口

当您需要使用Logtail插件处理日志时,您可以在创建或修改Logtail配置时,添加插件。具体操作,请参见处理插件概述

原生插件与拓展插件的区别

原生插件:C++实现,性能更强。

拓展插件:Go实现,生态丰富且灵活,当业务日志过于复杂,无法使用原生插件处理时,可以考虑使用拓展插件。

  • 拓展插件性能限制

    • 使用拓展插件进行日志处理时,LoongCollector会消耗更多的资源(以CPU为主),如有需求可以调整LoongCollector参数配置进行日志传输延时过长优化

    • 当原始数据量的生成速度超过5 MB/s时,不建议使用过于复杂的插件组合来处理日志,可以使用拓展插件进行简单处理,再通过数据加工概述完成进一步处理。

  • 日志采集限制

    • 拓展插件对文本日志的处理采用行模式,即文件级别的元数据(例如__tag__:__path____topic__等)会被存放到每一条日志中。

    • 添加拓展插件后会影响和Tag相关的功能:

      • 上下文查询和LiveTail功能不可用。如果要使用这些功能,需要额外添加aggregators配置。

      • __topic__字段会被重命名为__log_topic__。如果添加了aggregators配置,日志中将同时存在__topic__字段和__log_topic__字段。如果您不需要__log_topic__字段,可使用丢弃字段插件删除该字段。

      • __tag__:__path__等字段不再具备原生字段索引,需要创建索引

时间解析插件(原生)

时间解析插件用于解析日志的时间字段,并将解析结果设置为日志的__time__字段。

配置说明

参数名称

说明

原始字段

解析日志前,用于存放日志内容的原始字段,默认值为content。

时间格式

根据日志中的时间内容设置对应的时间格式。例如日志中的时间为10/Sep/2023:12:36:49,对应的时间转换格式为%d/%b/%Y:%H:%M:%S

时区

选择日志时间字段所在的时区。如果不选择,则默认使用机器时区,即使用Logtail进程所在环境的时区。

常见日志时间格式

Logtail支持的常见日志时间格式如下表所示。

说明
  • 默认情况下,日志服务中的日志时间戳精确到秒,所以时间格式只需配置到秒,无需配置毫秒、微秒等信息。

    如果原始日志中的时间字段包含毫秒、微秒或纳秒级精度,且需在日志服务中保留该精度,请参见日志采集支持纳秒精度时间戳

  • Linux服务器中,Logtail支持strftime函数提供的所有时间格式。即能被strftime函数格式化的日志时间字符串都能被Logtail解析并使用。

时间格式

说明

示例

%a

星期的缩写。

Fri

%A

星期的全称。

Friday

%b

月份的缩写。

Jan

%B

月份的全称。

January

%d

每月第几天,十进制,范围为01~31。

07, 31

%f

秒的小数部分(毫秒、微秒或纳秒)

123

%h

月份的缩写,等同于%b

Jan

%H

小时,24小时制。

22

%I

小时,12小时制。

11

%m

月份,十进制,范围为01~12。

08

%M

分钟,十进制,范围为00~59。

59

%n

换行符。

换行符

%p

AMPM。

AM、PM

%r

12小时制的时间组合,等同于%I:%M:%S %p

11:59:59 AM

%R

小时和分钟组合,等同于%H:%M

23:59

%S

秒数,十进制,范围为00~59。

59

%t

Tab符号,制表符。

%y

年份,十进制,不带世纪,范围为00~99。

04、98

%Y

年份,十进制。

2004、1998

%C

世纪,十进制,范围为00~99。

16

%e

每月第几天,十进制,范围为1~31。

如果是个位数字,前面需要加空格。

7、31

%j

一年中的天数,十进制,范围为001~366。

365

%u

星期几,十进制,范围为1~7,1表示周一。

2

%U

每年的第几周,星期天是一周的开始,范围为00~53。

23

%V

每年的第几周,星期一是一周的开始,范围为01~53。

如果一月份刚开始的一周>=4天,则认为是第1周,否则认为下一个星期是第1周。

24

%w

星期几,十进制,范围为0~6,0代表周日。

5

%W

每年的第几周,星期一是一周的开始,范围为00~53。

23

%c

标准的日期和时间。

Tue Nov 20 14:12:58 2020

%x

标准的日期,不带时间。

Tue Nov 20 2020

%X

标准的时间,不带日期。

11:59:59

%s

Unix时间戳。

1476187251

示例

常见的时间标准、示例及对应的时间表达式如下所示。

示例

时间表达式

时间标准

2017-12-11 15:05:07

%Y-%m-%d %H:%M:%S

自定义

[2017-12-11 15:05:07.012]

[%Y-%m-%d %H:%M:%S

自定义

2017-12-11 15:05:07.123

%Y-%m-%d %H:%M:%S.%f

自定义

02 Jan 06 15:04 MST

%d %b %y %H:%M

RFC822

02 Jan 06 15:04 -0700

%d %b %y %H:%M

RFC822Z

Monday, 02-Jan-06 15:04:05 MST

%A, %d-%b-%y %H:%M:%S

RFC850

Mon, 02 Jan 2006 15:04:05 MST

%A, %d %b %Y %H:%M:%S

RFC1123

2006-01-02T15:04:05Z07:00

%Y-%m-%dT%H:%M:%S

RFC3339

2006-01-02T15:04:05.999999999Z07:00

%Y-%m-%dT%H:%M:%S

RFC3339Nano

1637843406

%s

自定义

1637843406123

%s

自定义(日志服务以秒级精度处理)

提取日志时间插件(拓展)

使用processor_gotime插件或processor_strptime插件解析原始日志中的时间字段。此处介绍两种插件的参数说明和配置示例。

说明

如果原始日志中的时间字段包含毫秒、微秒或纳秒级精度,且需在日志服务中保留该精度,请参见日志采集支持纳秒精度时间戳

Go语言时间格式(processor_gotime

processor_gotime插件使用Go语言时间格式解析原始日志中的时间字段,并支持将解析结果设置为日志服务中的日志时间。

重要
  • Logtail 0.16.28及以上版本支持processor_gotime插件。

  • 表单配置方式:采集文本日志和容器标准输出时可用。

  • JSON配置方式:采集文本日志时不可用。

表单配置方式

  • 参数说明

    配置处理插件类型提取日志时间(Go语言时间格式)

    image

    相关参数说明如下表所示。

    参数

    说明

    原始时间字段

    原始字段名。

    原始时间格式

    原始时间的格式。

    原始时间时区

    原始时间的时区。选择机器时区时,表示Logtail所在主机或容器的时区。

    结果时间字段

    解析后的目标字段,该字段不支持设置为__time__

    结果时间格式

    解析后的时间格式。

    自定义结果时间时区

    解析后的时区。选择机器时区时,表示本机的时区。

    高级参数>设为日志时间

    选中该选项后,系统会将解析后的时间设置为日志时间。

    高级参数>保留原始字段

    选中该选项后,解析后的日志中将保留原始字段。

    高级参数>原始字段缺失报错

    选中该选项后,如果原始日志中无您所指定的原始字段,系统将报错。

    高级参数>提取失败报错

    选中该选项后,如果提取日志时间失败,系统将报错。

  • 示例

    原始时间(s_key字段)的格式为2006-01-02 15:04:05(东八区),现将原始时间解析为2006/01/02 15:04:05(东九区)格式,添加到d_key字段中,并设置解析结果为日志服务中的日志时间。

    • 原始日志

      "s_key":"2022-07-05 19:28:01"
    • Logtail插件处理配置提取日志时间(Go语言时间格式)

    • 处理结果

      "s_key":"2022-07-05 19:28:01"
      "d_key":"2022/07/05 20:28:01"

JSON配置方式

  • 参数说明

    配置typeprocessor_gotimedetail说明如下表所示。

    参数

    类型

    是否必选

    说明

    SourceKey

    String

    原始字段名。

    SourceFormat

    String

    原始时间的格式。

    SourceLocation

    Int

    原始时间的时区。参数值为空时,表示Logtail所在主机或容器的时区。

    DestKey

    String

    解析后的目标字段,该字段不支持设置为__time__

    DestFormat

    String

    解析后的时间格式。

    DestLocation

    Int

    解析后的时区。参数值为空时,表示本机时区。

    SetTime

    Boolean

    是否将解析后的时间设置为日志时间。

    • true(默认值):是

    • false:否

    KeepSource

    Boolean

    被解析后的日志中是否保留原始字段。

    • true(默认值):保留

    • false:不保留

    NoKeyError

    Boolean

    原始日志中无您所指定的原始字段时,系统是否报错。

    • true(默认值):报错

    • false:不报错

    AlarmIfFail

    Boolean

    提取日志时间失败,系统是否报错。

    • true(默认值):报错

    • false:不报错

  • 示例

    原始时间(s_key字段)的格式为2006-01-02 15:04:05(东八区),现将原始时间解析为2006/01/02 15:04:05(东九区)格式,添加到d_key字段中,并设置解析结果为日志服务中的日志时间。

    • 原始日志

      "s_key":"2019-07-05 19:28:01"
    • Logtail插件处理配置

      {
        "processors":[
          {
            "type":"processor_gotime",
            "detail": {
              "SourceKey": "s_key",
              "SourceFormat":"2006-01-02 15:04:05",
              "SourceLocation":8,
              "DestKey":"d_key",
              "DestFormat":"2006/01/02 15:04:05",
              "DestLocation":9,
              "SetTime": true,
              "KeepSource": true,
              "NoKeyError": true,
              "AlarmIfFail": true
            }
          }
        ]
      }
    • 处理结果

      "s_key":"2019-07-05 19:28:01"
      "d_key":"2019/07/05 20:28:01"()

strptime时间格式(processor_strptime

processor_strptime插件使用Linux strptime时间格式解析日志中的时间字段,并支持将解析结果设置为日志时间。

重要

Logtail 0.16.28及以上版本支持processor_strptime插件。

表单配置方式

  • 参数说明

    配置处理器类型提取日志时间(strptime时间格式),相关参数说明如下表所示。

    参数

    说明

    原始字段

    原始字段名。

    原始时间格式

    原始时间的格式。

    保留原始字段

    选中该选项后,被解析后的日志中将保留原始字段。

    提取失败报错

    选中该选项后,如果提取日志时间失败,系统将报错。

    进行时间偏移

    选中该选项后,您可以设置时间偏移秒数。

    时间偏移秒数

    时间偏移秒数。例如28800表示东八区,-3600代表西一区。

  • 配置示例

    %Y/%m/%d %H:%M:%S格式的原始时间(log_time字段的值)解析为对应的日志时间,时区使用机器所在时区。假设时区为东八区。

    • 原始日志

      "log_time":"2022/01/02 12:59:59"
    • Logtail插件处理配置 strptime时间格式

    • 处理结果

      "log_time":"2022/01/02 12:59:59"
      Log.Time = 1451710799
  • 常见的时间表达式

    说明

    processor_strptime插件支持%f格式解析,表示秒的小数部分,最高精度为纳秒。

    示例

    时间表达式

    2016/01/02 12:59:59

    %Y/%m/%d %H:%M:%S

    2016/01/02 12:59:59.1

    %Y/%m/%d %H:%M:%S.%f

    2016/01/02 12:59:59.987654321 +0700 (UTC)

    %Y/%m/%d %H:%M:%S.%f %z (%Z)

    2016/Jan/02 12:59:59,123456

    %Y/%b/%d %H:%M:%S,%f

    2019-07-15T04:16:47:123Z

    %Y-%m-%dT%H:%M:%S:%f

JSON配置方式

  • 参数说明

    配置typeprocessor_strptimedetail说明如下表所示。

    参数

    类型

    是否必选

    说明

    SourceKey

    String

    原始字段名。

    Format

    String

    原始时间的格式。

    AdjustUTCOffset

    Boolean

    是否调整时区。

    • true:是。

    • false(默认值):否

    UTCOffset

    Int

    用于调整的时区偏移秒数。例如28800表示东八区。

    AlarmIfFail

    Boolean

    提取日志失败时,系统是否报错。

    • true(默认值):报错。

    • false:不报错。

    KeepSource

    Boolean

    被解析后的日志中,是否保留原始字段。

    • true(默认值):保留。

    • false:不保留。

    EnablePreciseTimestamp

    Boolean

    是否提取高精度时间。

    • true:是。

    • false(默认值):否。

    设置为true后,该插件会将SourceKey参数对应的字段值解析为毫秒级别的时间戳,并存入PreciseTimestampKey参照中对应的字段。更多信息,请参见Logtail日志采集支持高精度时间戳

    重要
    • 设置该参数为true前,请确保SourceKey参数对应的字段值(原始时间)支持相应的时间精度(ms、usns)。

    • Logtail 1.0.32及以上版本支持。

    PreciseTimestampKey

    String

    保存高精度时间戳的字段。默认值为precise_timestamp字段。

    PreciseTimestampUnit

    String

    高精度时间戳的单位。默认值为ms。取值包括ms(毫秒)、us(微秒)、ns(纳秒)。

  • 示例

    %Y/%m/%d %H:%M:%S格式的原始时间(log_time字段的值)解析为对应的日志时间,时区使用机器所在时区。

    • 示例1:假设时区为东八区。

      • 原始日志

        "log_time":"2016/01/02 12:59:59"
      • Logtail插件处理配置

        {
          "processors":[
            {
              "type":"processor_strptime",
              "detail": {
                "SourceKey": "log_time",
                "Format": "%Y/%m/%d %H:%M:%S"
              }
            }
          ]
        }
      • 处理结果

        "log_time":"2016/01/02 12:59:59"
        Log.Time = 1451710799
    • 示例2:假设时区为东七区。

      • 原始日志

        "log_time":"2016/01/02 12:59:59"
      • Logtail插件处理配置

        {
          "processors":[
            {
              "type":"processor_strptime",
              "detail": {
                "SourceKey": "log_time",
                "Format": "%Y/%m/%d %H:%M:%S",
                "AdjustUTCOffset": true,
                "UTCOffset": 25200
              }
            }
          ]
        }
      • 处理结果

        "log_time":"2016/01/02 12:59:59"
        Log.Time = 1451714399
    • 示例3:假设时区为东七区。

      • 原始日志

        "log_time":"2016/01/02 12:59:59.123"
      • Logtail插件处理配置

        {
          "processors":[
            {
              "type":"processor_strptime",
              "detail": {
                "SourceKey": "log_time",
                "Format": "%Y/%m/%d %H:%M:%S.%f",
                "EnablePreciseTimestamp": true
              }
            }
          ]
        }
      • 处理结果

        "log_time":"2016/01/02 12:59:59.123"
        "precise_timestamp": 1451714399123
        Log.Time = 1451714399
  • 常见的时间表达式

    说明

    processor_strptime插件支持%f格式解析,表示秒的小数部分,最高精度为纳秒。

    示例

    时间表达式

    2016/01/02 12:59:59

    %Y/%m/%d %H:%M:%S

    2016/01/02 12:59:59.1

    %Y/%m/%d %H:%M:%S.%f

    2016/01/02 12:59:59.987654321 +0700 (UTC)

    %Y/%m/%d %H:%M:%S.%f %z (%Z)

    2016/Jan/02 12:59:59,123456

    %Y/%b/%d %H:%M:%S,%f

    2019-07-15T04:16:47:123Z

    %Y-%m-%dT%H:%M:%S:%f

相关文档