本节介绍如何了解 Varnish 正在做什么,从详细的逐个 HTTP 请求日志记录到全局汇总统计计数器。
4.1 在 Varnish 中进行记录
Varnish 最棒的功能之一是日志记录的工作方式。Varnish 不将日志记录到普通日志文件,而是记录到一个共享内存段,称为 VSL - Varnish 共享日志。当该内存段结束时,我们会重新开始,覆盖旧数据。
这比记录到文件要快得多,而且不占用磁盘空间。此外,它还能在需要时为您提供更多信息。
反过来说,如果你忘记让程序将日志实际写入磁盘,它们就会被覆盖。
varnishlog 是用于查看 Varnish 日志的程序之一。varnishlog 提供原始日志,即写入日志的所有内容。还有其他客户端也可以访问日志,我们稍后会向你展示。
在启动 Varnish 的终端窗口中输入 varnishlog -g raw,然后按回车键。
你会看到这样的行缓慢滚动:
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1273698726 1.0
这是 Varnish 主进程在检查缓存进程是否一切正常。
现在打开浏览器,重新加载显示网络应用程序的页面。
你会看到这样的行
11 SessOpen c 127.0.0.1 58912 :8080 0.0.0.0 8080 1273698726.933590 14
11 ReqStart c 127.0.0.1 58912
11 ReqMethod c GET
11 ReqURL c /
11 ReqProtocol c HTTP/1.1
11 ReqHeader c Host: localhost:8080
11 ReqHeader c Connection: keep-alive
第一列是一个任意编号,用于标识交易。编号相同的行来自同一个事务。第二列是日志信息的标签。所有日志条目都有一个标签,表明记录的是何种活动。
第三列告诉我们这是来自客户端(“c”)还是后端(“b”)的数据。第四列是记录的数据。
现在,你可以用 varnishlog 过滤很多东西。我们认为你想知道的基本选项有
‘-b’
只显示 Varnish 和后端服务器之间的流量日志。这对我们优化缓存命中率很有用。
‘-c’
与"-b "相同,但针对客户端流量。
-g 请求
按请求分组事务。
-q 查询
只列出与此查询匹配的事务。
有关此主题的更多信息,请参阅 varnishlog。
4.2 统计信息
Varnish 自带了几个非常实用的统计生成工具,通过聚合和分析共享内存日志中的日志数据,不断更新和展示特定的数据集,从而实时生成统计数据。
4.2.1 varnishtop
varnishtop 实用程序会读取共享内存日志,并持续更新最常出现的日志条目列表。
使用 -I、-i、-X 和 -x 选项进行适当过滤后,可用于显示请求的文件、客户端、用户代理或日志中记录的任何其他信息的排序。
varnishtop -i ReqURL 将显示客户端请求的 URL。 varnishtop -i BereqURL 将显示后端请求最多的 URL。 varnishtop -I ReqHeader:Accept-Encoding 将显示客户端发送给您的最常用的 Accept-Encoding 标头。
4.2.2 varnishhist
__varnishhist __工具会读取 varnishd 共享内存日志,并显示一个持续更新的直方图,显示最近 N 个请求的处理分布情况。N 值和垂直刻度显示在左上角。水平刻度为对数。命中用管道符(“|”)标记,未命中用哈希符(“#”)标记。
4.2.3 varnishstat
Varnish 有很多计数器。我们计算未命中、命中率、存储信息、创建的线程和删除的对象,几乎无所不包。varnishstat 会转储这些计数器。这在调整 Varnish 时非常有用。
有一些程序可以定期轮询 varnishstat,并将这些计数器绘制成漂亮的图表。Munin 就是这样一个程序。Munin 的网址是 http://munin-monitoring.org/ 。Varnish 源代码中有一个 Munin 插件。