我想让 Varnish 记录请求。我找到了 command varnishlog -a -w /var/log/varnish.log
,但它没有记录任何内容。
然后我发现Varnish默认不写日志。但是我找不到日志记录的配置选项。
如果您想以NCSA 通用日志格式记录 HTTP 请求,您需要使用varnishncsa
. 在 CentOS/RedHat 上,Varnish RPM 软件包包含一个 varnishncsa 初始化脚本,您可以使用它来开始记录。默认情况下,它记录到logfile="/var/log/varnish/varnishncsa.log"
.
此外,如果您希望通过单个 Varnish 安装服务多个不同的主机,您还需要在日志中包含主机名。这可以通过以下设置来完成/etc/sysconfig/varnishncsa
DAEMON_OPTS="$DAEMON_OPTS -F '%{Host}i %h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"'"
请注意,Anshu 链接中描述的方法仅将 Varnish 通过的请求记录到后端服务器。永远不会记录缓存命中请求(在 Varnish 5.0 之前 - 见下文)。因此以这种方式收集的 HTTPD 日志不能用于统计分析。
更新:正如@VikrantPogula 提到的,从 Varnish 5.0 开始,所有客户端请求都会被记录 - 包括缓存命中。这是默认行为,可以使用-c
开关显式打开。
Varnish 中的度量标准是人们经常遇到的问题。
获得一些一次性请求指标相对容易,但随着时间的推移进行整体跟踪通常涉及使用 varnishncsa。这是关于 Varnish 安装的指南,其中包括公制设置
作为对 Ketola 的回答,您可以通过传递-c
标志让 varnishncsa 记录甚至缓存命中请求。这将允许您使用 HTTPD 日志来分析统计信息。
示例:varnishncsa -c -a -w ~/varnish.log
将以默认 NCSA 格式将缓存命中请求写入文件
由于我降落在这里并且建议的修复没有帮助:
我的 varnishncsa.log 是空的,进程正在运行。
事实证明,我必须指定日志格式(任何格式)。
由于这种洞察力本身并没有修复我的初始化脚本,所以我使用这个策略修复了它。
这些文件/etc/default/varnish*
在带有 systemd 的系统中已弃用。只需运行以下命令:
systemctl enable varnishncsa.service
systemctl start varnishncsa.service
您还可以修改守护程序参数/lib/systemd/system/varnishncsa.service