Now I’m not quite sure what I’m missing… I keep getting this error:

inject_message() could not encode protobuf - unsupported type: nil

I’m trying the bare minimum of msg here:

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 = {
Type        = msg_type,
Payload     = nil,
Fields      = nil
}

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

    if not fields then return -1 end

    msg.Payload = log
    msg.Fields = fields

    inject_message(msg)

    return 0
end


- Justin

From: Michael Trinkala
Date: Thursday, October 22, 2015 at 2:47 PM
To: Justin Vogt
Cc: "[email protected]<mailto:[email protected]>", heka
Subject: Re: [heka] Lua Decoder Parse Error

The code is failing on the inject_message line.  The message Fields table must 
follow this: 
https://hekad.readthedocs.org/en/latest/sandbox/index.html#lua-message-hash-based-field-structure
 schema.  Also, you could trap the error from the pcall and return it with the 
status code to avoid some of the confusion.

Trink

On Thu, Oct 22, 2015 at 11:59 AM, Vogt, Justin 
<[email protected]<mailto:[email protected]>> wrote:
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]><mailto:[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]><mailto:[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]><mailto:[email protected]<mailto:[email protected]>>
https://mail.mozilla.org/listinfo/heka


_______________________________________________
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