如何以varnishncsa客户端模式日志格式记录后端?
How to log backend in varnishncsa client mode log format?
我正在寻找一种方法来包含后端名称(由 backend
vcl 选项配置),请求被发送到(或从中收到响应;无论哪种方式)在 varnishncsa
日志输出。
当 运行varnishncsa 处于 客户端模式 时,即记录前端 requests/responses.
日志格式在这里:https://varnish-cache.org/docs/trunk/reference/varnishncsa.html#format
我试图找到满足此选项的 "Extended variable" (%{X}x
),但到目前为止运气不好。清漆版本是 6.x.
首先我需要设置自定义请求或响应 header 来匹配吗??
您可以使用扩展变量来完成这项工作。
varnishncsa
来自后端请求
这是我检索后端请求的后端名称的示例:
varnishncsa -b -F "%{VSL:BackendOpen[2]}x"
您需要的 VSL 标签 是 BackendOpen
标签,它将 return 在 varnishlog
中的以下输出:
- BackendOpen 32 boot.bla 192.168.224.2 8080 192.168.224.3 53908
如您所见,后端名称 是第二个字段,因此是 BackendOpen[2]
表达式。
varnishncsa
来自客户端请求
在客户端线程中,后端提示,但未打开。
如果您想要访问 hinted 后端,您需要能够访问 req.backend_hint
变量。您可以使用 std.log()
将此值记录为 VCL_Log
标记。
这是 VCL 示例:
vcl 4.0;
import std;
backend default {
.host="1.2.3.4";
.port="80";
}
sub vcl_recv {
std.log("Backend: "+ req.backend_hint);
}
这是查找此值的 varnishncsa
命令:
varnishncsa -c -F "%{VSL:VCL_Log:Backend}x"
结论
当然您仍然需要稍微调整您的 varnishncsa
命令以包含正确的字段并过滤正确的参数,但这个应该有望回答您的问题。
在client request端还是在backend request端找后端名称由你决定。
我正在寻找一种方法来包含后端名称(由 backend
vcl 选项配置),请求被发送到(或从中收到响应;无论哪种方式)在 varnishncsa
日志输出。
当 运行varnishncsa 处于 客户端模式 时,即记录前端 requests/responses.
日志格式在这里:https://varnish-cache.org/docs/trunk/reference/varnishncsa.html#format
我试图找到满足此选项的 "Extended variable" (%{X}x
),但到目前为止运气不好。清漆版本是 6.x.
首先我需要设置自定义请求或响应 header 来匹配吗??
您可以使用扩展变量来完成这项工作。
varnishncsa
来自后端请求
这是我检索后端请求的后端名称的示例:
varnishncsa -b -F "%{VSL:BackendOpen[2]}x"
您需要的 VSL 标签 是 BackendOpen
标签,它将 return 在 varnishlog
中的以下输出:
- BackendOpen 32 boot.bla 192.168.224.2 8080 192.168.224.3 53908
如您所见,后端名称 是第二个字段,因此是 BackendOpen[2]
表达式。
varnishncsa
来自客户端请求
在客户端线程中,后端提示,但未打开。
如果您想要访问 hinted 后端,您需要能够访问 req.backend_hint
变量。您可以使用 std.log()
将此值记录为 VCL_Log
标记。
这是 VCL 示例:
vcl 4.0;
import std;
backend default {
.host="1.2.3.4";
.port="80";
}
sub vcl_recv {
std.log("Backend: "+ req.backend_hint);
}
这是查找此值的 varnishncsa
命令:
varnishncsa -c -F "%{VSL:VCL_Log:Backend}x"
结论
当然您仍然需要稍微调整您的 varnishncsa
命令以包含正确的字段并过滤正确的参数,但这个应该有望回答您的问题。
在client request端还是在backend request端找后端名称由你决定。