Инструментарий настройки вручную среды выполнения
Модуль кода NGINX опирается на заблаговременные предположения об объявлениях внутренних структур данных NGINX и их расположении в памяти во время его автоматического инструментирования. Если базовые объявления структуры данных исправлены (это означает, что исходный код, определяющий эти структуры, был изменен) и, следовательно, предварительные предположения недействительны, автоматическая инструментирование, выполняемая модулем кода, может вызвать проблемы в NGINX из-за чтения из, или запись в неправильные части памяти.
Чтобы избежать такого сценария, модуль кода NGINX пытается обнаружить исправленные объявления структур данных NGINX. Если обнаружено исправленное объявление, модуль кода отключает автоматическое инструментирование и отображает следующую заметку на странице «Процесс» в веб-интерфейсе:
Уведомление выглядит так:
- В этом процессе были обнаружены несовместимые модули NGINX. Автоматическая аппаратура была отключена. Чтобы вручную настроить NGINX, см . Инструментирование среды выполнения вручную .
Инструментирование кастомных сборок NGINX
Модуль кода NGINX может проверять объявления внутренней структуры данных NGINX при запуске (во время выполнения), вместо того чтобы полагаться на предварительные предположения (ahead-of-time assumptions). При таком подходе Ключ_АСТРОМ может без проблем контролировать кастромную сборку 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, чтобы получить переменную окружения.