概述
istio-proxy(也称为 sidecar)默认使用 Envoy 注入。Envoy 访问日志记录了通过 Envoy 进行请求/响应交互的相关信息,方便了解通信过程和调试定位问题。
Envoy 日志级别:trace、debug、info、warning、error、critical、off
修改日志级别
1. 全局配置
编辑 ConfigMap
```bash
kubectl -n istio-system edit configmap istio
```
添加配置:
```yaml
data:
mesh: |-
accessLogEncoding: JSON
accessLogFile: /dev/stdout
```
配置说明:
- `accessLogEncoding`:TEXT(默认)或 JSON(推荐)
- `accessLogFile`:/dev/stdout(推荐,便于 kubectl logs 查看)
配置保存后立即生效。
使用 istioctl
```bash
istioctl install --set profile=demo --set values.global.proxy.logLevel=debug
```
2. istioctl 命令动态调整
```bash
调整整体日志级别
istioctl -n [namespace] pc log [podname] --level debug
细粒度控制
istioctl -n [namespace] pc log [podname] --level grpc:trace,config:debug
使用 Envoy Admin API
kubectl exec -n [namespace] [podname] -c istio-proxy -- \
curl -XPOST -s http://localhost:15000/logging\?level\=debug
```
3. Annotation 方式
```yaml
apiVersion: apps/v1
kind: Deployment
spec:
template:
metadata:
annotations:
"sidecar.istio.io/logLevel": debug
"sidecar.istio.io/componentLogLevel": "ext_authz:trace,filter:debug"
```
查看日志
```bash
kubectl logs
```
JSON 格式示例
```json
{
"authority": "httpbin:8000",
"method": "GET",
"path": "/headers",
"protocol": "HTTP/1.1",
"response_code": 200,
"duration": 2,
"upstream_cluster": "inbound|80||"
}
```
日志字段说明
| 字段 | HTTP | TCP |
|---|---|---|
| authority | 请求授权头 | - |
| bytes_received | 接收字节数 | 接收字节数 |
| bytes_sent | 发送字节数 | 发送字节数 |
| downstream_local_address | 下游本地地址 | 下游本地地址 |
| downstream_remote_address | 下游远程地址 | 下游远程地址 |
| duration | 请求持续时长(ms) | 连接持续时长(ms) |
| method | HTTP 方法 | - |
| path | HTTP 路径 | - |
| protocol | HTTP/1.1 或 HTTP/2 | - |
| request_id | X-REQUEST-ID 头值 | - |
| response_code | HTTP 响应码 | - |
| response_flags | 响应标志 | 响应标志 |
| route_name | 路由名称 | 路由名称 |
| start_time | 开始时间 | 开始时间 |
| upstream_cluster | 上游集群 | 上游集群 |
| upstream_host | 上游主机 URL | 上游主机 URL |
| user_agent | User-Agent 头值 | - |
| x_forwarded_for | X-Forwarded-For 头值 | - |
总结
Envoy 访问日志是排查 Istio 服务网格问题的重要工具,支持多种配置方式:
- 全局配置适合生产环境统一管理
- istioctl 命令适合临时调试
- Annotation 方式适合特定服务定制
建议生产环境使用 JSON 格式,便于日志采集和分析。
