Поиск по сайту:

Журналы доступа и журналы ошибок NGINX


Предпосылка

  • Вы уже установили NGINX, следуя нашему руководству отсюда.

Логи в NGINX

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

Что такое журнал доступа NGINX?

NGINX регистрирует действия всех посетителей вашего сайта в журналах доступа. Здесь вы можете узнать, к каким файлам осуществляется доступ, как NGINX ответил на запрос, какой браузер использует клиент, IP-адреса клиентов и многое другое. Информацию из журнала доступа можно использовать для анализа трафика, чтобы найти использование сайтов с течением времени. Кроме того, путем надлежащего мониторинга журналов доступа можно выяснить, отправляет ли пользователь какой-либо необычный запрос на поиск недостатков в развернутом веб-приложении.

Что такое журнал ошибок NGINX?

С другой стороны, если NGINX столкнется с какими-либо сбоями, он запишет это событие в журнал ошибок. Это может произойти, если в файле конфигурации есть какая-то ошибка. Поэтому, если NGINX не может запуститься или внезапно прекратил работу, вам следует проверить журналы ошибок, чтобы найти более подробную информацию. Вы также можете найти несколько предупреждений в журнале ошибок, но это не означает, что возникла проблема, но это событие может создать серьезную проблему в ближайшем будущем.

Как включить журнал доступа NGINX?

Как правило, журнал доступа можно включить с помощью директивы access_log либо в http, либо в разделе сервера. Первый аргумент log_file является обязательным, тогда как второй аргумент log_format является необязательным. Если вы не укажете какой-либо формат, журналы будут записываться в комбинированном формате по умолчанию.

access_log log_file log_format;

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

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

Всегда лучше разделять журналы доступа всех виртуальных хостов, записывая их в отдельный файл. Для этого вам нужно переопределить директиву access_log, определенную в разделе http, другой директивой access_log в контексте сервера.


http {
      ...
      ...
      access_log  /var/log/nginx/access.log;
    
         server {
                  listen 80; 
                  server_name domain1.com
                  access_log  /var/log/nginx/domain1.access.log;
                  ...
                  ...
                }
}

Перезагрузите NGINX, чтобы применить новые настройки. Чтобы просмотреть журналы доступа для домена domain1.com в файле /var/log/nginx/domain1.access.log, используйте следующую команду tail в терминале.

# tail -f /var/log/nginx/domain1.access.log

Применить пользовательский формат в журнале доступа

Формат журнала по умолчанию, используемый для записи события в журнале доступа, представляет собой комбинированный формат журнала. Вы можете переопределить поведение по умолчанию, создав свой собственный формат журнала, а затем указать имя пользовательского формата в директиве access_log. В следующем примере определяется настраиваемый формат журнала путем расширения предопределенного комбинированного формата значением коэффициента сжатия ответа gzip. Затем формат применяется путем указания формата журнала с помощью директивы access_log.

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

            server {
                    gzip on;
                    ...
                    access_log /var/log/nginx/domain1.access.log custom;
                    ...
            }
}

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

# tail -f /var/log/nginx/domain1.access.log
47.29.201.179 - - [28/Feb/2019:13:17:10 +0000] "GET /?p=1 HTTP/2.0" 200 5316 "https://domain1.com/?p=1" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "2.75"

Как включить журнал ошибок NGINX?

Директива error_log настраивает ведение журнала ошибок в файл, stderr или syslog, указывая минимальный уровень серьезности сообщений об ошибках, которые должны быть зарегистрированы. Синтаксис директивы error_log:

error_log log_file log_level;

Первый аргумент log_file определяет путь к файлу журнала, а второй аргумент log_level определяет уровень серьезности записываемого события журнала. Если вы не укажете log_level, то по умолчанию записываются только события журнала с уровнем серьезности ошибки. Например, в следующем примере уровень серьезности сообщений об ошибках, которые должны быть зарегистрированы, устанавливается равным crit. Кроме того, директива error_log в контексте http подразумевает, что журнал ошибок для всего виртуального хоста будет доступен в одном файле.

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

Также можно записывать журналы ошибок для всех виртуальных хостов отдельно, переопределяя директиву error_log в контексте сервера. Следующий пример делает именно это, переопределяя директиву error_log в контексте сервера.

http {
       ...
       ...
       error_log  /var/log/nginx/error_log;
       server {
	        	listen 80;
		        server_name domain1.com;
       		        error_log  /var/log/nginx/domain1.error_log  warn;
                        ...
	   }
       server {
	        	listen 80;
		        server_name domain2.com;
      		        error_log  /var/log/nginx/domain2.error_log  debug;
                        ...
	   }
}

Все описанные выше примеры записывают события журнала в файл. Вы также можете настроить директиву error_log для отправки событий журнала на сервер системного журнала. Следующая директива error_log отправляет журналы ошибок на сервер системного журнала с IP-адресом 192.168.10.11 в формате отладки.

error_log syslog:server=192.168.10.11 debug;

В некоторых случаях может потребоваться отключить журнал ошибок. Для этого задайте для файла журнала имя /dev/null.

error_log /dev/null;

Уровни серьезности журнала ошибок Nginx

Существует много типов уровней журнала, связанных с событием журнала и с различным приоритетом. Все уровни журнала перечислены ниже. На следующих уровнях журнала отладка имеет наивысший приоритет и включает также остальные уровни. Например, если вы укажете ошибку как уровень журнала, он также будет регистрировать события журнала, которые помечены как критическое, предупреждение и аварийная ситуация.

  1. emerg: экстренные сообщения, когда ваша система может быть нестабильной.
  2. alert: предупреждающие сообщения о серьезных проблемах.
  3. крит. Критические проблемы, требующие немедленного решения.
  4. ошибка: Произошла ошибка. Что-то пошло не так при обработке страницы.
  5. warn: Предупреждающие сообщения, на которые следует обратить внимание.
  6. уведомление. Простое уведомление в журнале, которое можно игнорировать.
  7. информация: просто информационные сообщения, которые вам могут быть интересны.
  8. debug: отладочная информация, используемая для точного определения местоположения ошибки.

Резюме

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