Hi; I'm currently running a Logstash server in which I receive messages from various sources. I'd like to find out the the approximate byte-count of each incoming message and attach this as a @metadata field, so I can drop excessively large messages, and monitor the approximate size of incoming messages.
Is this possible to implement using the ruby filter? I tried
code => "event['message_size'] = event.message.length
but it didn't work, as message seems to be an object not a string.
Any help would be appreciated.
code => "event['message_size'] = event.message.length
Change to:
code => "event['message_size'] = event['message'].length"
1 Like
Thanks for the reply; I tried that variant of the code in my filter block
ruby {
code => "event['message_size'] = event['message'].length"
}
but each message was labelled with a _rubyexception tag, and no message length field.
Just to note, I'm using the version of Logstash that is released on the Ubuntu PPA
Your logs should contain more information about the Ruby exception.
Thanks, I didn't actually know Ruby exceptions were stored in logstash.log
{:timestamp=>"2016-09-01T15:48:49.535000+0100", :message=>"Ruby exception occurred: undefined method `length' for nil:NilClass", :level=>:error}
I get an error essentially saying that the event-message is null, which is strange (I hope this isn't turning into a bug report!)
This indeed indicates that the message
field is unset.
1 Like
I can't believe the cause of the error was this simple; I just added a check that the message is defined, and everything worked perfectly.
if event['message']
event['message_size'] = event['message'].length
end
I appreciate the help fixing this problem