Ручное инструментирование среды выполнения (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 во время выполнения

1. Добавьте переменную среды DT_NGINX_RUNTIME_INSTRUMENTATION в ваш NGINX:

DT_NGINX_FORCE_RUNTIME_INSTRUMENTATION=on

2. Перезапустите NGINX, чтобы получить переменную окружения.