Ответ
В практике DevOps мы сталкиваемся с несколькими типовыми причинами, помимо нехватки места:
-
Исчерпание лимита inode (
df -i): Файловая система хранит метаданные о каждом файле (inode). Если inode закончились, создать новый файл (в том числе лог) невозможно, даже при свободном гигабайтах. Частая проблема для файловых систем, созданных с малым количеством inode, или в директориях с миллионами мелких файлов. -
Нет прав на запись: Процесс приложения (и его пользователь, например,
appuser) должен иметь праваrwна целевую директорию и право на создание файлов (wx).# Проверка $ namei -l /var/log/myapp/ $ sudo -u appuser touch /var/log/myapp/test.log -
Некорректный путь или конфигурация логгера: Опечатка в пути в конфиге приложения (например,
/va/log/myappвместо/var/log/myapp) или отключенный appender в настройках (logback.xml, log4j2.properties). -
Жесткая ссылка (hard link) или точка монтирования: Целевой путь может быть жесткой ссылкой, ведущей в никуда, или точкой монтирования, которая не была смонтирована (например, отдельный volume для логов в Docker/K8s).
$ ls -la /var/log/myapp # Проверить, не является ли это ссылкой $ mount | grep /var/log/myapp # Проверить монтирование -
Сессия или демон не перезапущен: Приложение могло закэшировать старую конфигурацию логирования. После изменения конфига необходим graceful restart (например,
systemctl reload myappилиkill -HUP <PID>).
Подход к диагностике: Я начинаю с проверки прав и inode, затем смотрю логи системного демона (journalctl) или stdout/stderr контейнера (docker logs, kubectl logs), чтобы увидеть ошибки инициализации логгера. Далее проверяю актуальность конфигурации и перезапускаю сервис.