Here’s the whole lua file:

local l = require "lpeg"
local dt = require "date_time"
local sp = l.space

l.locale(l)

local pri = l.P"<" * l.Cg(l.R"09"^0, "pri") * l.P">"
local logtime = l.Cg(dt.build_strftime_grammar("%b %d %X"), "logtime") * sp
local hostname = l.Cg((1 - sp)^1, "hostname") * sp
local logname = l.Cg((1 - sp)^1, "logname") * sp
local message = l.Cg(l.P(1)^0, "message")
msg = pri * logtime * hostname * logname * message

stack = l.Ct(msg)

local msg_type = read_config("type")

local msg = {
    Timestamp   = nil,
    Type        = msg_type,
    Hostname    = nil,
    Payload     = nil,
    Fields      = nil
}

function process_message ()
    local log = read_message("Payload")
    local flds = stack:match(log)

    if not flds then return -1 end

    if flds.hostname then
        msg.Hostname = flds.hostname
        flds.hostname = nil
    end

    msg.Payload = log
    msg.Fields = flds

    if not pcall(inject_message, msg) then return -1 end
    return 0
end

I tried a few more things, but still seems to be failing. I’ll take a look at 
the rsyslog decoder, but I’m trying to learn how to do, rather than borrow :-)

- Justin

From: Heka on behalf of Michael Trinkala
Date: Thursday, October 22, 2015 at 11:37 AM
To: "[email protected]<mailto:[email protected]>"
Cc: heka
Subject: Re: [heka] Lua Decoder Parse Error

It is probably not the grammar failing, I am betting you return -1 somewhere 
else in the decoder.  Can you share the code?

Trink

On Wed, Oct 21, 2015 at 11:23 AM, Justin Vogt 
<[email protected]<mailto:[email protected]>> wrote:

Hello Heka Community,

I’m getting a weird error… I’ve written a custom decoder in Lua, and it works 
find when I test it on the LPEG grammar tester, but when I try to run it in 
Heka, I continually get a “Decoder error, failed parsing” message. I’ve tried 
just about everything I can think of and have been pulling my hair out to 
figure out the issue. Any help would be greatly appreciated!!


Here's the grammar

local l = require "lpeg"

local dt = require "date_time"

local sp = l.space

l.locale(l)

local pri = l.P"<" * lpeg.Cg(lpeg.R"09"^0, "pri") * lpeg.P">"

local logtime = l.Cg(dt.build_strftime_grammar("%b %d %X"), "logtime") * sp

local hostname = l.Cg((1 - sp)^1, "hostname") * sp

local logname = l.Cg((1 - sp)^1, "logname") * sp

local message = l.Cg(l.P(1)^0, "message")

msg = pri * logtime * hostname * logname * message

grammar = l.Ct(msg)


And a sample log line:

<14>Oct 16 02:26:17 node-85 keystone-all 192.168.0.2 - - [16/Oct/2015 02:26:17] 
"GET /v3/auth/tokens HTTP/1.1" 200 10162 0.125928


I can literally copy and paste the grammar out of the decoder and the log line 
from the failed parse message into the LPEG tester and it works.


Thanks in advance!

_______________________________________________
Heka mailing list
[email protected]<mailto:[email protected]>
https://mail.mozilla.org/listinfo/heka


_______________________________________________
Heka mailing list
[email protected]
https://mail.mozilla.org/listinfo/heka

Reply via email to