varnish - 如何以 varnishncsa 客户端模式日志格式记录后端?
问题描述
我正在寻找一种方法来在日志输出中包含后端名称(由backend
vcl 选项配置),请求被发送到(或从任何一种方式接收到的响应) 。varnishncsa
在客户端模式下运行 varnishncsa 时,即记录前端请求/响应。
日志格式在这里:https ://varnish-cache.org/docs/trunk/reference/varnishncsa.html#format
我试图找到一个%{X}x
可以满足此选项的“扩展变量”(),但到目前为止还没有运气。清漆版本是 6.x。
我是否需要为此设置自定义请求或响应标头以匹配?
解决方案
您可以使用扩展变量来完成工作。
varnishncsa
来自后端请求
这是我检索后端请求的后端名称的示例:
varnishncsa -b -F "%{VSL:BackendOpen[2]}x"
您需要的VSL 标记BackendOpen
是可以在 中返回以下输出的标记varnishlog
:
- BackendOpen 32 boot.bla 192.168.224.2 8080 192.168.224.3 53908
如您所见,后端名称是第二个字段,因此是BackendOpen[2]
表达式。
varnishncsa
来自客户请求
在客户端线程中提示后端,但未打开。
如果要访问提示的后端,则需要访问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
稍微调整您的命令以包含正确的字段并过滤正确的参数,但是这个应该有望回答您的问题。
您可以在客户端请求端或后端请求端查找后端名称。
推荐阅读
- autodesk-forge - 覆盖 Forge Viewer 上元素的不透明度
- python - 如何有效地处理 parquet 文件的内容
- python - 为什么我的 Python 并行进程运行次数过多?
- selenium - Selenium 驱动程序无法下载 JAVA
- android - 华为推送和SDK统计问题
- java - 在使用 Jackson 序列化类时添加类型信息,以便可以在不使用注释的情况下使用接口类型进行反序列化?
- security - 确保路径不会脱离基本路径
- python - pandas DataFrame:列中相同符号的值相加的最大值和最小值
- powershell - 脚本仅适用于本地机器
- html - 边框的意外 CSS 行为