grok
Parses messages into a structured format by attempting to apply a list of Grok expressions, the first expression to result in at least one value replaces the original message with a JSON object containing the values.
Type hints within patterns are respected, therefore with the pattern %\{WORD:first},%{INT:second:int}
and a payload of foo,1
the resulting payload would be \{"first":"foo","second":1}
.
Performance
This processor currently uses the Go RE2 regular expression engine, which is guaranteed to run in time linear to the size of the input. However, this property often makes it less performant than PCRE based implementations of grok. For more information, see https://swtch.com/~rsc/regexp/regexp1.html.
Examples
Grok can be used to parse unstructured logs such as VPC flow logs that look like this:
Into structured objects that look like this:
With the following config:
Fields
expressions
One or more Grok expressions to attempt against incoming messages. The first expression to match at least one value will be used to form a result.
Type: array
pattern_definitions
A map of pattern definitions that can be referenced within patterns
.
Type: object
Default: {}
pattern_paths
A list of paths to load Grok patterns from. This field supports wildcards, including super globs (double star).
Type: array
Default: []
named_captures_only
Whether to only capture values from named patterns.
Type: bool
Default: true
use_default_patterns
Whether to use a default set of patterns.
Type: bool
Default: true
remove_empty_values
Whether to remove values that are empty from the resulting structure.
Type: bool
Default: true
Default patterns
For summary of the default patterns on offer, see https://github.com/Jeffail/grok/blob/master/patterns.go#L5.