Како да конфигурирате логирање и ротација на дневници во Nginx на Ubuntu VPS


Вовед

За да се спасите од проблеми со вашиот веб-сервер, можете да конфигурирате евиденција. Пријавувањето информации на вашиот сервер ви дава пристап до податоците што ќе ви помогнат да ги решавате проблемите и да ги процените ситуациите кога ќе се појават.

Во ова упатство, ќе ги испитате можностите за логирање на Nginx и ќе откриете како да ги конфигурирате овие алатки за најдобро да ги задоволат вашите потреби. Ќе користите виртуелен приватен сервер Ubuntu 22.04 како пример, но секоја модерна дистрибуција треба да функционира слично.

Предуслови

За да го следите ова упатство, ќе ви треба:

  • Еден Ubuntu 22.04 сервер со корисник безroot sudo-овозможен со заштитен ѕид. Следете го нашето почетно поставување на серверот за да започнете.
  • Nginx е инсталиран на серверот. Следете го нашиот туторијал како да се инсталира Nginx на Ubuntu 22.04 за да го инсталирате.

Со Nginx што работи на вашиот сервер Ubuntu 22.04, подготвени сте да започнете.

Разбирање на Директивата Error_log

Nginx користи неколку различни директиви за контрола на евиденцијата на системот. Оној вклучен во основниот модул се нарекува error_log.

error_log Синтакса

Директивата error_log се користи за справување со евиденција на општи пораки за грешки. Ако сте запознаени со Apache, ова е многу слично на директивата ErrorLog на Apache.

Директивата error_log ја применува следнава синтакса:

error_log log_file log_level

log_file ја одредува датотеката каде што ќе бидат напишани дневниците. log_level го одредува најниското ниво на евиденција што би сакале да го снимите.

Нивоа на евиденција

Директивата error_log може да се конфигурира да евидентира повеќе или помалку информации по потреба. Нивото на логирање може да биде кое било од следниве:

  • emerg: итни ситуации кога системот е во неупотреблива состојба.
  • предупредување: тешки ситуации каде што е потребно да се дејствува веднаш.
  • крит: Важни проблеми што треба да се решат.
  • грешка: се појави грешка и нешто беше неуспешно.
  • предупредување: Се случи нешто невообичаено, но не е причина за загриженост.
  • забелешка: Нешто нормално, но вреди да се забележи што се случило.
  • информации: информативна порака што можеби е убаво да се знае.
  • дебагирање: Дебагирање информации што може да бидат корисни за прецизирање каде се јавува проблем.

Нивоата повисоки на листата се сметаат за повисок приоритет. Ако наведете ниво, дневникот го доловува тоа ниво и кое било ниво повисоко од наведеното ниво.

На пример, ако наведете грешка, дневникот ќе фати пораки означени како грешка, crit, предупредување и emerge.

Пример за оваа директива што се користи е во главната конфигурациска датотека. Користете го претпочитаниот уредувач на текст за да пристапите до следната конфигурациска датотека. Овој пример користи nano:

  1. sudo nano /etc/nginx/nginx.conf

Скролувајте ја датотеката надолу до делот # Logging Settings и забележете ги следните директиви:

. . .
##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
. . .

Ако не сакате error_log да евидентира ништо, мора да го испратите излезот во /dev/null:

. . .
error_log /dev/null crit;
. . .

Другата директива за евиденција, access_log, ќе се дискутира во следниот дел.

Разбирање на директивите за евиденција на HttpLogModule

Додека директивата error_log е дел од основниот модул, директивата access_log е дел од HttpLogModule. Ова обезбедува можност за прилагодување на дневниците.

Постојат неколку други директиви вклучени со овој модул кои помагаат при конфигурирање на сопствени дневници.

log_format Директива

Директивата log_format се користи за опишување на форматот на записот во дневникот користејќи обичен текст и променливи.

Постои еден формат што доаѓа предефиниран со Nginx наречен combined. Ова е вообичаен формат што го користат многу сервери.

Следното е пример за комбиниран формат ако не бил внатрешно дефиниран и треба да се специфицира со директивата log_format:

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

Оваа дефиниција опфаќа повеќе линии додека не ја најде полузапирката (;).

Линиите што започнуваат со знак за долар ($) означуваат променливи, додека знаците како -, [ и ] се толкуваат буквално.

Општата синтакса на директивата е:

log_format format_name string_describing_formatting;

