如何用Lua提取HAProxy Timers中的Ta/Tr/Tw/Td等值?
如何用Lua提取HAProxy的Ta、Tr、Tw、Td会话计时器值
HAProxy的Lua API提供了直接访问这些会话计时器的方法,以下是具体实现步骤:
1. 基础配置准备
首先在HAProxy的global段加载你的Lua脚本:
global lua-load /etc/haproxy/timer_extractor.lua
然后在需要提取计时器的frontend或backend段触发脚本动作,比如HTTP请求场景:
frontend my_frontend bind *:80 http-request lua.extract_timers
2. Lua脚本实现
创建timer_extractor.lua脚本,通过会话对象的专用方法获取各个计时器值:
core.register_action("extract_timers", { "http-req", "http-res" }, function(txn) -- 获取当前会话对象 local session = txn:session() -- 提取各计时器值(单位:微秒) local ta = session:timer_ta() local tr = session:timer_tr() local tw = session:timer_tw() local td = session:timer_td() -- 示例:将计时器值写入HAProxy日志 txn:Info(string.format("Session timers - Ta: %dμs, Tr: %dμs, Tw: %dμs, Td: %dμs", ta, tr, tw, td)) -- 也可以将值附加到响应头、存入自定义统计等 -- txn:set_var("txn.ta", ta) end)
3. 计时器含义对应
这些值和官方文档「Timing events」章节的定义完全对应:
- Ta: 从客户端建立连接到HAProxy开始处理请求的时间间隔
- Tr: 从HAProxy开始处理请求到转发至后端服务器的时间间隔
- Tw: HAProxy等待后端服务器响应的时间间隔
- Td: 从后端服务器开始发送响应到HAProxy接收完成的时间间隔
注意事项
- 这些Lua API方法要求HAProxy版本≥2.0(你使用的2.5版本完全兼容)
- 返回值以微秒为单位,如需转换为毫秒可除以1000
- 除了HTTP场景,也可以在TCP场景下使用
tcp-request lua.extract_timers触发脚本,只需调整注册动作的参数为{ "tcp-req" }
内容的提问来源于stack exchange,提问作者Mihai8
相关产品推荐
相关产品推荐

