您可以使用processor_gotime插件或processor_strptime插件解析原始日志中的时间字段。本文介绍两种插件的参数说明和配置示例。
Go语言时间格式
processor_gotime插件使用Go语言时间格式解析原始日志中的时间字段,并支持将解析结果设置为日志服务中的日志时间。
- 参数说明
配置type为processor_gotime,detail说明如下表所示。说明 Logtail 0.16.28及以上版本支持该插件。
参数 类型 是否必选 说明 SourceKey String 是 原始字段名。 SourceFormat String 是 原始时间的格式。 SourceLocation Int 是 原始时间的时区。参数值为空时,表示Logtail所在主机或容器的时区。 DestKey String 是 解析后的目标字段。 DestFormat String 是 解析后的时间格式。 DestLocation Int 否 解析后的时区。参数值为空时,表示本机时区。 SetTime Boolean 否 是否将解析后的时间设置为日志时间。如果未添加该参数,则默认使用true,表示设置。 KeepSource Boolean 否 是否保留原始字段。如果未添加该参数,则默认使用true,表示保留。 NoKeyError Boolean 否 无匹配的原始字段时是否报错。如果未添加该参数,则默认使用true,表示报错。 AlarmIfFail Boolean 否 提取失败是否告警。如果未添加该参数,则默认使用true,表示告警。 - 示例
原始时间(s_key字段)的格式为
2006-01-02 15:04:05(东八区)
,现将原始时间解析为2006/01/02 15:04:05(东九区)
格式,添加到d_key字段中,并设置解析结果为日志服务中的日志时间。- 原始日志
"s_key":"2019-07-05 19:28:01"
- 配置详情
{ "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插件使用Linux strptime时间格式解析日志中的时间字段,并支持将解析结果设置为日志时间。
- 参数说明
配置type为processor_strptime,detail说明如下表所示。说明 Logtail 0.16.28及以上版本支持该插件。
参数 类型 是否必选 说明 SourceKey String 是 原始字段名。 Format String 是 原始时间的格式。 AdjustUTCOffset Boolean 否 是否调整时区。如果未添加该参数,则默认使用false,表示不调整。 UTCOffset Int 否 用于调整的时区偏移秒数。例如28800表示东八区。 AlarmIfFail Boolean 否 提取失败时是否告警。如果未添加该参数,则默认使用true,表示进行告警。 KeepSource Boolean 否 是否保留原始字段。如果未添加该参数,则默认使用true,表示保留。 EnablePreciseTimestamp Boolean 否 是否提取高精度时间。如果未添加该参数,则默认使用false,表示不提取高精度时间。 默认情况下,设置为true后,该插件会将SourceKey参数对应的字段值解析为毫秒级别的时间戳,并存入PreciseTimestampKey参数对应的字段。更多信息,请参见Logtail日志采集支持高精度时间戳。说明- 设置该参数为true前,请确保SourceKey参数对应的字段值(原始时间)支持相应的时间精度(ms、us或ns)。
- 仅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
- 原始日志
- 示例1:假设时区为东八区。
- 常见的时间表达式
说明 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