![有没有更好的方法来分析Varnish命中率](https://linux22.com/image/709422/%E6%9C%89%E6%B2%A1%E6%9C%89%E6%9B%B4%E5%A5%BD%E7%9A%84%E6%96%B9%E6%B3%95%E6%9D%A5%E5%88%86%E6%9E%90Varnish%E5%91%BD%E4%B8%AD%E7%8E%87.png)
答案1
看起来统计数据是准确的,但您希望某些 URL 不被视为未命中。
这取决于您所说的不可缓存的请求是什么意思。如果存在一个 URL 模式,您知道每个 URL 请求都是唯一的,那么为什么还要查找该 URL 或在缓存中输入后端的响应呢?
因此,请在 Varnish 配置文件(如 sitename.vcl)中排除要折扣的 URL:
sub vcl_recv {
# Do not cache following pages
if (req.url ~ "^/monitor.*\?heartbeat=") {
return (pass);
}
}
欲了解更多信息,请阅读man vcl
或查看Varnish 维基。
否则,它们是 POST(自动不缓存),还是它们被排除在您的 .vcl 文件中?
这不是统计问题。如果您vcl_recv()
返回pass
或error
,则不应将其计为查找或未命中(参见流程图这里),并且您现有的计算已经具有代表性。
来自varnishstat -l
清漆文档,并且从我看到的可以在 Munin 中绘制的图表来看,没有相关的计数器可以做与 cache_hit 或 cache_miss 有显著不同的事情。
s_req = client_req = (cache_hit + s_fetch)
s_fetch = cache_miss + s_pass
因此,1 - (s_fetch / s_req)
看起来命中率会比现在更差,如果尚未命中,则将传递或“不可缓存”的页面计为未命中。
(顺便说一句,如果您更改“不可缓存”页面的后端,那么我认为 Varnish 不会计算每个后端的请求数。)
愚蠢的想法:你可以运行logtail varnishncsa.log | grep -c "\(POST\|whateverURLisnoncacheable\)"
并从总未命中次数中减去结果,但这需要大量工作并且可能会产生不太准确的结果。