Quantcast
Channel: Active questions tagged dockerfile - DevOps Stack Exchange
Viewing all articles
Browse latest Browse all 144

Fluentd is not detecting the .log buffer files. Hence it is not able to flush/purge them to a output file

$
0
0

I have my django application proxied with nginx and using fluentd(logging solution) to collect the logs written by nginx and just write them to a output file. I am using docker images for nginx and for fluentd both composed in a same file(Hence both share same network i.e, bridge)

The problem is fluentd is not appending the new logs to the output file continously as the activity is logged in the nginx log file. When i checked the logs of fluentd container I found out this error for many buffer files

2025-03-14 10:55:15 +0530 [warn]: #0 failed to flush the buffer. retry_times=1 next_retry_time=2025-03-14 10:55:17 +0530 chunk="63046a9b36189f2d58c2f1760b80336b" error_class=Errno::2025-03-14 10:55:15 +0530 [warn]: #0 failed to flush the buffer. retry_times=1 next_retry_time=2025-03-14 10:55:17 +0530 chunk="63046a9b36189f2d58c2f1760b80336b" error_class=Errno::ENOENT error="No such file or directory - fstat"  2025-03-14 10:55:15 +0530 [warn]: #0 suppressed same stacktrace  2025-03-14 10:55:15 +0530 [warn]: #0 suppressed same stacktrace

But when i checked in the container The .log buffer files are present and .log.meta files are referencing them properly but looks like docker is not detecting then So they are not being flushed out. But when i restart docker container using docker restart fluentd the new logs are appended but this time fluentd is trying to delete the appended buffer files and is giving the same error_class=Errno::ENOENT error="No such file or directory - fstat" I have everything configured correctly in docker-compose.yaml as well as in fluend.conf I you want them i will provide their code as well. And let me tell you the fluentd has all permissions for the file_logs folder so it can write read and detele from the folder.

Fluentd.conf

<source>  @type tail  format json  read_from_head false  tag nginx.access  path /fluentd/log/files/access.log    pos_file /fluentd/log/fluentd.pos  </source><match nginx.access>  @type file  path /fluentd/file_logs/nginx_access.log  chunk_limit_size 16  append true  <buffer>    @type file    path /fluentd/file_logs/nginx_access_buffer      flush_mode immediate</buffer></match>

docker-compose.yaml

services:  nginx:    image: nginx    container_name: nginx    ports:      - "80:80"    volumes:      - ./nginx/nginx.conf:/etc/nginx/nginx.conf      - ./nginx/logs:/var/log/nginx      restart: unless-stopped  fluentd:    build:      context: ./fluentd    image: fluentd-custom     container_name: fluentd    user: root      volumes:      - ./fluentd/fluentd.conf:/fluentd/etc/fluent.conf        - ./nginx/logs:/fluentd/log/files        - ./fluentd/file_logs:/fluentd/file_logs        - ./fluentd/file_logs/nginx_access_buffer:/fluentd/file_logs/nginx_access_buffer    ports:      - "24224:24224"    restart: unless-stopped    depends_on:      - nginx    environment:      - TZ=Asia/Kolkata

**Why is this happening? What is the issue?**

One thing I forgot to mention is I used a custom image of fluentd and it's dockerfile code is given below

# Use the official Fluentd image as the baseFROM fluent/fluentd:v1.15-debian-1# Switch to root user for installing dependenciesUSER root# Install necessary system dependenciesRUN apt-get update && apt-get install -y build-essential ruby-dev# Install required Fluentd pluginsRUN gem install \    fluent-plugin-parser \    fluent-plugin-rewrite-tag-filter \    fluent-plugin-prometheus # Copy the custom Fluentd configuration fileCOPY fluentd.conf /fluentd/etc/fluentd.conf# Ensure correct permissions for Fluentd directoriesRUN mkdir -p /fluentd/log && \    chown -R fluent:fluent /fluentd /fluentd/etc /fluentd/log# Switch back to the default Fluentd userUSER fluent# Start FluentdCMD ["fluentd", "-c", "/fluentd/etc/fluentd.conf"]

I tried changing the chunk_limit_size in conf file and reducing it thinking that it will flush more quickly as the limit is reached quickly But it didn't work as the fluentd is not detecting the buffer files itself it is unable to flush them an i am getting same ENOENT errorI have also tried giving permission to the fluentd manually to that folder and run the command chmod -R 777 ./fluentd/file_logs/nginx_access_buffer but it is still giving the same error for the .log buffer files which are being referenced by .log.meta files

And also I have tried deleting all buffer files and restarting the container and If I did so then it is restarting and old logs-if exists when I didn't delete- are appended to the output file. But if they don't exist then too the container is restarting But the problem is, when I do any activity in the site that creates logs in nginx and fluentd collects them and then ideally it has to output them to output file But I am facing the same issue again Which is ENONET error


Viewing all articles
Browse latest Browse all 144

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>