предисловие
Журналы Nginx полезны для статистики и устранения неполадок системных служб. Журналы Nginx в основном делятся на два типа:access_log
(журналы доступа) иerror_log
(журнал ошибок). Через журнал доступа мы можем получить IP-адрес пользователя, информацию о браузере, время обработки запроса и другую информацию. В журнал ошибок записывается информация об ошибках доступа, которая может помочь нам найти причину ошибки. В этой статье будет подробно описано, как настроить логирование Nginx.
настраиватьaccess_log
Журналы доступа в основном записывают запросы клиентов. Здесь записывается каждый запрос, сделанный клиентом к серверу Nginx. IP-адрес клиента, информация о браузере, реферер, время обработки запроса, URL-адрес запроса и т. д. можно получить в журнале доступа. Конечно, какую конкретно информацию записывать, можно передатьlog_format
Директивное определение.
грамматика
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 设置访问日志
access_log off; # 关闭访问日志
- pathУказывает место хранения журнала.
-
formatЗадает формат журнала. По умолчанию предопределено
combined
. - bufferИспользуется для указания размера буфера для записи журнала. По умолчанию 64k.
- gzipЖурнал сжимается перед записью. Можно указать степень сжатия от 1 до 9, чем больше значение, тем выше степень сжатия и медленнее скорость сжатия. По умолчанию 1.
- flushУстановите срок действия кэша. Если время, указанное в параметре сброса, превышено, содержимое кэша будет очищено.
- ifУсловное суждение. Если указанное условие оценивается как 0 или пустая строка, запрос не записывается в журнал.
Кроме того, существует специальная стоимость off. Если указано это значение, ведение журнала всех запросов в текущей области отключается.
сфера
может быть примененоaccess_log
Область применения директивыhttp
,server
,location
,limit_except
. То есть, если эта директива используется за пределами этих областей, Nginx сообщит об ошибке.
Выше приведен основной синтаксис директивы access_log и значение параметров. Давайте рассмотрим несколько примеров, чтобы углубить наше понимание.
Основное использование
access_log /var/logs/nginx-access.log
В примере путь записи журнала указывается как/var/logs/nginx-access.log
, формат журнала использует формат по умолчаниюcombined
.
access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m
В примере путь записи журнала указывается как/var/logs/nginx-access.log
, формат журнала использует формат по умолчаниюcombined
, укажите, что размер кэша журнала составляет 32 КБ, включите gzip для сжатия журнала перед записью, используйте значение по умолчанию, равное 1, для коэффициента сжатия, а действительное время кэширования данных — 1 минута.
Используйте log_format для настройки формата журнала.
Nginx предопределяетcombined
Формат журнала, который используется по умолчанию, если формат журнала не указан явно:
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
Если вы не хотите использовать предопределенный формат Nginx, вы можете передатьlog_format
команда для настройки.
грамматика
log_format name [escape=default|json] string ...;
- nameНазвание формата. Упоминается в директиве access_log.
-
escapeКодировка символов в переменной set
json
все ещеdefault
, по умолчаниюdefault
. - stringСодержимое формата журнала для определения. Может быть более одного параметра. Переменные Nginx можно использовать в параметрах.
Нижеlog_format
Некоторые переменные, обычно используемые в директивах:
Переменная | значение |
---|---|
$bytes_sent | Всего байт отправлено клиенту |
$body_bytes_sent | Количество байтов, отправленных клиенту, не включая размер заголовков ответа. |
$connection | серийный номер соединения |
$connection_requests | Текущее количество запросов, сделанных по соединению |
$msec | Время записи журнала в секундах, точность в миллисекундах |
$pipe | Значение равно "p", если запрос был отправлен через конвейер http, иначе "." |
$request_length | Длина запроса (включая строку запроса, заголовок запроса и тело запроса) |
$request_time | Время обработки запроса, в секундах, с точностью до миллисекунд, начиная с первого байта, прочитанного в клиент, до последнего символа, отправленного клиенту для записи журнала |
$status | код состояния ответа |
$time_iso8601 | Местное время в стандартном формате, например "2017-05-24T18:31:27+08:00" |
$time_local | Местное время в общем формате журнала, например "24/May/2017:18:31:27 +0800" |
$http_referer | Запрошенный реферальный адрес. |
$http_user_agent | Информация о браузере клиента. |
$remote_addr | IP-адрес клиента |
$http_x_forwarded_for | Если на внешнем интерфейсе есть прокси-сервер, установите конфигурацию веб-узла для записи адреса клиента. Предпосылкой для вступления этого параметра в силу является то, что прокси-сервер также должен выполнять соответствующие настройки x_forwarded_for. |
$request | Полная необработанная строка запроса, например "GET / HTTP/1.1" |
$remote_user | Имя пользователя клиента, для запросов с включенной аутентификацией пользователя |
$request_uri | Полный адрес запроса, например «https://daojia.com/». |
Ниже показано использование пользовательского формата журнала:
access_log /var/logs/nginx-access.log main
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
Мы используемlog_format
директива определяетmain
формате и вaccess_log
Об этом говорится в директиве. Если клиент инициирует запрос:https://suyunfe.com/
, давайте взглянем на логирование перехваченного мной запроса:
112.195.209.90 - - [20/Feb/2018:12:12:14 +0800] "GET / HTTP/1.1" 200 190 "-" "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36" "-"
Мы видим в финальном логировании$remote_user
,$http_referer
,$http_x_forwarded_for
соответствует одному-
, это потому, что эти переменные пусты.
установить error_log
Журнал ошибок в Nginx черезerror_log
инструкции реализованы. Эта директива регистрирует сервер и сообщения об ошибках во время обработки запроса.
грамматика
Настройте путь и уровень журнала для файла журнала ошибок.
error_log file [level];
Default:
error_log logs/error.log error;
Первый параметр указывает, куда записывается журнал.
Второй параметр указывает уровень ведения журнала. уровень может бытьdebug
, info
, notice
, warn
, error
, crit
, alert
,emerg
любое значение в . Вы можете видеть, что его диапазон значений расположен от низкой до высокой срочности. В журнал ошибок будет записываться только уровень ошибок журнала, равный или превышающий значение, указанное в level. Значение по умолчаниюerror
.
Основное использование
error_log /var/logs/nginx/nginx-error.log
Его можно настроить в:main
,http
, mail
, stream
, server
, location
сфера.
В примере путь к журналу ошибок указан как:/var/logs/nginx/nginx-error.log
, уровень журнала использует значение по умолчаниюerror
.
open_log_file_cache
Каждая запись журнала записывается путем открытия файла, записи записи и последующего закрытия файла журнала. Если вы используете переменную в пути к файлу журнала, напримерaccess_log /var/logs/$host/nginx-access.log
, чтобы повысить производительность, вы можете использоватьopen_log_file_cache
Директива устанавливает кэш дескрипторов файла журнала.
грамматика
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
- maxУстановить максимальное количество файловых дескрипторов в кеше, если он заполнен, алгоритм LRU используется для закрытия дескриптора.
- inactiveУстановите время выживания кеша, по умолчанию 10 секунд.
- min_usesсуществуетinactiveЗа период времени лог-файл используется как минимум несколько раз, а дескриптор лог-файла записывается в кеш.По умолчанию 1 раз.
- valid: Установите, как долго будет проверяться имя файла журнала, чтобы увидеть, изменилось ли оно, по умолчанию — 60 с.
- off: Не использовать кеш. По умолчанию отключено.
Основное использование
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
Его можно настроить вhttp
,server
,location
в области.
В этом примере кеш настроен на кэширование дескрипторов файлов журнала до 1000. Если доступ к дескриптору файла журнала в кеше осуществляется хотя бы дважды в течение 20 с, он не будет закрыт кешем. Каждую 1 минуту проверяйте, существует ли имя файла дескриптора файла в кеше.
Суммировать
Через Nginxaccess_log
иerror_log
Директива настраивает журнал доступа и журнал ошибок черезlog_format
Мы можем настроить формат журнала. Если в пути файла журнала используются переменные, мы можем передатьopen_log_file_cache
Инструкции по настройке кеша для повышения производительности.
Кроме того, вaccess_log
иlog_format
В программе используется множество переменных.Официальная документация Nginx