Closed
Description
Describe the bug
SecondaryFileOutput
sometimes appends logs even when append false
in multiple threads or workers
Since SecondaryFileOutput
does not use any lock, race condition can occur.
Especially, this logic causes race condition issues in multiple threads or workers when append false
.
fluentd/lib/fluent/plugin/out_secondary_file.rb
Lines 118 to 129 in e58fd66
To Reproduce
Run the fluentd with the following config for about 1 minute.
Somehow make out_file
plugin's output error.
I fixed the code for debugging.
--- a/lib/fluent/plugin/out_file.rb
+++ b/lib/fluent/plugin/out_file.rb
@@ -200,6 +200,7 @@ module Fluent::Plugin
end
def write(chunk)
+ raise IOError, "for debug"
path = extract_placeholders(@path_template, chunk)
FileUtils.mkdir_p File.dirname(path), mode: @dir_perm
bundle exec fluentd -c fluent.conf
Then we can find some files where logs with different tags are mixed in the same file although the chunk-key was tag
and append
was false
.
2023-03-03T19:53:28+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:29+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:30+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:31+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:32+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:33+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:34+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:35+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:36+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:37+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:38+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:28+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:29+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:30+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:31+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:32+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:33+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:34+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:35+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:36+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:37+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:38+09:00 aaa.fuga.bbb {"message":"fuga"}
Expected behavior
Each chunk is separated into a file.
File-A
2023-03-03T19:53:28+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:29+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:30+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:31+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:32+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:33+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:34+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:35+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:36+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:37+09:00 aaa.hoge.bbb {"message":"hoge"}
2023-03-03T19:53:38+09:00 aaa.hoge.bbb {"message":"hoge"}
File-B
2023-03-03T19:53:28+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:29+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:30+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:31+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:32+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:33+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:34+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:35+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:36+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:37+09:00 aaa.fuga.bbb {"message":"fuga"}
2023-03-03T19:53:38+09:00 aaa.fuga.bbb {"message":"fuga"}
Your Environment
- Fluentd version: fluentd 1.15.3
- Operating system: Ubuntu 20.04.5 LTS (Focal Fossa)
- Kernel version: 5.15.0-60-generic
Your Configuration
<system>
workers 4
</system>
<source>
@type sample
tag aaa.hoge.bbb
sample {"message": "hoge"}
</source>
<source>
@type sample
tag aaa.fuga.bbb
sample {"message": "fuga"}
</source>
<source>
@type sample
tag aaa.foo.bbb
sample {"message": "foo"}
</source>
<match aaa.**>
@type file
path /test/fluentd/log/${tag}/fluentd.log
append true
<buffer tag>
@type file
path /test/fluentd/buffer
flush_mode interval
flush_interval 10s
retry_max_times 1
</buffer>
<secondary>
@type secondary_file
directory /test/fluentd/error/
append false
</secondary>
</match>
Your Error Log
Error logs are not related to this issue.
Additional context
No response
Metadata
Metadata
Assignees
Labels
No labels