概述

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-c istio-proxy
```

JSON 格式示例

```json
{
"authority": "httpbin:8000",
"method": "GET",
"path": "/headers",
"protocol": "HTTP/1.1",
"response_code": 200,
"duration": 2,
"upstream_cluster": "inbound|80||"
}
```

日志字段说明

字段HTTPTCP
authority请求授权头-
bytes_received接收字节数接收字节数
bytes_sent发送字节数发送字节数
downstream_local_address下游本地地址下游本地地址
downstream_remote_address下游远程地址下游远程地址
duration请求持续时长(ms)连接持续时长(ms)
methodHTTP 方法-
pathHTTP 路径-
protocolHTTP/1.1 或 HTTP/2-
request_idX-REQUEST-ID 头值-
response_codeHTTP 响应码-
response_flags响应标志响应标志
route_name路由名称路由名称
start_time开始时间开始时间
upstream_cluster上游集群上游集群
upstream_host上游主机 URL上游主机 URL
user_agentUser-Agent 头值-
x_forwarded_forX-Forwarded-For 头值-

总结

Envoy 访问日志是排查 Istio 服务网格问题的重要工具,支持多种配置方式:

  • 全局配置适合生产环境统一管理
  • istioctl 命令适合临时调试
  • Annotation 方式适合特定服务定制

建议生产环境使用 JSON 格式,便于日志采集和分析。