获取 Envoy 访问日志
Istio 最简单的日志类型是 Envoy 的访问日志6。Envoy 代理打印访问信息到标准输出。Envoy 容器的标准输出能够通过 kubectl logs
命令打印出来。
开始之前
按照安装指南7中的说明安装 Istio。
将 sleep9 示例应用程序部署为发送请求的测试源。 如果您启用了自动 sidecar 注入,运行以下命令部署示例应用程序:
否则,在使用以下命令部署
sleep
应用程序之前,手动注入 sidecar:为了发送请求,您需要创建
SOURCE_POD
环境变量来存储源 pod 的名称:
启动 Httpbin11 样例程序。
如果您启用了 Sidecar 自动注入,通过以下命令部署
httpbin
服务:否则,您必须在部署
httpbin
应用程序前进行手动注入,部署命令如下:
开启 Envoy 访问日志
Istio 提供了几种启用访问日志的方法。建议使用遥测 API
使用遥测 API
遥测 API 可以开启或关闭访问日志:
上面的示例使用默认的 envoy
访问日志提供程序,除了默认设置外,我们没有配置任何其他内容。
类似的配置也可以应用于单独的名称空间或单独的工作负载,以在细粒度级别控制日志记录。
关于使用遥测 API 的更多信息,请参见遥测 API 概述13。
使用网格配置
如果你使用 IstioOperator
CR 来安装 Istio,请在你的配置中添加以下字段:
否则,在原来的 istioctl install
命令中添加相同的设置,例如:
您也可以通过设置 accessLogEncoding
为 JSON
或 TEXT
来在两种格式之间切换。
您也许希望通过设置 accessLogFormat
来自定义访问日志的格式14。
更多信息请参考global mesh options在这三个设置中:
meshConfig.accessLogFile
meshConfig.accessLogEncoding
meshConfig.accessLogFormat
默认访问日志格式
如果没有指定 accessLogFormat
Istio 将使用以下默认的访问日志格式:
下表显示了一个使用默认的访问日志格式的示例,请求从 sleep
发送到 httpbin
:
Log operator | access log in sleep | access log in httpbin |
---|---|---|
[%START_TIME%] | [2020-11-25T21:26:18.409Z] | [2020-11-25T21:26:18.409Z] |
\"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" | "GET /status/418 HTTP/1.1" | "GET /status/418 HTTP/1.1" |
%RESPONSE_CODE% | 418 | 418 |
%RESPONSE_FLAGS% | - | - |
%RESPONSE_CODE_DETAILS% | via_upstream | via_upstream |
%CONNECTION_TERMINATION_DETAILS% | - | - |
\"%UPSTREAM_TRANSPORT_FAILURE_REASON%\" | "-" | "-" |
%BYTES_RECEIVED% | 0 | 0 |
%BYTES_SENT% | 135 | 135 |
%DURATION% | 4 | 3 |
%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% | 4 | 1 |
\"%REQ(X-FORWARDED-FOR)%\" | "-" | "-" |
\"%REQ(USER-AGENT)%\" | "curl/7.73.0-DEV" | "curl/7.73.0-DEV" |
\"%REQ(X-REQUEST-ID)%\" | "84961386-6d84-929d-98bd-c5aee93b5c88" | "84961386-6d84-929d-98bd-c5aee93b5c88" |
\"%REQ(:AUTHORITY)%\" | "httpbin:8000" | "httpbin:8000" |
\"%UPSTREAM_HOST%\" | "10.44.1.27:80" | "127.0.0.1:80" |
%UPSTREAM_CLUSTER% | outbound|8000||httpbin.foo.svc.cluster.local | inbound|8000|| |
%UPSTREAM_LOCAL_ADDRESS% | 10.44.1.23:37652 | 127.0.0.1:41854 |
%DOWNSTREAM_LOCAL_ADDRESS% | 10.0.45.184:8000 | 10.44.1.27:80 |
%DOWNSTREAM_REMOTE_ADDRESS% | 10.44.1.23:46520 | 10.44.1.23:37652 |
%REQUESTED_SERVER_NAME% | - | outbound_.8000_._.httpbin.foo.svc.cluster.local |
%ROUTE_NAME% | default | default |
测试访问日志
从
sleep
向httpbin
发送一个请求:检查
sleep
的日志:检查
httpbin
的日志:
请注意,与请求相对应的信息分别出现在源(sleep
)和目标(httpbin
)的 Istio 代理日志中。您可以在日志中看到 HTTP 动词(GET
)、HTTP 路径(/status/418
)、响应码(418
) 和其他请求相关信息14。
清除
关闭 Envoy 的访问日志
编辑 istio
配置文件然后设置 meshConfig.accessLogFile
为 ""
。