如何为 Nginx 创建黑盒日志?

如何为 Nginx 创建黑盒日志?

有一篇文章,使用 Apache 的 Blackbox 日志分析 LAMP 应用程序,描述了如何创建日志来记录常见和组合日志格式中缺少的大量详细信息。这些信息应该可以帮助您解决性能问题。正如作者所说:“虽然常见日志文件格式(和组合格式)非常适合命中跟踪,但它们不适合获取核心性能数据。”

本文介绍了一种“黑匣子”日志格式,类似于飞机上的黑匣子飞行记录器,它收集用于分析服务器性能的信息,而命中跟踪日志格式中缺少这些信息:保持活动状态、远程端口、子进程、发送的字节数等。

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 中不可用。

答案1

Nginx 与 Apache 不同——Nginx 的强大之处在于 (1) 服务器/位置匹配和 URI 重写、(2) 代理/故障转移请求(到 HTTP/FastCGI 上游)和 (3) 结果缓存。因此,当您需要测量后端服务的响应方式以及哪些请求被缓存时,您可能会在这些领域的某个地方遇到真正的问题。我怀疑 Nginx 是否存在任何通用的“黑盒”格式,因为它有很多变量,而且它们是动态的(即,您可以将 cookie“Registered”的值和相应的缓存状态写入日志,以查看注册用户是否获得缓存内容)

尽管如此,扩展短的“组合”日志格式是非常有用的。

一般的

关于一般变量的一些提示:

$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

相关内容