是否有人开发过,或者有人知道任何第三方工具(或库存工具的不明显用途)来帮助可怜的系统管理员确定通过 Varnish 的请求发生了什么?虽然 、varnishstat
和varnishtop
为varnishhist
我提供了非常高级(或低级)的概述,但我在寻找一些可以告诉我类似以下内容的东西:
- 当前正在进行的请求有哪些(以及这些请求已经进行了多长时间、发送到哪里等)
- 后端、虚拟主机等请求的平均服务时间
- 其他可以帮助我识别行为不当的后端、虚拟主机等的东西。
答案1
varnishncsa
显示日志阿帕奇/NCSA组合日志格式(来自手册页)。您可以将它们与任何常规日志分析器一起使用,以查找您拥有哪些用户代理、它们加载哪些页面等。
varnishlog
/usr/bin/varnishlog
另一方面,( )显示所有请求的详细输出,包含正在使用哪些 VCL 命令(查找、哈希、命中、传递等)以及 HTTP 事务中的所有标头(varnishlog -o
将按请求分组)等信息。如果您的站点很繁忙,它将快速滚动,但您可以使用 将它们写入磁盘-w
,或使用记录器工具(/etc/init.d/varnishlog
)。请注意,这会很快填满磁盘,因为它非常详细(每个请求 10-30 行,具体取决于请求发送到的位置,当然还有您的所有 HTTP 标头)。
varnishreplay
可以从这样的日志文件重放 HTTP 流量。
大多数工具都可以与正则表达式搜索一起使用。
红药丸 LinproVarnish 的制作公司目前正在制作一个 Web GUI。我不确定它会有哪些功能(我想他们也不太清楚),但我确信它会有相当多的监控图表。
答案2
- 尝试 varnishncsa 获取每个请求的日志记录
- 清漆顶部具有平均服务和命中时间
- 恕我直言,如果您怀疑后端存在问题,您应该直接监控,而不必通过 varnish。
答案3
varnishncsa:
一个技巧是使用自定义日志格式来varnishncsa
包含更多有用的信息,例如:
- 响应时间(到第一个字节)
- 请求的命中或未命中状态
- 原始客户端 IP(如果 Varnish 位于负载均衡器后面)
我使用以下内容来/etc/varnish/varnishncsa
添加此信息(varnishncsa 文档):
#! /bin/sh
DAEMON_OPTS="$DAEMON_OPTS -F \"%h \\\"%{X-Forwarded-For}i\\\" %t \\\"%r\\\" %s %b \\\"%{Referer}i\\\" \\\"%{User-agent}i\\\" %{Varnish:time_firstbyte}x %{Varnish:hitmiss}x\""
这种配置允许我浏览访问日志并添加历史命中率以及查找响应缓慢的页面。
varnishlog:
正如所讨论的这个问题/答案,如果您让 varnish 对后端执行健康检查,则可以使用 varnishlog 记录后端健康的变化。运行varnishlog -O -I "healthy|sick"
将根据健康检查为您提供后端健康的运行更新。