Настройка журналов ошибок и доступа Nginx

Настройка логирования Nginx

Nginx — это высокопроизводительный HTTP-сервер и обратный прокси-сервер с открытым исходным кодом, отвечающий за обработку нагрузки некоторых из крупнейших сайтов в Интернете. При управлении веб-серверами NGINX одной из наиболее частых задач, которые вам придётся выполнять, является проверка лог-файлов.

Знание того, как настраивать и читать журналы, очень полезно при устранении неполадок сервера или приложения, поскольку они предоставляют подробную отладочную информацию.

Nginx записывает записи своих событий в два типа журналов: журналы доступа и журналы ошибок. Журналы доступа содержат информацию о клиентских запросах, а журналы ошибок — информацию о проблемах сервера и приложений.

В этой статье описывается, как настраивать и читать журналы доступа и ошибок Nginx.

Настройка журнала доступа

При каждой обработке клиентского запроса Nginx генерирует новое событие в журнале доступа. Каждая запись о событии содержит временную метку и различную информацию о клиенте и запрошенном ресурсе. Журналы доступа могут показать местоположение посетителей, посещённую ими страницу, продолжительность их пребывания на странице и многое другое.

Директива log_format позволяет определить формат регистрируемых сообщений. Директива access_log включает и задаёт расположение файла журнала и используемый формат.

Самый простой синтаксис директивы access_log выглядит следующим образом:

 access_log log_file log_format ;

Где log_file — полный путь к файлу журнала, а log_format — формат, используемый файлом журнала.

Журнал доступа можно включить в блоке директив http , server или location .

По умолчанию журнал доступа глобально включен в директиве http внутри основного файла конфигурации Nginx.

/etc/nginx/nginx.conf

 http { ... access_log /var/log/nginx/access.log ; ... }

Для лучшей читаемости рекомендуется настроить отдельный файл журнала доступа для каждого блока сервера. Директива access_log , заданная в директиве server , переопределяет директиву http (более высокого уровня).

/etc/nginx/conf.d/domain.com.conf

 http { ... access_log /var/log/nginx/access.log ; ... server { server_name domain.com access_log /var/log/nginx/domain.access.log ; ... } }

Если формат журнала не указан, Nginx использует предопределенный комбинированный формат, который выглядит следующим образом:

 log_format combined ' $remote_addr - $remote_user [ $time_local] ' '" $request" $status $body_bytes_sent ' '" $http_referer" " $http_user_agent"' ;

Чтобы изменить формат журнала, переопределите настройку по умолчанию или определите новый. Например, чтобы определить новый формат журнала с именем custom , который расширит комбинированный формат значением, отображающим заголовок X-Forwarded-For добавьте следующее определение в директиву http или server :

 log_format custom ' $remote_addr - $remote_user [ $time_local] " $request" ' ' $status $body_bytes_sent " $http_referer" ' '" $http_user_agent" " $http_x_forwarded_for"' ;

Чтобы использовать новый формат, укажите его имя после файла журнала, как показано ниже:

 access_log /var/log/nginx/access.log custom ;

Хотя журнал доступа предоставляет очень полезную информацию, он занимает место на диске и может повлиять на производительность сервера. Если на вашем сервере мало ресурсов, а ваш сайт загружен, возможно, стоит отключить журнал доступа. Для этого установите значение off для директивы access_log :

 access_log off ;

Настройка журнала ошибок

Nginx записывает сообщения об ошибках приложения и общих ошибках сервера в файл журнала ошибок. Если в вашем веб-приложении возникают ошибки, журнал ошибок — это первое место, с которого следует начать устранение неполадок.

Директива error_log включает и задаёт местоположение и уровень серьёзности журнала ошибок. Она имеет следующий вид и может быть задана в блоке http , server или location :

 error_log log_file log_level

Параметр log_level задаёт уровень ведения журнала. Ниже приведены уровни, отсортированные по степени важности (от самого низкого к самому высокому):

  • debug — Отладочные сообщения.
  • info — Информационные сообщения.
  • notice — Уведомления.
  • warn — Предупреждения.
  • error — Ошибки при обработке запроса.
  • crit — критические проблемы. Требуют немедленного действия.
  • alert — Оповещения. Необходимо немедленно принять меры.
  • emerg — Аварийная ситуация. Система находится в непригодном для использования состоянии.

Каждый уровень журнала включает в себя более высокие уровни. Например, если установить уровень журнала warn , Nginx также будет регистрировать сообщения об error , crit , alert и emerg .

Если параметр log_level не указан, по умолчанию используется error .

По умолчанию директива error_log определена в директиве http внутри основного файла nginx.conf:

/etc/nginx/nginx.conf

 http { ... error_log /var/log/nginx/error.log ; ... }

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

Например, чтобы настроить журнал ошибок domain.com на warn нужно использовать:

 http { ... error_log /var/log/nginx/error.log ; ... server { server_name domain.com error_log /var/log/nginx/domain.error.log warn ; ... } }

После каждого изменения файла конфигурации необходимо перезапустить службу Nginx , чтобы изменения вступили в силу.

Расположение файлов журнала

По умолчанию в большинстве дистрибутивов Linux, таких как Ubuntu , CentOS и Debian , журналы доступа и ошибок находятся в каталоге /var/log/nginx .

Чтение и понимание файлов журналов Nginx

Вы можете открывать и анализировать файлы журналов, используя стандартные команды, такие как cat , less , grep , cut , awk и т. д.

Вот пример записи из файла журнала доступа, в котором используется объединенный формат журнала Nginx по умолчанию:

 192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

Давайте разберем, что означает каждое поле записи:

  • $remote_addr192.168.33.1 — IP-адрес клиента, сделавшего запрос.
  • $remote_user- — Пользователь, прошедший аутентификацию HTTP. Если имя пользователя не указано, в этом поле отображается - .
  • [$time_local][15/Oct/2019:19:41:46 +0000] — Локальное время сервера.
  • "$request""GET / HTTP/1.1" — Тип запроса, путь и протокол.
  • $status200 — Код ответа сервера.
  • $body_bytes_sent396 — Размер ответа сервера в байтах.
  • "$http_referer""-" — URL реферала.
  • "$http_user_agent"Mozilla/5.0 ... — Пользовательский агент клиента (веб-браузер).

Используйте команду tail для просмотра файла журнала в режиме реального времени:

 tail -f access.log

Заключение

Файлы журналов предоставляют вам полезную информацию о проблемах сервера и о том, как посетители взаимодействуют с вашим сайтом.

Nginx позволяет вам настраивать журналы доступа и ошибок в соответствии с вашими потребностями.

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

nginx

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *