На нашем хосте установлен стек LEMP, а значит веб сервером является NGINX. Для успешного решения проблем возникающих в процессе эксплуатации NGINX нам потребуется часто работать с логами веб сервера. По умолчанию место, где NGINX хранит логи это директория /var/log/nginx/ В ней вы найдете следующие два файла, для подключений и ошибок соответственно:/var/log/nginx/access.log
/var/log/nginx/error.log
Держать все логи в одном файле не удобно, особенно если ваш веб сервер обслуживает одновременно несколько сайтов. Небольшая настройка логов NGINX сейчас сильно упростит нам дальнейшую работу с ними. Создадим отдельную директорию под логи каждого сайта, который обслуживает веб сервер. В нашем случае пример тривиальный, так как сайт один:mkdir /var/log/nginx/waky.ru
Теперь внесем изменения в настройки NGINX для нашего домена. Напомню, у нас для каждого сайта задан отдельный конфиг файл. Отредактируем файл в текстовом редакторе:vi /etc/nginx/conf.d/waky.ru.conf
Добавим с помощью текстового редактора следующие две строки в верхней части файла, например после директивы root:access_log "/var/log/nginx/waky.ru/access.log";
error_log "/var/log/nginx/waky.ru/error.log";
Получим следующий вид:
server {
listen 80;
...
root /usr/share/nginx/waky.ru;
access_log "/var/log/nginx/waky.ru/access.log";
error_log "/var/log/nginx/waky.ru/error.log";
include /etc/nginx/default.d/*.conf;
...
}
server {
listen 443 ssl http2;
...
root /usr/share/nginx/waky.ru;
access_log "/var/log/nginx/waky.ru/access.log";
error_log "/var/log/nginx/waky.ru/error.log";
include /etc/nginx/default.d/*.conf;
...
}
Проверяем конфигурацию и перезапускаем NGINX:
[root@waky ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@waky ~]# nginx -s reload
Новые файлы логов сразу появились в отдельной директории:
[root@waky ~]# ll /var/log/nginx/waky.ru
total 0
-rw-r--r-- 1 root root 0 Mar 17 08:01 access.log
-rw-r--r-- 1 root root 0 Mar 17 08:01 error.log
Теперь настроем ротацию логов NGINX. В прошлый раз мы настроили общую ротацию с помощью logrotate, сегодня позаботимся о конкретном сервисе. Настройки logrotate для отдельных сервисов находятся в директории /etc/logrotate.d/
Отредактируем файл конфигурации для NGINX:vi /etc/logrotate.d/nginx
Приведем его к следующему виду:
/var/log/nginx/*.log
/var/log/nginx/*/*.log
{
create 0640 nginx root
daily
dateext
rotate 30
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/bin/kill -USR1 cat /run/nginx.pid 2>/dev/null 2>/dev/null || true
endscript
}
Первые две строки определяют локацию логов, это * любой файл с расширением .log внутри директории /var/log/nginx/ и внутри * любой директории /var/log/nginx/*/
Под данное правило попадает и директория с логами нашего сайта, которую мы ранее создали /var/log/nginx/waky.ru
create 0640 nginx root — создает новый файл при ротации, у нового файла права доступа устанавливаются по схеме 0640, владелец файла nginx, а группа root
daily — частота ротирования ежедневно
dateext — добавляет к названию сротированного файла дату
rotate 30 — количество хранимых лог файлов, для обычного сайта 30 дневных логов более чем достаточно
missingok — отсутствие лог файла не вызывает ошибки при ротации
notifempty — не ротировать пустой файл
compress — архивация старых логов
delaycompress — откладывает архивацию на одну итерацию
sharedscripts — скрипт из postrotate и endscript выполняется единожды, а не для каждого лог файла
postrotate/endscript — заключают в себе команду или скрипт для выполнения после ротации, в данном случае, убивает текущий процесс nginx, чтобы сменить файл, в который процесс пишет логи.
Мы настроили логи сервера NGINX и их ротацию. Для нашего сайта собираются логи в отдельную директорию, а имея под рукой набор из тридцати дневных файлов можно удобно анализировать логи.