有没有更好的方法来分析Varnish命中率

有没有更好的方法来分析Varnish命中率

我目前是这样分析清漆命中率的

在此处输入图片描述

虽然这很好,但服务器服务的大部分请求是不可缓存的。这大大降低了命中率。

在此处输入图片描述

我该如何修改它,以便只计算缓存候选请求并计算速率?我应该查看哪个 varnishstat 指标?

答案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()返回passerror,则不应将其计为查找或未命中(参见流程图这里),并且您现有的计算已经具有代表性。

来自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\)"并从总未命中次数中减去结果,但这需要大量工作并且可能会产生不太准确的结果。

相关内容