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

Какова цель журнала ошибок?

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

Эти проблемы классифицируются как debug, info, notice, warn, error. Уровень журнала ошибок по умолчанию — error, и он работает глобально. По умолчанию журнал ошибок находится по адресу logs/error.log. Директива журнала ошибок переопределяет настройку, унаследованную от более высоких уровней, и может быть определена на уровнях http, stream, server и location.

Как настроить журнал доступа Nginx?

Запросы Nginx регистрируются в контексте места, где заканчивается обработка. Оно может отличаться от первоначального местоположения. которые можно найти в разделах HTTP, server или location. Синтаксис директивы access_log таков:

Syntax:	access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default:	
access_log logs/access.log combined;
Context:	http, server, location, if in location, limit_except

По умолчанию Nginx регистрирует журнал доступа в предопределенном формате combined. Мы можем перезаписать формат журнала доступа в соответствии с требованиями.

В следующих примерах определяется формат журнала, который расширяет предопределенный формат combined со значением, указывающим степень сжатия ответа gzip.

http {
    log_format compression '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_referer" "$http_user_agent" "$gzip_ratio"';
    server {
        gzip on;
        access_log /spool/logs/nginx-access.log compression;
        ...
    }
}

Как настроить журнал ошибок Nginx?

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

error_log /path/to/log_file log_level;

Пример

error_log /var/log/nginx/error_log warn;

Это даст указание Nginx регистрировать все сообщения типа предупреждения и более серьезные критические, предупреждающие и аварийные сообщения на уровне журнала.

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

Формат combined log — это формат журнала по умолчанию для хранения всех транзакций в журнале доступа. Вы можете создать свой собственный формат журнала, а затем указать имя пользовательского формата в директиве журнала доступа; вы можете переопределить поведение по умолчанию.

Конфигурация журнала доступа Nginx по умолчанию

http {
    server {
         /path/to/log_file/nginx-access.log combined;
        ...
    }
}

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

В первом примере я показываю, как мы можем отслеживать или регистрировать пользовательский агент, время отклика вышестоящего сервера, запрашивать ссылающийся хост, IP-адрес пользователя и т. д.

http {
    log_format custom_log_format '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_host" "$upstream_response_time"'
                            '"$http_referer" "$http_user_agent"';
    
    access_log /spool/logs/nginx-access.log custom_log_format;
....................
}

Во втором примере я показываю, как мы можем отслеживать или регистрировать параметры строки запроса запроса в журналах Nginx.

http {
    log_format custom_log_format '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $body_bytes_sent '
                           '"$http_host" "$upstream_response_time"'
                            '"$http_referer" "$http_user_agent" clientId="$clientid"';
    access_log /spool/logs/nginx-access.log custom_log_format;
....................
}

Я регистрирую параметр запроса строки запроса clientid в журналах Nginx.

Вы можете получить все встроенные переменные Nginx или подробности здесь — Nginx Http Upstream Module Nginx Http Core Module

Как сделать условную регистрацию в журнале Nginx?

Иногда вы можете захотеть регистрировать определенные запросы. Условное ведение журнала используется для этого в Nginx.

Предположим, вы хотите исключить из журналов 200 ответов о статусе.

map $status $log_not_enable_for_200_status {
        ~^200  0;
        default 1;
    }
server {
    # Other directives here...
    access_log /var/log/nginx/nginx-access.log combined if=$log_not_enable_for_200_status;
}

Предположим, вы не хотите регистрировать внутренний запрос IP-адреса.

map $remote_addr $log_not_enable_for_internal_ip {
    "192.168.0.168" 0;
    "192.168.0.169" 0;
    "192.168.0.170" 0;
    default 1;
}
server {
    # Other directives here...
    access_log /var/log/nginx/nginx-access.log combined if=$log_not_enable_for_internal_ip;
}

Вход в системный журнал?

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

Мы можем установить местоположение Syslog в конфигурации журналов Nginx, используя файл server =. Это может быть имя домена, IP-адрес или путь к сокету домена UNIX.

error_log  syslog:server=unix:/var/log/nginx.sock debug;
access_log syslog:server=[2001:db8::1]:1234,facility=local7,tag=nginx,severity=info;

Вы можете получить больше информации о системном журнале Nginx [нажмите здесь] (https://nginx.org/en/docs/syslog.html)

Первоначально опубликовано на https://www.loginradius.com.