Nginx журналы в обоих файлах, а также docker сборщик журналов - PullRequest
0 голосов
/ 27 февраля 2020

Я развертываю контейнер Nginx и в стандартных Dockerfile журналы перенаправляются в журналы контейнеров с этими командами

RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

Если я удаляю вышеупомянутые команды, то журналы записываются в access.log и error.log файлы, как и ожидалось. Как я могу хранить журналы в файлах, а также отправлять их в журналы контейнеров?

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

1- Команда ниже не перенаправляет содержимое /var/log/nginx/access.log в /dev/stdout, вместо этого она создала символическую ссылку от /dev/stdout до /var/log/nginx/access.log. Другими словами, /var/log/nginx/access.log это просто символическая ссылка.

ln -sf /dev/stdout /var/log/nginx/access.log
# ls -alh /var/log/nginx/access.log
lrwxrwxrwx 1 root root 11 Nov 23 01:12 /var/log/nginx/access.log -> /dev/stdout

2 - Хранение файлов в контейнерах docker вообще не рекомендуется по двум причинам. Во-первых, файлы будут потеряны после повторного создания контейнеров. Во-вторых, файлы могут вырасти до огромных размеров, особенно если для этих файлов нет ротации журналов. Вместо того, чтобы хранить копию внутри контейнера, вы можете использовать FluentD или настроить docker для пересылки журналов на внешний сервер или в файл на хост-узле.

0 голосов
/ 27 февраля 2020

Вы можете попробовать, разрешив записывать логи в файл, а затем привязав файл к точке входа.

tail -f /var/log/nginx/access.log / var / log / nginx / error.log

...