gpt4 book ai didi

ruby - 如何格式化logstash中的数字?

转载 作者:行者123 更新时间:2023-12-03 01:51:11 25 4
gpt4 key购买 nike

如何在Logstash中格式化数字?
我在过滤器插件的ruby代码中使用''%格式表达式,但格式结果为nil。我尝试了sprintf和format函数,但结果相同。

以下是我的代码段。

ruby {
code => "
event.set( 'positioning', event.get('branch_lat') + ',' + event.get('branch_lon') )
event.set( 'report_datetime', event.get('report_date') + '%04d' % event.get('report_time') )
"
}

作为格式结果,我在日志中得到以下错误。
[2016-10-28T12:31:43,217][ERROR][logstash.filters.ruby    ] Ruby exception occurred: undefined method `+' for nil:NilClass

我的平台信息如下。
[root@elk-analytic logstash]# rpm -qi logstash
Name : logstash
Epoch : 1
Version : 5.0.0
Release : 1
Architecture: noarch
Install Date: Thu 27 Oct 2016 01:26:03 PM JST
Group : default
Size : 198320729
License : ASL 2.0
Signature : RSA/SHA512, Wed 26 Oct 2016 01:57:59 PM JST, Key ID d27d666cd88e42b4
Source RPM : logstash-5.0.0-1.src.rpm
Build Date : Wed 26 Oct 2016 01:10:26 PM JST
Build Host : packer-virtualbox-iso-1474648640
Relocations : /
Packager : <vagrant@packer-virtualbox-iso-1474648640>
Vendor : Elasticsearch
URL : http://www.elasticsearch.org/overview/logstash/
Summary : An extensible logging pipeline
Description :
An extensible logging pipeline

添加于2016.10.28 14:32

我的目标是将csv列下方的内容解析为elasticsearch中的timestamp字段。
请注意,小时的时间是1位数和2位数的混合模式。

约会时间

20160204,1000

20160204,935

我尝试在过滤器插件中使用 date函数,但由于记录错误而无法正常工作。
[2016-10-28T11:00:10,233][WARN ][logstash.filters.date ] Failed parsing date from field {:field=>"report_datetime", 
:value=>"20160204 935", :exception=>"Cannot parse \"20160204 935\": Value 93 for hourOfDay must be in the range [0,23]", :config_parsers=>"YYYYMMdd Hmm", :config_locale=>"default=en_US"}

下面是出现上述错误时的代码片段。
ruby {
code => "
event.set( 'positioning', event.get('branch_lat') + ',' + event.get('branch_lon') )
event.set( 'report_datetime', event.get('report_date') + ' ' + event.get('report_time') )
"
}

# Set the @timestamp according to report_date and time
date {
"match" => ["report_datetime", "YYYYMMdd Hmm"]
}

我做了一些修改,最终得到了我最初发布的代码。

最佳答案

我建议不使用ruby过滤器就这样做:

filter {
# your other filters...

# if 3-digit hours, pad the time with one zero
if [time] =~ /^\d{3}$/ {
mutate {
add_field => { "report_datetime" => "%{date} 0%{time}" }
}
# otherwise just concat the fields
} else {
mutate {
add_field => { "report_datetime" => "%{date} %{time}" }
}
}

# match date and time
date {
"match" => ["report_datetime", "yyyyMMdd HHmm"]
"target" => "report_datetime"
}
}

关于ruby - 如何格式化logstash中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40297645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com