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

Thank you for reading this post, don't forget to subscribe!

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

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

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

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

 

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

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

Самый основ­ной син­так­сис дирек­ти­вы access_log следующий:

 

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

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

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

 

Для удоб­ства обслу­жи­ва­ния реко­мен­ду­ет­ся уста­но­вить отдель­ный файл жур­на­ла досту­па для каж­до­го бло­ка сер­ве­ра. Дирек­ти­ва access_log уста­нов­ле­на в дирек­ти­ве server пере­кры­ва­ет одну уста­нов­лен­ные в дирек­ти­ве http (более высо­ко­го уровня).
/etc/nginx/conf.d/domain.ru.conf

 

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

 

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

 

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

 

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

 

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

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

 

Пара­метр 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

 

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

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

 

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

 

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

 

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

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

 

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

  • $remote_addr- 192.168.33.1 – IP-адрес кли­ен­та, сде­лав­ше­го запрос.
  • $remote_user- — HTTP. Аутен­ти­фи­ци­ро­ван­ный поль­зо­ва­тель HTTP. Если имя поль­зо­ва­те­ля не зада­но, это поле отоб­ра­жа­ет­ся -.
  • [$ time_local] [15/Oct/2019:19:41:46 +0000] – Вре­мя локаль­но­го сервера.
  • $request”- “GET / HTTP/1.1” – Тип запро­са, путь и протокол.
  • $status- 200 – Код отве­та сервера.
  • $body_bytes_sent- 396 – Раз­мер отве­та сер­ве­ра в байтах.
  • $http_referer”- “-” – URL реферала.
  • $http_user_agent” – Mozilla/5.0 …- Поль­зо­ва­тель­ский агент кли­ен­та (веб-бра­у­зер).

 

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