Uh oh!
There was an error while loading. Please reload this page.
Add warning for directory permission to in_tail.rb - #4865
Conversation
Uh oh!
There was an error while loading. Please reload this page.
moatom
commented
Mar 17, 2025
https://github.com/fluent/fluentd/actions/runs/13865592763/job/38858881719?pr=4865#step:6:13416 👀 |
daipom
commented
Mar 17, 2025
@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. |
daipom
commented
Mar 17, 2025
I see. In some cases, If the directory does not have the |
daipom
commented
Mar 17, 2025
@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. |
daipom
commented
Mar 18, 2025
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! |
moatom
commented
Mar 21, 2025
I might have missed cases where logs are emitted only at the debug level: |
5de5a2e to
009d270CompareUh oh!
There was an error while loading. Please reload this page.
daipom
commented
Mar 25, 2025
@moatom
If there are not enough permissions for the directory, |
daipom
commented
Mar 28, 2025
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:合計 12drwxrwx--- 2 root root 4096 3月 28 13:47 d---drwxrwx--x 2 root root 4096 3月 28 13:47 d--xdrwxrwxr-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--.logLet 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
|
moatom
commented
Apr 6, 2025
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 |
daipom
commented
Apr 15, 2025
@moatom Thanks! Excellent! This direction looks good to me!
Sqush would be good!
Do you mean the case where we just specify |
daipom
left a comment
There was a problem hiding this comment.
I have commented on some minor points.
Please check them!
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
moatom
commented
Apr 17, 2025
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. |
Uh oh!
There was an error while loading. Please reload this page.
moatom
commented
Apr 18, 2025
@daipom |
daipom
commented
Apr 24, 2025
Thanks! Sorry for the delay, I am seeing this. Please wait some more. |
Uh oh!
There was an error while loading. Please reload this page.
daipom
commented
Apr 28, 2025
The Windows CI failure is unrelated. |
daipom
left a comment
There was a problem hiding this comment.
@moatom
Sorry for the repeated reviews.
After we fix this, I think we can merge this!
Review points:
- The
logaccessor 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#logsto 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_shutdownmanually unless we callDriver#runwithshutdown: false.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Signed-off-by: Tomoaki Kobayashi <tomoaki.kobayashi.t3@alumni.tohoku.ac.jp>
moatom
commented
May 1, 2025
No problem at all. I really appreciate your prompt responses!
I've fixed the points. Could you confirm at your convenience? |
daipom
left a comment
There was a problem hiding this comment.
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.