目 录CONTENT

文章目录

在traefik里使用插件捕获request和response

Administrator
2025-09-28 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

 

字数 665,阅读大约需 4 分钟

在traefik里使用插件捕获request和response

插件开发

上篇文章已经介绍了如何在treaifk使用插件,并记录trace_id。今天这边主要介绍如何开发插件并捕获API里的request和response!


可以在traefik labs里面找到该插件,然后我们到对应的GitHub里去查看插件源码:joy2fun/traefik-plugin-log-request: Traefik middleware for logging requests[1]

最好的方式就是让AI帮助我们读代码仓库,然后告诉我们代码主要实现了什么功能,然后在自己开发的时候,可以快速修改插件代码;
现在,我们使用AI解读插件的main.go,看看主要想实现什么功能;

AI解读

这是一个用于 Traefik 反向代理的 Go 语言插件,主要作用是记录 HTTP 请求和响应的详细信息。让我详细解释一下:
这个插件会拦截经过 Traefik 的 HTTP 请求,收集请求信息并以 JSON 格式输出到标准输出(stdout)。

1. 配置结构 (Config)


    
    
    
  type Config struct {
    ResponseBody        bool   // 是否记录响应体
    MaxLineSize         int    // 最大行大小限制
    RequestIDHeaderName string // 请求ID的header名称
}

2. 记录的数据 (RequestData)

插件会收集以下信息:

  • URL: 请求的完整URL

  • Host: 请求的主机名

  • Body: 请求体内容

  • Headers: 所有请求头(JSON格式)

  • ResponseBody: 响应体内容(可选)

  • RequestID: 唯一的请求标识符

3. 请求ID管理

  • • 如果请求中已存在指定的请求ID header,就使用现有的

  • • 否则生成一个16字节的随机ID

  • • 默认使用 X-Request-Id 作为header名称

工作流程

  1. 1. 拦截请求: 插件作为中间件拦截HTTP请求

  2. 2. 读取请求体: 保存请求体内容,然后重新包装给下游使用

  3. 3. 包装响应写入器: 使用自定义的 responseWriter 来捕获响应内容

  4. 4. 转发请求: 将请求传递给下一个处理器

  5. 5. 收集数据: 组合请求和响应信息

  6. 6. 输出日志: 将收集的数据以JSON格式输出到stdout

特殊处理

  • 响应体大小限制: 只有当响应体小于 maxLineSize 时才记录

  • Header处理: 将多值header简化为单值(取第一个值)

  • 错误容忍: 各种错误情况都有基本的处理(虽然代码中很多地方忽略了错误)

traefik新增详情解析配置


在实际的traefik日志里,会新增request和response的信息,其中同一个request和response使用相同的“X-Request-Id”作为trace追踪;示例响应如下:

引用链接

[1] joy2fun/traefik-plugin-log-request: Traefik middleware for logging requests: https://github.com/joy2fun/traefik-plugin-log-request

 

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区