Splunk:提取字符串并将其转换为日期格式

Splunk: Extract string and convert it to date format

我有这样的事件:

something;<id>abc123<timeStamp>2021-12-10T23:10:12.044Z<timeStamp>2021-12-10T23:08:55.278Z>

我想提取 Id abc123 和两个 timeStamp

index = something 
|rex field=_raw "id>(?<Id>[0-9a-z-]+)" 
|rex "timeStamp>(?<timeStamp>[T0-9-\.:Z]+)"
| table _time Id timeStamp

这适用于上面的查询。但是我现在努力的是将 timeStamp-string 转换为日期格式以在最后提取 min(timeStamp) 以计算事件的 _time 和 [=16] 之间的差异=] 通过 id 字段。我很挣扎,因为时间戳的特殊格式包含 TZ

查看 strftime.org,以及相关的 strptime function used with eval

类似这样的东西(从你的 rex 中提取微秒,因为 Unix 纪元时间没有亚秒间隔的概念):

| rex field=_raw "timeStamp\>(?<timeStamp>[^\.]+)\.\d+Z"
| eval unixepoch=strptime(timeStamp,"%Y-%m-%dT%H:%M:%S")

这些时间戳没有什么特别之处 - 它们是标准格式。使用 strptime 函数进行转换。

index = something 
|rex field=_raw "id>(?<Id>[^\<]+)" 
|rex "timeStamp>(?<timeStamp>[^\<]+)"
| eval ts = strptime(timeStamp, "%Y-%m-%dT%H:%M:%S.%3N%Z")
| eval diff = ts - _time
| table _time Id timeStamp diff