surfe/traefik-correlation-id
GitHub: surfe/traefik-correlation-id
一个 Traefik 中间件插件,通过自动生成或透传 Correlation-ID 请求头,实现 HTTP 请求在微服务间的端到端链路追踪。
Stars: 0 | Forks: 0
# Traefik Correlation ID
一个 [Traefik](https://traefik.io) 中间件插件,可确保每个传入的 HTTP 请求都携带唯一的 Correlation ID 标头。如果该标头已存在,则原样传递;如果不存在,中间件会自动生成一个 UUID v4。这使得单个请求可以跨服务进行端到端追踪,从而简化了调试和可观测性。
## 功能
- 当标头不存在时,生成加密安全的随机 UUID v4
- 原样传递现有标头,保留上游调用者设置的 ID
- 可配置的标头名称(默认:`correlation-id`)
- 零外部依赖
## 安装
### Traefik Pilot / 插件目录
将此插件添加到您的 Traefik 静态配置中:
```
# traefik.yml
experimental:
plugins:
correlation:
moduleName: github.com/surfe/traefik-correlation-id
version: v0.1.0
```
### 本地开发
挂载插件源代码并将其注册为本地插件:
```
# traefik.yml
experimental:
localPlugins:
correlation:
moduleName: github.com/surfe/traefik-correlation-id
```
包含的 `docker-compose.yml` 会自动完成此设置。
## 配置
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| `headerName` | `string` | `correlation-id` | 要读取和注入的标头名称 |
### 静态配置 (traefik.yml)
```
experimental:
plugins:
correlation:
moduleName: github.com/surfe/traefik-correlation-id
version: v0.1.0
```
### 动态配置
**File provider:**
```
http:
middlewares:
correlation:
plugin:
correlation:
headerName: correlation-id
routers:
my-router:
middlewares:
- correlation
```
**Docker labels (per service):**
```
labels:
- "traefik.http.middlewares.correlation.plugin.correlation.headerName=correlation-id"
- "traefik.http.routers.my-service.middlewares=correlation@docker"
```
**全局中间件(入口点上的所有路由):**
```
# traefik.yml
entryPoints:
web:
address: ":80"
http:
middlewares:
- correlation@docker
```
## 使用 Docker 进行本地开发
`docker-compose.yml` 会启动 Traefik,加载来自本地源码树的插件,并提供一个 `whoami` 服务用于测试。
```
docker compose up
```
然后验证标头是否已注入:
```
curl -H "Host: whoami.localhost" http://localhost
# Response 将包含:correlation-id:
# 现有 header 将被保留:
curl -H "Host: whoami.localhost" -H "correlation-id: my-trace-id" http://localhost
# Response 将包含:correlation-id: my-trace-id
```
Traefik 仪表板可在 [http://localhost:8080](http://localhost:8080) 访问。
## 运行测试
```
go test -v -cover ./...
```
## 许可证
[MIT](LICENSE)
标签:API集成, EVTX分析, Go, Ruby工具, Traefik, 中间件, 可观测性, 日志审计, 请求拦截, 链路追踪