Fluentd

multiline

The multiline parser plugin parses multiline logs. This plugin is the multiline version of regexp parser.

The multiline parser parses log with formatN and format_firstline parameters. format_firstline is for detecting the start line of the multiline log. formatN, where N's range is [1..20], is the list of Regexp format for multiline log.

This parser plugin itself does not join multiple lines. The logic to buffer lines and detect the start of each record is implemented in in_tail.

  • <parse> in in_tail: works as described in this article.
  • <parse> section under <filter> (filter_parser) and other plugins which receive already-split events: cannot join separate events into one record. It can only parse a value which already contains newline characters.

To concatenate multiple events into one record after the input stage, use fluent-plugin-concat.

Parameters

See Parse Section Configurations.

format_firstline

Specifies the regexp pattern for the start line of multiple lines. Input plugin can skip the logs until format_firstline is matched. Default is nil.

If format_firstline is not specified, the input plugin should store the unmatched new lines in the temporary buffer and try to match the buffered logs with each new line.

formatN

type default version
regexp required parameter 0.14.0

It is a required parameter.

Specifies the regexp patterns. For readability, you can separate the regexp patterns into multiple formatN parameters. See the Rails Log's example below. These patterns are joined and then construct a regexp pattern with multiline mode.

unmatched_lines

type default version
string nil 1.9.3

If set, the lines which do not match the patterns are emitted as a record with the unmatched_line field instead of being discarded.

With in_tail, this parameter is overwritten by the value of emit_unmatched_lines. Set emit_unmatched_lines on in_tail instead of setting this parameter in the <parse> section.

Example

Rails Log

With this configuration:

<parse>
  @type multiline
  format_firstline /^Started/
  format1 /Started (?<method>[^ ]+) "(?<path>[^"]+)" for (?<host>[^ ]+) at (?<time>[^ ]+ [^ ]+ [^ ]+)\n/
  format2 /Processing by (?<controller>[^\u0023]+)\u0023(?<controller_method>[^ ]+) as (?<format>[^ ]+?)\n/
  format3 /(  Parameters: (?<parameters>[^ ]+)\n)?/
  format4 /  Rendered (?<template>[^ ]+) within (?<layout>.+) \([\d\.]+ms\)\n/
  format5 /Completed (?<code>[^ ]+) [^ ]+ in (?<runtime>[\d\.]+)ms \(Views: (?<view_runtime>[\d\.]+)ms \| ActiveRecord: (?<ar_runtime>[\d\.]+)ms\)/
</parse>

This incoming event:

Started GET "/users/123/" for 127.0.0.1 at 2013-06-14 12:00:11 +0900
Processing by UsersController#show as HTML
  Parameters: {"user_id"=>"123"}
  Rendered users/show.html.erb within layouts/application (0.3ms)
Completed 200 OK in 4ms (Views: 3.2ms | ActiveRecord: 0.0ms)

is parsed as:

time:
1371178811 (2013-06-14 12:00:11 +0900)

record:
{
  "method"           :"GET",
  "path"             :"/users/123/",
  "host"             :"127.0.0.1",
  "controller"       :"UsersController",
  "controller_method":"show",
  "format"           :"HTML",
  "parameters"       :"{ \"user_id\":\"123\"}",
  ...
}

Java Stacktrace Log

With this configuration:

<parse>
  @type multiline
  format_firstline /\d{4}-\d{1,2}-\d{1,2}/
  format1 /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>.*)\] (?<level>[^\s]+)(?<message>.*)/
</parse>

These incoming events:

2013-3-03 14:27:33 [main] INFO  Main - Start
2013-3-03 14:27:33 [main] ERROR Main - Exception
javax.management.RuntimeErrorException: null
    at Main.main(Main.java:16) ~[bin/:na]
2013-3-03 14:27:33 [main] INFO  Main - End

are parsed as:

time:
2013-03-03 14:27:33 +0900
record:
{
  "thread" :"main",
  "level"  :"INFO",
  "message":"  Main - Start"
}

time:
2013-03-03 14:27:33 +0900
record:
{
  "thread" :"main",
  "level"  :"ERROR",
  "message":" Main - Exception\njavax.management.RuntimeErrorException: null\n    at Main.main(Main.java:16) ~[bin/:na]"
}

time:
2013-03-03 14:27:33 +0900
record:
{
  "thread" :"main",
  "level"  :"INFO",
  "message":"  Main - End"
}

results matching ""

    No results matching ""