如何解决Varnish:是否可以记录所有GET请求以进行进一步处理?
是否可以将Varnish用于以下任务?
想象一下通过直接链接请求的URL(例如/ vote?poll-id = 1&answer-id = 2),我们在其中显示所选民意测验结果的民意测验结果。
我想(几乎实时)保存/拉出/处理所有请求的URL,以生成那些轮询结果。
是否可以将这些URL作为某种流进行进一步处理?
之所以使用Varnish是因为我想减少较慢的上游后端服务的负载。而且由于延迟显示实际结果是可以的。
解决方法
Varnish内置了shared memory logs。可以使用各种工具进行咨询。
可能对您有用的主要因素是:
- varnishlog:关于请求,响应和内部处理的各个方面的深入日志记录
- varnishncsa:一种Apache / NCSA样式的日志记录工具
您还可以使用 VCL 编程语言,并将来自 VCL 中的请求记录到操作系统的syslog
机制中。
varnishlog
以下命令将显示以/vote
开头的URL的所有日志记录信息:
varnishlog -g request -q "ReqUrl ~ '^/vote'"
您可以过滤出所需的字段:
varnishlog -i requrl -i reqheader -g request -q "ReqUrl ~ '^/vote'"
这将只显示请求URL和所有请求标头。
您还可以将输出写入文件:
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,以了解有关varnishlog
的更多信息,以及http://varnish-cache.org/docs/6.5/reference/vsl-query.html,以了解有关vsl-query
语言的更多信息。
varnishncsa
如果要使用Apache样式的日志记录,可以使用以下命令:
varnishncsa -g request -q "ReqUrl ~ '^/vote'"
您还可以将这些日志写入日志文件:
varnishncsa -a -w /var/log/varnish/vote_access.log -g request -q "ReqUrl ~ '^/vote'"
varnishncsa
和varnishlog
二进制文件都可以使用-D
参数来守护
有关varnishncsa
的更多信息,请参见http://varnish-cache.org/docs/6.5/reference/varnishncsa.html。文档中还有一节专门介绍如何将自定义字段添加到varnishncsa
输出中。
syslog
如果使用以下代码段,则可以将投票请求记录到syslog
:
vcl 4.1;
import std;
sub vcl_recv {
if(req.url ~ "^/vote") {
std.syslog(6,"Vote request captured: " + req.url);
}
}
这是样板 VCL ,不能像这样复制/粘贴。请确保将
import std;
添加到您的 VCL文件,并使用std.syslog()
登录到本地syslog工具。
请参阅http://varnish-cache.org/docs/6.5/reference/vmod_std.html#void-syslog-int-priority-string-s,以详细了解std.syslog()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。