1. Envoy Access Log 概述
什么是 Envoy Access Log
Envoy Access Log(访问日志)是 Envoy 代理在每次处理请求和响应时生成的结构化记录。它详细记录了请求从进入代理到响应返回客户端的完整生命周期信息,包括请求行、头部、响应状态、耗时、连接属性等关键字段。
与传统的 Web 服务器访问日志不同,Envoy Access Log 具有以下特点:
- 流式架构:日志生成与请求处理异步,不阻塞数据面性能。
- 高度可配置:支持自定义日志格式、过滤条件、输出目标。
- 多协议支持:覆盖 HTTP/1.1、HTTP/2、gRPC、TCP、TLS 等协议。
- 动态更新:通过 xDS 控制面热更新日志配置,无需重启代理。
核心概念:Envoy Access Log 是网关可观测性的三大支柱之一(日志、指标、追踪),是排查故障、审计合规、分析流量的第一手数据源。
Access Log 在网关中的作用
在云原生网关架构中,Envoy 作为南北向流量入口和东西向服务间通信的代理,Access Log 承担着以下关键角色:
| 作用维度 | 具体说明 | 典型价值 |
|---|---|---|
| 可观测性 | 记录每个请求的完整处理链路 | 快速定位延迟瓶颈、错误来源 |
| 安全审计 | 保留请求来源、目标、认证信息 | 满足 SOC2、PCI-DSS 等合规要求 |
| 流量分析 | 统计请求量、成功率、响应分布 | 容量规划、成本优化、业务洞察 |
| 变更门禁 | 对比变更前后的日志模式差异 | 灰度发布、金丝雀部署的自动化验证 |
| 故障诊断 | 记录错误码、超时、重试详情 | 缩短 MTTR(平均修复时间) |
常见应用场景
Envoy Access Log 在实际生产环境中覆盖以下典型场景:
- 请求审计与合规:记录所有经过网关的请求的源 IP、用户身份、请求路径、响应码,用于事后追溯和合规报告。
- 性能瓶颈定位:通过日志中的
duration、response_duration、request_duration字段,快速识别慢请求和上游服务延迟。 - 错误率监控:统计 4xx/5xx 响应码分布,触发告警并关联日志上下文进行根因分析。
- 灰度发布验证:在变更门禁流程中,对比新旧版本的日志模式(如错误率、延迟分布、流量比例),自动判断发布是否健康。
- 安全攻击检测:分析日志中的异常请求模式(如大量 403、路径遍历、SQL 注入特征),联动 WAF 或安全策略。
- 容量规划与成本分析:基于日志统计请求量、带宽、连接数趋势,指导集群扩缩容和资源预算。
场景示例:某电商平台在金丝雀发布期间,通过 Envoy Access Log 实时对比新老版本的 P99 延迟和 5xx 错误率。当新版本错误率超过 0.1% 时,自动触发回滚,整个过程无需人工介入。这正是本课程“变更门禁”的核心实践。
Access Log 的典型字段结构
Envoy 默认的 HTTP Access Log 格式包含以下核心字段,理解这些字段是配置日志格式和编写门禁规则的基础:
| 字段名 | 描述 | 示例值 |
|---|---|---|
%START_TIME% |
请求开始时间 | 2025-03-21T10:30:00.123Z |
%REQ(:METHOD)% |
HTTP 请求方法 | GET / POST / PUT |
%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% |
请求路径 | /api/v1/orders |
%RESPONSE_CODE% |
响应状态码 | 200 / 503 / 429 |
%DURATION% |
请求总耗时(毫秒) | 45 |
%UPSTREAM_HOST% |
上游服务地址 | 10.0.1.5:8080 |
%BYTES_RECEIVED% |
接收字节数 | 1024 |
%BYTES_SENT% |
发送字节数 | 2048 |