Можете да користите променливи поддржани од основниот модул за да ги формулирате вашите низи за евиденција.

Разбирање на Директивата access_log

Директивата access_log користи слична синтакса на директивата error_log, но е пофлексибилна. Се користи за конфигурирање на прилагодено најавување.

Директивата access_log ја користи следнава синтакса:

access_log /path/to/log/location [ format_of_log buffer_size ];

Стандардната вредност за access_log е форматот комбиниран споменат во делот log_format. Можете да користите кој било формат дефиниран со дефиниција log_format.

Големината на баферот е максималната големина на податоците што ќе ги задржи Nginx пред да ги запише сите во дневникот. Можете исто така да наведете компресија на датотеката за евиденција со додавање gzip во дефиницијата:

access_log /path/to/log/location format_of_log gzip;

За разлика од директивата error_log, ако не сакате најавување, можете да ја исклучите со ажурирање во конфигурациската датотека:

. . .
##
# Logging Settings
##

access_log off;
error_log /var/log/nginx/error.log;

. . .

Во овој случај не е неопходно да се пишува на /dev/null.

Управување со ротација на дневник

Како што растат датотеките за евиденција, станува неопходно да се управува со механизмите за евиденција за да се избегне пополнување на просторот на вашиот диск. Ротација на дневници е процес на исклучување на датотеките за евиденција и евентуално архивирање на стари датотеки за одредено време.

Nginx не обезбедува алатки за управување со датотеки со дневници, но вклучува механизми за помош при ротација на дневници.

Рачна ротација на дневник

За рачно да ги ротирате вашите дневници, можете да креирате скрипта за да ги ротирате. На пример, преместете го тековниот дневник во нова датотека за архивирање. Вообичаена шема е да се именува најновата датотека за евиденција со наставка .0, а потоа да се именуваат постари датотеки со .1 и така натаму:

  1. mv /path/to/access.log /path/to/access.log.0

Командата што всушност ги ротира дневниците е kill -USR1 /var/run/nginx.pid. Ова не го убива процесот Nginx, туку му испраќа сигнал што предизвикува повторно вчитување на датотеките за евиденција. Ова ќе предизвика нови барања да се евидентираат во освежената датотека за евиденција:

  1. kill -USR1 `cat /var/run/nginx.pid`

Датотеката /var/run/nginx.pid е местото каде што Nginx го складира PID-от на главниот процес. Таа е наведена на врвот на конфигурациската датотека /etc/nginx/nginx.conf со линијата што започнува со pid:

  1. sudo nano /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
...

По ротацијата, извршете sleep 1 за да му дозволите на процесот да го заврши преносот. Потоа можете да ги зипувате старите датотеки или да правите какви било процеси по ротација што сакате:

  1. sleep 1
  2. [ post-rotation processing of old log file ]

Ротација на дневник со логотат

Апликацијата logrotate е програма што се користи за ротирање на дневници. Стандардно е инсталиран на Ubuntu, а Nginx на Ubuntu доаѓа со прилагодена скрипта logrotate.

Користете го претпочитаниот уредувач на текст за да пристапите до скриптата за ротација. Овој пример користи nano:

  1. sudo nano /etc/logrotate.d/nginx

Првата линија од датотеката ја одредува локацијата на која ќе се применуваат следните редови. Имајте го ова на ум ако ја смените локацијата на најавување во конфигурациските датотеки Nginx.

Остатокот од датотеката наведува дека дневниците ќе се ротираат секојдневно и дека ќе се зачувуваат 52 постари копии.

Забележете дека делот postrotate содржи команда слична на претходно користените механизми за рачна ротација:

. . .
postrotate
	[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
. . .

Овој дел му кажува на Nginx повторно да ги вчита датотеките за евиденција откако ќе заврши ротацијата.

Заклучок

Правилната конфигурација и управување со дневникот може да ви заштеди време и енергија во случај на проблем со вашиот сервер. Имајќи пристап до информациите што ќе ви помогнат да дијагностицирате проблем може да биде разликата помеѓу тривијалниот лек и постојаната главоболка.

Важно е да се внимава на дневниците на серверот за да се одржи функционална локација и да се осигура дека не изложувате чувствителни информации. Овој водич служи само како вовед во вашето искуство со сечата. Можете да дознаете повеќе општи совети во нашето упатство за Како да ги решите вообичаените грешки Nginx.