You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:19:52