Varnish:是否可以记录所有 GET 请求以进行进一步处理?
Varnish: Is it possible to log all GET requests for further processing?
是否可以使用 Varnish 来完成以下任务?
想象一个 URL(例如 /vote?poll-id=1&answer-id=2)是通过直接链接请求的,我们会在其中显示所选 poll-id 的投票结果。
我想save/pull/process所有请求URL(几乎实时)生成这些民意调查结果。
是否可以将那些 URL 作为某种流进行进一步处理?
之所以使用varnish是因为我想减少较慢的上游后端服务的负载。并且因为显示实际结果的一些延迟是可以的。
清漆有 built-in shared memory logs。这些可以使用各种工具进行查询。
可能对您有用的主要内容是:
- varnishlog:in-depth 记录请求、响应和内部处理的各个方面
- varnishncsa:一个 Apache/NCSA 风格的日志记录工具
您还可以利用 VCL 编程语言并将 VCL 中的请求记录到操作系统的 syslog
机制。
清漆日志
以下命令将显示以 /vote
开头的 URL 的所有日志记录信息:
varnishlog -g request -q "ReqUrl ~ '^/vote'"
您可以筛选出您需要的字段:
varnishlog -i requrl -i reqheader -g request -q "ReqUrl ~ '^/vote'"
这个只会显示请求URL和所有请求headers。
您还可以将输出写入文件:
varnishlog -A -a -w /var/log/varnish/vsl_vote.log -i requrl -i reqheader -g request -q "ReqUrl ~ '^/vote'"
请参阅 http://varnish-cache.org/docs/6.5/reference/varnishlog.html to learn more about varnishlog
and http://varnish-cache.org/docs/6.5/reference/vsl-query.html 以了解有关 vsl-query
语言的更多信息。
清漆
如果你想Apache-style记录日志,你可以使用下面的命令:
varnishncsa -g request -q "ReqUrl ~ '^/vote'"
您还可以将这些日志写入日志文件:
varnishncsa -a -w /var/log/varnish/vote_access.log -g request -q "ReqUrl ~ '^/vote'"
Both varnishncsa
and varnishlog
binaries can be daemonized using the -D
parameter
请参阅 http://varnish-cache.org/docs/6.5/reference/varnishncsa.html 以了解有关 varnishncsa
的更多信息。文档中还有一个部分是关于将自定义字段包含在 varnishncsa
输出中。
系统日志来自 VCL
如果您使用以下代码段,您可以将投票请求记录到 syslog
:
vcl 4.1;
import std;
sub vcl_recv {
if(req.url ~ "^/vote") {
std.syslog(6, "Vote request captured: " + req.url);
}
}
This is boilerplate VCL that cannot just be copy/pasted like that. Please make sure to add import std;
to your VCL file, and use std.syslog()
to log to your local syslog facility.
请参阅 http://varnish-cache.org/docs/6.5/reference/vmod_std.html#void-syslog-int-priority-string-s 以了解有关 std.syslog()
的更多信息。
是否可以使用 Varnish 来完成以下任务?
想象一个 URL(例如 /vote?poll-id=1&answer-id=2)是通过直接链接请求的,我们会在其中显示所选 poll-id 的投票结果。
我想save/pull/process所有请求URL(几乎实时)生成这些民意调查结果。
是否可以将那些 URL 作为某种流进行进一步处理?
之所以使用varnish是因为我想减少较慢的上游后端服务的负载。并且因为显示实际结果的一些延迟是可以的。
清漆有 built-in shared memory logs。这些可以使用各种工具进行查询。
可能对您有用的主要内容是:
- varnishlog:in-depth 记录请求、响应和内部处理的各个方面
- varnishncsa:一个 Apache/NCSA 风格的日志记录工具
您还可以利用 VCL 编程语言并将 VCL 中的请求记录到操作系统的 syslog
机制。
清漆日志
以下命令将显示以 /vote
开头的 URL 的所有日志记录信息:
varnishlog -g request -q "ReqUrl ~ '^/vote'"
您可以筛选出您需要的字段:
varnishlog -i requrl -i reqheader -g request -q "ReqUrl ~ '^/vote'"
这个只会显示请求URL和所有请求headers。
您还可以将输出写入文件:
varnishlog -A -a -w /var/log/varnish/vsl_vote.log -i requrl -i reqheader -g request -q "ReqUrl ~ '^/vote'"
请参阅 http://varnish-cache.org/docs/6.5/reference/varnishlog.html to learn more about varnishlog
and http://varnish-cache.org/docs/6.5/reference/vsl-query.html 以了解有关 vsl-query
语言的更多信息。
清漆
如果你想Apache-style记录日志,你可以使用下面的命令:
varnishncsa -g request -q "ReqUrl ~ '^/vote'"
您还可以将这些日志写入日志文件:
varnishncsa -a -w /var/log/varnish/vote_access.log -g request -q "ReqUrl ~ '^/vote'"
Both
varnishncsa
andvarnishlog
binaries can be daemonized using the-D
parameter
请参阅 http://varnish-cache.org/docs/6.5/reference/varnishncsa.html 以了解有关 varnishncsa
的更多信息。文档中还有一个部分是关于将自定义字段包含在 varnishncsa
输出中。
系统日志来自 VCL
如果您使用以下代码段,您可以将投票请求记录到 syslog
:
vcl 4.1;
import std;
sub vcl_recv {
if(req.url ~ "^/vote") {
std.syslog(6, "Vote request captured: " + req.url);
}
}
This is boilerplate VCL that cannot just be copy/pasted like that. Please make sure to add
import std;
to your VCL file, and usestd.syslog()
to log to your local syslog facility.
请参阅 http://varnish-cache.org/docs/6.5/reference/vmod_std.html#void-syslog-int-priority-string-s 以了解有关 std.syslog()
的更多信息。