Skip to content

Commit

Permalink
Fix processor failure in Filebeat when using regex, contain, or equals (
Browse files Browse the repository at this point in the history
#2209)

When using any of those conditions with the `message` field in Filebeat a warning would occur and no processor would be applied. The warning message was:

    WARN unexpected type *string in contains condition as it accepts only strings.

This occurred because Filebeat was passing the message field as a *string (string pointer). The processor code only expected to receive string values.

This PR contains three changes:

- Enhance the processor code to accept *string and string.
- Make filebeat pass the message field as a string rather than *string.
- Modify a test case to work against the message field rather than the source field.

Fixes #2178
  • Loading branch information
andrewkroh authored and ruflin committed Aug 10, 2016
1 parent 157e039 commit 0725db1
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ https://github.com/elastic/beats/compare/v5.0.0-alpha5...master[Check the HEAD d
*Topbeat*

*Filebeat*
- Fix processor failure in Filebeat when using regex, contain, or equals with the message field. {issue}2178[2178]

*Winlogbeat*

Expand Down
4 changes: 2 additions & 2 deletions filebeat/input/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ func (f *Event) ToMapStr() common.MapStr {

if f.JSONConfig != nil && len(f.JSONFields) > 0 {
mergeJSONFields(f, event)
} else {
event["message"] = f.Text
} else if f.Text != nil {
event["message"] = *f.Text
}

return event
Expand Down
2 changes: 1 addition & 1 deletion filebeat/tests/system/test_processors.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def test_condition(self):
path=os.path.abspath(self.working_dir) + "/test*.log",
processors=[{
"drop_event": {
"when": "not.contains.source: test",
"when": "not.contains.message: test",
},
}]
)
Expand Down
6 changes: 4 additions & 2 deletions libbeat/processors/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,10 @@ func extractInt(unk interface{}) (uint64, error) {
func extractString(unk interface{}) (string, error) {
switch s := unk.(type) {
case string:
return string(s), nil
return s, nil
case *string:
return *s, nil
default:
return "", fmt.Errorf("unkown type %T passed to extractString", unk)
return "", fmt.Errorf("unknown type %T passed to extractString", unk)
}
}
23 changes: 23 additions & 0 deletions libbeat/processors/config_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package processors

import (
"testing"

"github.com/stretchr/testify/assert"
)

func TestExtractString(t *testing.T) {
input := "test"

v, err := extractString(input)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, input, v)

v, err = extractString(&input)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, input, v)
}

0 comments on commit 0725db1

Please sign in to comment.