Перейти к содержанию

Сетевые рамки

Ниже приведены некоторые советы по оснащению веб-приложений инструментами обнаружения.

Интеграционные

Если вы используете одну из следующих библиотек, ознакомьтесь с документацией по интеграции:

В противном случае, проверьте, использует ли ваш сервер WSGI или ASGI, и проверьте соответствующую интеграцию.

Захват заголовков запросов и ответов HTTP-сервера

Некоторые методы (например,logfire.instrument_fastapi()) позволяют вам передавать capture_headers=True для записи всех запросов и ответов в диапазоне, что обычно является всем, что вам нужно.

Если вы хотите получить больше контроля, есть три переменные среды, которые информируют библиотеку обнаружения OpenTelemetry о запросе на захват и заголовке ответа:

  • OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST
  • OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE
  • OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_FIELDS

Каждое из них принимает список регулярных выражений, разделенных запятыми, которые проверяются на имя заголовка без учета регистра. Первые два определяют, какие заголовки запросов/ответов будут захвачены и добавлены к свойствам диапазона. Третий определяет, какие заголовки будут изменены.

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

OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST =".*"
OTEL_INSTUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE =".*"

(Вот что делает capture_headers=True)

Специально для захвата заголовков запросов content-type и заголовков запросов, начинающихся с X-:

OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST ="content-type, X-.*"

Заменить заголовок Authorization на [REDACTED], чтобы избежать утечки учетных данных пользователя:

OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SANITIZE_Fields ="Authorization"

(Хотя обычно лучше использовать Logfire для очистки)

Запрос продолжительности HTTP-запроса на каждый процентиль

Обычно очень интересно визуализировать продолжительность HTTP-запроса на каждый процентиль. В отличие от среднего значения, которое может повлиять на экстремальные значения, процентиль позволяет нам понять максимальную продолжительность запроса на 50%, 90%, 95% или 99%.

Вот пример запроса, который используется для расчета продолжительности HTTP-запроса:

С нами ((
  SELECT
    Time_bucket (' % Time_bucket_duration %', start_timestamp) AS x,
    (extract(epoch from end_timestamp) * 1000) as duration_ms
  От records
  Где attributes ? 'http.method'
)
SELECT
  x,
  percentile_cont (0,99) WITHIN GROUP (ORDER BY Duration_ms) as percentile_99,
  percentile_cont (0,95) WITHIN GROUP (ORDER BY Duration_ms) as percentile_95,
  percentile_cont (0,90) WITHIN GROUP (ORDER BY Duration_ms) as percentile_90,
  percentile_cont (0,50) WITHIN GROUP (ORDER BY Duration_ms) as percentile_50
Из Датасета
Группа By x
ORDER BY X DESC;

Обратите внимание на то, как мы фильтруем записи, для которых установлены свойства http.method. Это хорошая отправная точка для поиска отслеживания, связанных с HTTP-запросами, но в зависимости от ваших настроек вам может понадобиться добавить дополнительные фильтры.

Этот запрос является хорошим кандидатом для графиков временных рядов на панели управления:

Requs duration per percentile as Time Series chart


本文总阅读量次