如何在HEKA的PayloadRegexDecoder中使用整数类型

时间:2015-05-25 15:07:58

标签: parsing elasticsearch integer

我正在尝试使用HEKA(而不是logstash)来使用日志解析器来插入Elasticsearch。 这时,我使用PayloadRegexDecoder来分割每个字段。

除了整数类型外,大多数配置都按预期工作。

输入日志字符串

May 4 13:01:04 db1 monitoring: 2015-05-04T13:01:01Z 174.35.6.22 aaaa bbbb 111

这是我的HEKA示例配置。

[fdb]
type = "PayloadRegexDecoder"
match_regex = '^(?P<month>.+?) (?P<day>.+?) (?P<time>.+?) (?P<remote_user>.+?) monitoring: (?P<Timestamp>.+?) (?P<ip>.+?) (?P<a>.+?) (?P<b>.+?) (?P<int_test>\d+)'

[fdb.message_fields]
Type = "f_monitoring"
month = "%month%"
day = "%day%"
time = "%time%"
remote_user = "%remote_user%"
ip|ipv4 = "%ip%"
a = "%a%"
b = "%b%"
int_test|B = "%int_test%"`

这是此设置的结果。

:Timestamp: 2015-05-04 13:01:01 +0000 UTC
:Type: f_monitoring
:Hostname: 
:Pid: 0
:Uuid: b824d53c-7d7e-4424-a123-780aa37bf879
:Logger: UdpInput
:Payload: May 4 13:01:04 db1 monitoring: 2015-05-04T13:01:01Z 174.35.6.22 aaaa bbbb 111
:EnvVersion: 
:Severity: 7
:Fields:
   | name:"int_test" type:string value:"111" representation:"B"
   | name:"a" type:string value:"aaaa"
   | name:"time" type:string value:"13:01:04"
   | name:"b" type:string value:"bbbb"
   | name:"ip" type:string value:"174.35.6.22" representation:"ipv4"
   | name:"day" type:string value:"4"
   | name:"remote_user" type:string value:"db1"
   | name:"month" type:string value:"May"

我想知道如何将int_test的类型从string更改为integer或double。

1 个答案:

答案 0 :(得分:0)

据我所知,你不能。查看其源代码,正则表达式匹配的值始终为字符串。你可以改变表示,但我不知道这会改变什么。

你可以做的是添加一个lua解码器。我不认为您可以从邮件中删除字段。因此,您必须将邮件的副本拉入lua,转换字段,然后发回变异的邮件。

这里是lua代码的大纲(未经测试):

function process_message ()
    local mutableMessageCopy = decode_message(read_message("raw"))
    mutableMessageCopy.Fields.int_test = tonumber(mutableMessageCopy.Fields.int_test)
    inject_message(msg)
    return 0
end

如果您将lua文件命名为convertint.lua,那么您将添加到配置中。您还必须更新输入以使用&#34; chain_fbp&#34;而不是&#34; fbp&#34;:

[chain_fbp]
type = "MultiDecoder"
subs = ['fbp', 'convert_to_integer']
cascade_strategy = "all"

[convert_to_integer]
type = "SandboxDecoder"
filename = "/absolute/path/to/the/lua/code/convertint.lua"