-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Add warning for directory permission to in_tail.rb #4865
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
https://github.com/fluent/fluentd/actions/runs/13865592763/job/38858881719?pr=4865#step:6:13416
👀 |
@moatom Thanks for this PR! This test failure is a known test issue, so we don't need to care about it in this PR. |
I see. In some cases, If the directory does not have the |
@moatom
About A, it would be possible that this feature supports only static paths that do not use wildcards, etc. About B, I feel the essential difficulty of this issue. I don't think it necessarily needs to be strictly confirmed. For example, I want to avoid false positives, such as generating warning logs for paths that just do not yet exist. |
To avoid false positives, we can consider the following direction for example.
fluentd/lib/fluent/plugin/in_tail.rb Lines 372 to 374 in e3dcebc
Log message:
(This supports only static paths that do not use wildcards, etc.) |
@daipom Thanks for the review and I'm sorry for my late response🙇
Oops. I thought the required permission was
The following part seems to expand the glob, so I believe this issue shouldn't occur (if my understanding is correct):
I am polishing my idea as follows: Experienced users are the ones who primarily use complex paths, and they are likely to manage to notice issues on their own. Therefore, in this PR, I would like to focus on adding a warning for the following simple case (if glob expansion does not occur, I want to ignore such cases): where
For this specific case, the ideal conditions for generating warnings can be summarized in the following table:
We are concerned about false positives for
I agree with this direction if the above approach is not effective! |
I might have missed cases where logs are emitted only at the debug level: |
5de5a2e
to
009d270
Compare
@moatom
If there are not enough permissions for the directory, |
This would be no problem!
Yes. False positives are my concern.
If it is difficult to resolve this false positive, let's go in this direction. I explain specific examples of the false positive below. CaseFor example, consider the following case. $ sudo ls -lR /tmp/2
/tmp/2:
合計 12
drwxrwx--- 2 root root 4096 3月 28 13:47 d---
drwxrwx--x 2 root root 4096 3月 28 13:47 d--x
drwxrwxr-x 2 root root 4096 3月 28 13:46 dr-x
/tmp/2/d---:
合計 8
-rw-r----- 1 root root 6 3月 28 13:47 file_---.log
-rw-r--r-- 1 root root 5 3月 28 13:47 file_r--.log
/tmp/2/d--x:
合計 8
-rw-r----- 1 root root 6 3月 28 13:47 file_---.log
-rw-r--r-- 1 root root 5 3月 28 13:47 file_r--.log
/tmp/2/dr-x:
合計 8
-rw-rw---- 1 root root 6 3月 28 13:46 file_---.log
-rw-rw-r-- 1 root root 5 3月 28 13:37 file_r--.log Let in_tail collect these 6 patterns and non-existent path (totally 7 paths). <source>
@type tail
tag test
path /tmp/2/dr-x/file_r--.log, /tmp/2/dr-x/file_---.log, /tmp/2/d--x/file_r--.log, /tmp/2/d--x/file_---.log, /tmp/2/d---/file_r--.log, /tmp/2/d---/file_---.log, /tmp/2/not_exist/test.log
read_from_head true
refresh_interval 5s
<parse>
@type none
</parse>
</source>
<match test.**>
@type stdout
</match> Result: master
Result: PR
|
Thanks for explaining the case! I'm thinking it might work if I switch the traversal direction in the code above to top-down instead. |
@daipom P.S. I'm not sure, but it might be a false negative when even Result: Latest PR<source>
@type tail
tag test
path /tmp/2/dr-x/file_r--.log, /tmp/2/dr-x/file_---.log, /tmp/2/d--x/file_r--.log, /tmp/2/d--x/file_---.log, /tmp/2/d---/file_r--.log, /tmp/2/d---/file_---.log, /tmp/2/not_exist/test.log
pos_file /tmp/fluentd-test.pos
read_from_head true
refresh_interval 5s
<parse>
@type none
</parse>
</source>
<match test.**>
@type stdout
</match>
$ sudo ls -lR /tmp/2
/tmp/2:
total 12
drwxrwx--- 2 root root 4096 Apr 11 14:09 d---
drwxrwx--x 2 root root 4096 Apr 11 14:09 d--x
drwxrwxr-x 2 root root 4096 Apr 11 14:09 dr-x
/tmp/2/d---:
total 8
-rw-r----- 1 root root 5 Apr 11 14:11 file_---.log
-rw-r--r-- 1 root root 5 Apr 11 14:11 file_r--.log
/tmp/2/d--x:
total 8
-rw-r----- 1 root root 5 Apr 11 14:11 file_---.log
-rw-r--r-- 1 root root 5 Apr 11 14:11 file_r--.log
/tmp/2/dr-x:
total 8
-rw-rw---- 1 root root 5 Apr 11 14:11 file_---.log
-rw-rw-r-- 1 root root 5 Apr 11 14:11 file_r--.log
$ bundle exec fluentd -c in_tail.conf
025-04-11 15:44:22 +0000 [warn]: #0 Skip /tmp/2/d---/file_r--.log because '/tmp/2/d---' lacks execute permission.
2025-04-11 15:44:22 +0000 [warn]: #0 Skip /tmp/2/d---/file_---.log because '/tmp/2/d---' lacks execute permission.
2025-04-11 15:44:22 +0000 [info]: #0 following tail of /tmp/2/dr-x/file_r--.log
2025-04-11 15:44:22.441945749 +0000 test: {"message":"test"}
2025-04-11 15:44:22 +0000 [info]: #0 following tail of /tmp/2/dr-x/file_---.log
2025-04-11 15:44:22 +0000 [warn]: #0 Permission denied @ rb_sysopen - /tmp/2/dr-x/file_---.log
2025-04-11 15:44:22 +0000 [info]: #0 following tail of /tmp/2/d--x/file_r--.log
2025-04-11 15:44:22.442540302 +0000 test: {"message":"test"}
2025-04-11 15:44:22 +0000 [info]: #0 following tail of /tmp/2/d--x/file_---.log
2025-04-11 15:44:22 +0000 [warn]: #0 Permission denied @ rb_sysopen - /tmp/2/d--x/file_---.log |
@moatom Thanks! Excellent! This direction looks good to me!
Sqush would be good!
Do you mean the case where we just specify |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have commented on some minor points.
Please check them!
I was referring to the case where the path is In my PR, the logic relies on finding the first directory in the path hierarchy for which This scenario is rare and it’s unclear whether such a case should be officially supported. |
@daipom |
Thanks! Sorry for the delay, I am seeing this. Please wait some more. |
The Windows CI failure is unrelated. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@moatom
Sorry for the repeated reviews.
After we fix this, I think we can merge this!
Review points:
- The
log
accessor is provided for plugin class, so we should use it in plugin implementations.- We should not use the global logger in plugins. Some existing codes are wrong... 😢
- Sorry I didn't notice this before.
- In tests, we can use
Driver#logs
to get the logs.- If the plugin uses the global logger, this cannot be used.
- We want to avoid using the global logger for tests as much as possible.
- We don't need to call
Driver#instance_shutdown
manually unless we callDriver#run
withshutdown: false
.
Signed-off-by: Tomoaki Kobayashi <tomoaki.kobayashi.t3@alumni.tohoku.ac.jp>
No problem at all. I really appreciate your prompt responses!
I've fixed the points. Could you confirm at your convenience? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! Thanks so much for this improvement!
Which issue(s) this PR fixes:
Fixes #What this PR does / why we need it:
This PR provides a warning for typical configuration mistakes that prevent log transfer from starting.
When using the tail type as a source, it is common for directories with inappropriate partitions to be mistakenly included in the source path.
In my opinion, it would be preferable to issue a warning in such cases to help users avoid these mistakes.
Steps to Reproduce:
Docs Changes:
No documentation changes required.
Release Note:
in_tail: add warning for directory permission.