Инструментирование кастомных сборок nginx

Материал из Документация Ключ-АСТРОМ

Модуль кода NGINX опирается на заблаговременные предположения об объявлениях внутренних структур данных NGINX и их расположении в памяти во время его автоматического инструментирования. Если базовые объявления структуры данных исправлены (это означает, что исходный код, определяющий эти структуры, был изменен) и, следовательно, предварительные предположения недействительны, автоматическое инструментирование, выполняемая модулем кода, может вызвать проблемы в NGINX из-за чтения из, или запись в неправильные части памяти.

Чтобы избежать такого сценария, модуль кода NGINX пытается обнаружить исправленные объявления структур данных NGINX. Если обнаружено исправленное объявление, модуль кода отключает автоматическое инструментирование и отображает следующую заметку на странице «Процесс» в веб-интерфейсе:

Уведомление:

  • В этом процессе были обнаружены несовместимые модули NGINX. Автоматическая аппаратура была отключена. Чтобы вручную настроить NGINX, см . Инструментирование среды выполнения вручную .

Инструментирование пропатченного NGINX

Модуль кода NGINX может проверять объявления внутренней структуры данных NGINX при запуске (во время выполнения), вместо того чтобы полагаться на предварительные предположения. При таком подходе Ключ-АСТРОМ может без проблем оснастить пропатченный NGINX, но этот подход имеет некоторые ограничения, которые необходимо учитывать.

Примером пропатченного NGINX является Kong Gateway .

Ограничения инструментирования вручную среды выполнения

  • Инструментирование вручную среды выполнения зависит от символов отладки, доступных для двоичного файла NGINX, что не всегда так.
  • Инструментирование вручную среды выполнения добавляет заметную задержку запуска (10 секунд и более) в NGINX.

Если Ваш NGINX или Kong Pod в Kubernetes не запускается из-за тайм-аута:

В облачных развертываниях настройте тайм-ауты запуска пода или контейнера, чтобы предотвратить истечение времени ожидания NGINX при запуске. Если NGINX или Kong Pod в Kubernetes не запускается, поищите в журналах упоминание о сбое тестов Liveness или Readiness и настройте начальные значения задержки, тайм-аута и порога сбоя этих тестов на достаточно высокие значения. Точная конфигурация зависит от развертывания.

  • Инструментирование вручную среды выполнения требует больше памяти во время запуска NGINX. Это более высокое пиковое потребление памяти может привести к тому, что поды будут уничтожены Kubernetes (или другими средами выполнения контейнеров) в случае строгих ограничений памяти. Пожалуйста, измените ограничения памяти, чтобы приспособиться к инструментам времени выполнения.

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

  • Добавьте переменную окружения DT_NGINX_RUNTIME_INSTRUMENTATIONв ваш NGINX:
DT_NGINX_FORCE_RUNTIME_INSTRUMENTATION=on
  • Перезапустите NGINX, чтобы получить переменную окружения.