Logstash 8.0 @具有纳秒精度的时间戳

kokeuurv  于 2022-12-09  发布在  Logstash
关注(0)|答案(3)|浏览(222)

我需要帮助来理解如何使用另一个包含纳秒精度的日期和时间的字段的内容来设置**@timestamp**字段。我尝试使用日期匹配,但我不清楚必须使用哪种模式来指定范围:

date {
    match => ["timestamp_nano", "ISO8601"]
    target => "@timestamp"
}

其中,timestamp_nano是具有纳秒精度的时间戳(例如,“2022-01- 20 T12:00:00.123456789Z”)。
通过使用ISO 8601@timestamp字段中的精度为毫秒,并且不会报告其余数字。
匹配中使用的模式是什么?
先谢了

ndasle7k

ndasle7k1#

这个答案适用于8.0.0-rc 1,因为8.0还没有发布。日期过滤器仍然使用Joda库,它被限制为毫秒精度。引入纳秒精度的PR修复了底层的LogStash Timestamp类,使其能够使用纳秒精度,但不是所有使用它的类。
如果我逃跑

input { generator { count => 1 lines => [ '' ] } }
output { stdout { codec => rubydebug { metadata => false } } }

那么@timestamp的精度为微秒

"@timestamp" => 2022-01-22T01:14:15.881459Z,

然而,时间戳可以比这更精确。如果我使用json编解码器

input { generator { count => 1 lines => [ '{ "@timestamp": "2022-01-10T12:13:14.123456789"}' ] codec => json } }
output { stdout { codec => rubydebug { metadata => false } } }

我可以得到纳秒级的精度

"@timestamp" => 2022-01-10T17:13:14.123456789Z,

如果要使用另一个字段的值,可以执行以下操作

input { generator { count => 1 lines => [ '' ] } }
filter {
    mutate { add_field => { "foo" => "2022-01-10T12:13:14.123456789" } }
    mutate { add_field => { "bar" => '{ "@timestamp": "%{foo}" } ' } }
    json { source => "bar" }
}
de90aj5v

de90aj5v2#

@badger给出了很好的回答,但是我更喜欢在Logstash8.x中使用Ruby的单步操作

input { generator { count => 1 lines => [ '' ] } }

filter {
  mutate { add_field => { "[@timestamp_nanoseconds]" => "2022-08-11T10:10:10.123456789Z" } }
  ruby {
    code => "event.set('[@timestamp]', LogStash::Timestamp.new(event.get('[@timestamp_nanoseconds]')) )"
  }
}

output { stdout {} }

我得到native @时间戳,精确到纳秒

"@timestamp" => 2022-08-11T10:10:10.123456789Z,
hyrbngr7

hyrbngr73#

我通过在Elasticsearch中添加管道得到了相同的结果:

{
        "description": "mypipeline",
        "processors": [
            {
                "date": {
                    "field": "timestamp_nano",
                    "formats": ["ISO8601"],
                    "output_format": "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSZ"
                }
            }
        ]
}

timestamp_nano包括具有纳秒精度的时间戳。
在LogT中,@时间戳可以通过使用一个ruby脚本来更新,如这里所示,它可以工作,但作者说,脚本可能没有优化。
批报

相关问题