简介:

istio-proxy也是我们常说的sidecar,istio默认使用envoy注入的,envoy的日志级别包括trace, debug, info, warning, error, critical, off

Envoy 访问日志记录了通过 Envoy 进行请求 / 响应交互的相关记录,可以方便地了解具体通信过程和调试定位问题。

修改日志级别的几种方式

全局配置

istio配置都是在configmap中的,可以通过修改configmap来修改全局的proxy日志级别:

开启 Envoy 访问日志,执行以下命令修改 istio 配置

1
kubectl -n istio-system edit configmap istio
1
2
3
4
data:
mesh: |-
accessLogEncoding: JSON
accessLogFile: /dev/stdout

其中,accessLogEncoding表示 accesslog 输出格式,Istio 预定义了 TEXTJSON 两种日志输出格式。默认使用 TEXT,通常改成 JSON 以提升可读性;accessLogFile:表示 accesslog 输出位置,通常指定到 /dev/stdout (标准输出),以便使用 kubectl logs 来查看日志。

保存yaml文件后,配置随即生效, 不需要重启。

也可以使用istioctl来配置全局proxy日志级别

1
istioctl install --set profile=demo --set values.global.proxy.logLevel=debug

istioctl命令动态调整

istio默认使用的warning级别的日志,可以通过istioctl命令来指定sidecar修改日志级别

1
istioctl -n [namespace] proxy-config log [podname] --level debug

可以更细粒度的控制proxy的各个组件的日志级别

1
istioctl -n [namespace] proxy-config log [podname] --level grpc:trace,config:debug

当然,proxy-config也可以缩写,istioctl都可以识别到的

1
istioctl -n [namespace] pc log [podname] --level debug

envoy有提供admin的api,直接进入到容器内容curl调用接口来调整也是可以的

1
kubectl exec -n [namespace]  [podname] -c istio-proxy -- curl -XPOST -s -o /dev/null http://localhost:15000/logging?level=debug

这里istio-proxy是istio部署sidecar时固定的容器名字

可以通过一下命令查看帮助文档

1
istioctl pc log --help

annotation方式调整

可以在k8s yaml配置文件中通过annotation的方式配置日志级别

1
2
3
4
template:
metadata:
annotations:
"sidecar.istio.io/logLevel": debug # 可选: trace, debug, info, warning, error, critical, off

配置envoy componentLogLevel

我们可以在pod中指定annotation来设置envoy内部各个组件的日志级别

1
2
3
4
template:
metadata:
annotations:
"sidecar.istio.io/componentLogLevel": "ext_authz:trace,filter:debug"

执行以下命令,查看Envoy日志

1
kubectl logs xxx -c istio-proxy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"authority": "httpbin:8000",
"bytes_received": 0,
"bytes_sent": 533,
"connection_termination_details": null,
"downstream_local_address": "172.24.158.96:80",
"downstream_remote_address": "172.24.158.25:41812",
"duration": 2,
"method": "GET",
"path": "/headers",
"protocol": "HTTP/1.1",
"request_id": "ea40d320-348f-4f58-86d4-da157b0e0cca",
"requested_server_name": "outbound_.8000_._.httpbin.istio-demo.svc.cluster.local",
"response_code": 200,
"response_code_details": "via_upstream",
"response_flags": "-",
"route_name": "default",
"start_time": "2022-07-04T10:00:09.401Z",
"upstream_cluster": "inbound|80||",
"upstream_host": "172.24.158.96:80",
"upstream_local_address": "127.0.0.6:33665",
"upstream_service_time": "1",
"upstream_transport_failure_reason": null,
"user_agent": "curl/7.81.0-DEV",
"x_forwarded_for": null
}

日志详细参数

名称HTTPTCP
authority请求授权头未实现(“-”)
bytes_received接收到消息体字节数在连接上从下游接收的字节数
bytes_sent发送的包体字节数在连接上发送给下游的字节数
connection_termination_details连接中断详情连接中断详情
downstream_local_address下游连接的本地地址下游连接的本地地址
downstream_remote_address下游连接的远程地址下游连接的远程地址
duration请求从起始时间到最后一个字节发出的持续总时长(以毫秒为单位)下游连接的持续总时长(以毫秒为单位)
methodHTTP请求方法未实现(“-”)
pathHTTP请求路径未实现(“-”)
protocol协议,目前不是 HTTP/1.1 就是 HTTP/2未实现(“-”)
request_id由envoy创建的 X-REQUEST-ID 请求头的值未实现(“-”)
requested_server_name设置在 ssl 连接套接字上表示服务器名称指示 (SNI) 的字符值未实现(“-”)
response_codeHTTP 响应码未实现(“-”)
response_code_detailsTTP 响应状态码详情提供关于响应状态码的附加信息。未实现(“-”)
response_flags响应或者连接的附加详情响应或者连接的附加详情
route_name路由名路由名
start_time请求开始时间(包括毫秒)下游连接开始时间(包括毫秒)
upstream_cluster上游主机所属的上游集群上游主机所属的上游集群
upstream_host上游主机 URL上游主机 URL
upstream_local_address上游连接的本地地址上游连接的本地地址
upstream_transport_failure_reason如果上游因传输套接字而连接失败,从传输套接字中提供失败原因。未实现(“-”)
user_agentUser-Agent请求头的值未实现(“-”)
x_forwarded_forX-Forwarded-For请求头的值未实现(“-”)