Отладка#

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

Техническая поддержка для клиентов:

Отладочный лог#

Отладочный лог следует включать перед самостоятельной диагностикой или по рекомендации технической поддержки.

Для этого запустите Angie, используя исполняемый файл с поддержкой отладки:

В готовых пакетах для Linux файл angie-debug собран с включенным отладочным логом:

$ ls -l /usr/sbin/ | grep angie

   lrwxrwxrwx 1 root root      13 Sep 21 18:58 angie -> angie-nodebug
   -rwxr-xr-x 1 root root 1561224 Sep 21 18:58 angie-debug
   -rwxr-xr-x 1 root root 1426056 Sep 21 18:58 angie-nodebug

Настройте запуск angie-debug:

$ sudo ln -fs angie-debug /usr/sbin/angie
$ sudo angie -t && sudo service angie upgrade

Запустится обновление исполняемого файла на лету.

Чтобы вернуться к обычному исполняемому файлу после окончания отладки:

$ sudo ln -fs angie-nodebug /usr/sbin/angie
$ sudo angie -t && sudo service angie upgrade

Примечание

Использование исполняемого файла с поддержкой отладки может незначительно снизить производительность; включение же отладочного лога может заметно снизить ее, а также увеличить расход места на диске.

Чтобы включить отладочный лог, задайте в конфигурации уровень debug с помощью директивы error_log:

error_log /path/to/log debug;

И перезагрузите конфигурацию:

$ sudo angie -t && sudo service angie reload

Примечание

Если переключиться на исполняемый файл без поддержки отладки, но оставить уровень debug в директиве error_log, Angie будет добавлять записи в лог на уровне info.

Переопределение error_log в конфигурации без указания уровня debug отключит отладочный лог. Здесь переопределение лога на уровне server отключает отладочный лог для отдельного сервера:

error_log /path/to/log debug;

http {
   server {
     error_log /path/to/log;
    # ...

Во избежание этого уберите строку, переопределяющую error_log, либо задайте в ней уровень debug:

error_log /path/to/log debug;

http {
   server {
     error_log /path/to/log debug;
   #  ...

Лог для отдельных адресов#

Можно включить отладочный лог только для указанных клиентских адресов:

error_log /path/to/log;

events {
  debug_connection 192.168.1.1;
  debug_connection 192.168.10.0/24;
}

Кольцевой буфер в памяти#

Отладочный лог можно записывать в кольцевой буфер в памяти:

error_log memory:32m debug;

Запись в буфер в памяти на уровне debug не будет существенно влиять на производительность даже при высоких нагрузках. В этом случае лог можно извлечь при помощи GDB-скрипта, например:

set $log = ngx_cycle->log

while $log->writer != ngx_log_memory_writer
  set $log = $log->next
end

set $buf = (ngx_log_memory_buf_t *) $log->wdata
dump binary memory debug_log.txt $buf->start $buf->end