Отладка#

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

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

Отладочные файлы#

Наши готовые пакеты для Linux включают версию файла angie под названием angie-debug, которая скомпилирована особым образом для облегчения устранения неполадок:

angie

angie-debug

Назначение

Оптимизирован для производительности и используется в производственных средах.

Предназначен для отладки с дополнительным логом и функциями.

Опции сборки

Собран с флагами оптимизации, без отладочных символов.

Собран с отладочными символами и опциями для ведения расширенного лога.

Журналирование

Стандартные возможности ведения лога для мониторинга и базового устранения неполадок.

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

Предполагаемое использование

Используется в рабочих системах для стабильности, производительности и эффективности.

Используется в разработке, тестировании и устранении неполадок.

Производительность

Минимальное использование ресурсов и максимальная пропускная способность.

Более высокое использование ресурсов и более низкая производительность из-за расходов на ведение лога.

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

Чтобы отладочный лог работал при самостоятельной сборке Angie, нужно включить отладку перед сборкой:

$ ./configure --with-debug ...

После установки команда angie -V позволяет убедиться, что отладочный лог включен:

$ angie -V

  ...
  configure arguments: --with-debug ...

В готовых пакетах для 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

В systemd service Angie сконфигурирован так, чтобы использовать исполняемый файл angie:

DAEMON=${DAEMON:-/usr/sbin/angie}

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

error_log /path/to/log debug;

И настройте запуск 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, 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