Envoy Gateway 代理访问日志配置指南
概述
Envoy Gateway 作为云原生 API 网关解决方案,提供了强大的可观测性能力。本文将详细介绍如何配置 Envoy Gateway 的代理访问日志功能,帮助开发者更好地监控和分析流量情况。
前置准备
在开始配置前,请确保已具备以下环境:
- 已部署 Kubernetes 集群
- 已安装 Envoy Gateway
- 已部署日志收集系统(如 Loki)
- 具备 kubectl 命令行工具
默认访问日志格式
Envoy Gateway 默认提供了丰富的日志格式,包含以下关键信息:
{
"start_time": "请求开始时间",
"method": "HTTP方法",
"protocol": "协议类型",
"response_code": "响应状态码",
"bytes_received": "接收字节数",
"bytes_sent": "发送字节数",
"duration": "请求耗时",
"upstream_host": "上游服务地址",
"downstream_remote_address": "客户端地址"
// 更多字段...
}
这种结构化日志格式非常适合后续的日志分析和处理。
日志配置实践
1. 禁用访问日志
在某些性能敏感场景下,可能需要禁用访问日志:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
spec:
telemetry:
accessLog:
disable: true
2. OpenTelemetry 日志收集
将日志发送到 OpenTelemetry Collector 是生产环境的推荐做法:
spec:
telemetry:
accessLog:
settings:
- format:
type: Text
text: |
[%START_TIME%] "%REQ(:METHOD)% %PATH% %PROTOCOL%" %RESPONSE_CODE%
sinks:
- type: OpenTelemetry
openTelemetry:
host: otel-collector.monitoring.svc
port: 4317
3. gRPC ALS 日志服务
对于需要自定义日志处理的场景,可以使用 gRPC Access Log Service:
spec:
telemetry:
accessLog:
settings:
- sinks:
- type: ALS
als:
backendRefs:
- name: envoy-als
port: 8080
type: HTTP
高级配置技巧
1. CEL 表达式过滤
使用 CEL 表达式可以实现灵活的日志过滤:
spec:
telemetry:
accessLog:
settings:
- matches:
- "'x-envoy-logged' in request.headers"
# 其他配置...
2. 元数据增强
可以在日志中添加 Kubernetes 资源元数据:
%METADATA(ROUTE:envoy-gateway:resources)%
3. 精细化日志控制
区分路由和监听器级别的日志:
spec:
telemetry:
accessLog:
settings:
- type: Route
# 路由日志配置
- type: Listener
# 监听器日志配置
最佳实践建议
- 生产环境建议使用 OpenTelemetry 收集日志
- 根据实际需求选择合适的日志格式
- 对于高流量场景,考虑使用采样策略
- 合理使用 CEL 表达式减少不必要日志
- 定期检查日志系统的性能和容量
通过本文介绍的配置方法,您可以灵活地控制 Envoy Gateway 的访问日志行为,为系统监控和故障排查提供有力支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考