Commit 1a773b0
authored
in_forward: enable skip_invalid_event by default (#5003)
**Which issue(s) this PR fixes**:
Fixes #
**What this PR does / why we need it**:
This PR will enable `skip_invalid_event` in `in_forward` by default.
If broken data is received for any reason, it may cause the following
error.
```
2025-06-12 18:27:30 +0900 [error]: unexpected error on reading data host="127.0.0.1" port=55970 error_class=TypeError error="can't convert String into an exact number"
2025-06-12 18:27:30 +0900 [error]: <internal:timev>:325:in 'Time.at'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/formatter_stdout.rb:42:in 'Fluent::Plugin::StdoutFormatter#format'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/out_stdout.rb:67:in 'Fluent::Plugin::StdoutOutput#format'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/out_stdout.rb:60:in 'block in Fluent::Plugin::StdoutOutput#process'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/event.rb:259:in 'block in Fluent::MessagePackEventStream#each'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/event.rb:258:in 'Array#each'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/event.rb:258:in 'Enumerable#each_with_index'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/event.rb:258:in 'Fluent::MessagePackEventStream#each'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/out_stdout.rb:59:in 'Fluent::Plugin::StdoutOutput#process'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/output.rb:865:in 'emit_sync'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/event_router.rb:115:in 'Fluent::EventRouter#emit_stream'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/in_forward.rb:329:in 'Fluent::Plugin::ForwardInput#on_message'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/in_forward.rb:226:in 'block in Fluent::Plugin::ForwardInput#handle_connection'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/in_forward.rb:263:in 'block (3 levels) in Fluent::Plugin::ForwardInput#read_messages'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/in_forward.rb:262:in 'MessagePack::Unpacker#feed_each'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/in_forward.rb:262:in 'block (2 levels) in Fluent::Plugin::ForwardInput#read_messages'
2025-06-12 18:27:30 +0900 [error]: /Users/watson/src/fluentd/lib/fluent/plugin/in_forward.rb:273:in 'block in Fluent::Plugin::ForwardInput#read_messages'
...
```
When enable `skip_invalid_event`, the broken data are just skipped.
```
2025-06-18 11:16:40 +0900 [info]: #0 fluentd worker is now running worker=0
2025-06-18 11:16:49 +0900 [warn]: #0 skip invalid event: host="127.0.0.1" tag="incoming" time=-17 record=nil
2025-06-18 11:16:49 +0900 [warn]: #0 skip invalid event: host="127.0.0.1" tag="incoming" time="\xBD\uFFFD\u0000hR \uFFFD:`uN\uFFFD\uFFFDmessage\uFFFD" record=nil
2025-06-18 11:16:49 +0900 [warn]: #0 skip invalid event: host="127.0.0.1" tag="incoming" time=50 record=nil
2025-06-18 11:16:49 +0900 [warn]: #0 skip invalid event: host="127.0.0.1" tag="incoming" time=97 record=nil
...
```
And, when `require_ack_response` was configured to `true` in
out_forward,
1. in_forward causes `error_class=TypeError error="can't convert String
into an exact number"` error by broken data.
2. in_forward can't sent the ack response by above error.
3. out_forward causes
`error_class=Fluent::Plugin::ForwardOutput::NoNodesAvailable error="no
nodes are available"` error because in_forward doesn't send the ack
response.
4. out_forward will retry to send broken data.
5. back to `1.`
in_forward and out_forward will repeat errors and retries indefinitely.
If `skip_invalid_event` was configured to `true` in in_forward,
in_forward doesn't cause the error by broken data,
in_forward and out_forward don't repeat errors and retries.
So, Fluentd will be more stable by enabled `skip_invalid_event`.
### About performance degradation
It shows the processing time of `in_forward` when receiving 1 GB of
data.
* with `skip_invalid_event false`
* 15.178013304 sec
* with `skip_invalid_event true`
* 15.859435514 sec
Even when skip_invalid_event was enabled, I think the performance
degradation was minimal.
**Docs Changes**:
fluent/fluentd-docs-gitbook#587
**Release Note**:
Same as the title.
Signed-off-by: Shizuo Fujita <fujita@clear-code.com>1 parent 619e6b0 commit 1a773b0
File tree
3 files changed
+4
-10
lines changed- lib/fluent/plugin
- test/plugin
3 files changed
+4
-10
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
| 58 | + | |
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
580 | 580 | | |
581 | 581 | | |
582 | 582 | | |
583 | | - | |
584 | | - | |
585 | | - | |
586 | 583 | | |
587 | 584 | | |
588 | 585 | | |
| |||
604 | 601 | | |
605 | 602 | | |
606 | 603 | | |
607 | | - | |
| 604 | + | |
608 | 605 | | |
609 | 606 | | |
610 | 607 | | |
611 | | - | |
612 | | - | |
613 | | - | |
614 | 608 | | |
615 | 609 | | |
616 | 610 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
541 | 541 | | |
542 | 542 | | |
543 | 543 | | |
544 | | - | |
| 544 | + | |
545 | 545 | | |
546 | 546 | | |
547 | 547 | | |
| |||
571 | 571 | | |
572 | 572 | | |
573 | 573 | | |
574 | | - | |
| 574 | + | |
575 | 575 | | |
576 | 576 | | |
577 | 577 | | |
| |||
0 commit comments