Назад | Перейти на главную страницу

Как мы можем создавать журналы Blackbox для Nginx?

Там есть статья, Профилирование приложений LAMP с помощью журналов Blackbox Apache, в котором описывается, как создать журнал, в который записывается много подробной информации, отсутствующей в общих и комбинированных форматах журналов. Эта информация должна помочь вам решить проблемы с производительностью. Как отмечает автор, «хотя общий формат файла журнала (и комбинированный формат) отлично подходят для отслеживания попаданий, они не подходят для получения жестких данных о производительности».

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

LogFormat "%a/%S %X %t \"%r\" %s/%>s %{pid}P/%{tid}P %T/%D %I/%O/%B" blackbox

Я пытаюсь воссоздать как можно больше формата для Nginx и хотел бы помочь заполнить пробелы. Вот как будет выглядеть формат черного ящика Nginx: у несопоставленных директив Apache есть вопросительные знаки после их имен.

access_log blackbox '$remote_addr/$remote_port X? [$time_local] "$request"'
                    's?/$status $pid/0 T?/D? I?/$bytes_sent/$body_bytes_sent'

Вот таблица переменных, которые мне удалось сопоставить из документации Nginx.

%a = $remote_addr - The IP address of the remote client.
%S = $remote_port - The port of the remote client.
%X = ? - Keep alive status.
%t = $time_local - The start time of the request.
%r = $request - The first line of request containing method verb, path and protocol.
%s = ? - Status before any redirections.
%>s = $status - Status after any redirections.
%{pid}P = $pid - The process id.
%{tid}P = N/A - The thread id, which is non-applicable to Nignx.
%T = ? - The time in seconds to handle the request.
%D = $request_time - The time in milliseconds to handle the request.
%I = ? - The count of bytes received including headers. 
%O = $bytes_sent - The count of bytes sent including headers.
%B = $body_bytes_sent - The count of bytes sent excluding headers, but with a 0 for none instead of '-'.

Нужна помощь в заполнении отсутствующих переменных или подтверждение того, что отсутствующие переменные действительно недоступны в Nginx.

Nginx не похож на Apache - сила Nginx заключается в (1) сопоставлении сервера / местоположения и перезаписи URI, (2) запросах проксирования / переключения при отказе (для восходящих потоков HTTP / FastCGI) и (3) кешировании результата. Таким образом, где-то в этих областях вы можете столкнуться с реальными проблемами, когда вам нужно измерить, как реагирует ваша внутренняя служба и какие запросы кэшируются. Я сомневаюсь, что может быть какой-либо универсальный формат «черного ящика» для Nginx, поскольку он имеет много переменных и, кроме того, они динамические (то есть вы можете записать значение cookie «Зарегистрировано» и соответствующий статус кеша в журнал, чтобы узнать, есть ли зарегистрированные пользователи получают кешированный контент или нет)

Тем не менее, очень полезно расширить формат короткого «комбинированного» журнала.

Общее

Некоторые подсказки по общим переменным:

$uri - URI after rewrites
$args - Query arguments
$realpath_root - Value of "root" for this request
$server_name - the name of server which is processing the request
$connection - the number of connection

Прокси

Некоторые полезные переменные при проксировании. Эти переменные могут содержать несколько значений: разделенные , когда апстримы спрашивают по очереди и разделяют : когда X-Accel-Redirect был выдан:

$upstream_addr - the upstream IPs
$upstream_response_time - the upstream processing times
$upstream_status - the upstream statuses

Кеширование

Одна переменная, полезная для регистрации статуса кеширования:

$upstream_cache_status = MISS | EXPIRED | UPDATING (stale answer used) | STALE (stale answer used) | HIT