7.1 KiB
title | description | weight | keywords | aliases | owner | test | ||||
---|---|---|---|---|---|---|---|---|---|---|
获取 Envoy 访问日志 | 此任务向您展示如何配置 Envoy 代理将访问日志打印到其标准输出。 | 10 |
|
|
istio/wg-policies-and-telemetry-maintainers | yes |
Istio 最简单的日志类型是
Envoy 的访问日志。
Envoy 代理打印访问信息到标准输出。Envoy 容器的标准输出能够通过 kubectl logs
命令打印出来。
{{< boilerplate before-you-begin-egress >}}
{{< boilerplate start-httpbin-service >}}
开启 Envoy 访问日志
Istio 提供了几种启用访问日志的方法,建议使用 Telemetry API。
使用 Telemetry API
Telemetry API 可以开启或关闭访问日志:
{{< text yaml >}} apiVersion: telemetry.istio.io/v1 kind: Telemetry metadata: name: mesh-default namespace: istio-system spec: accessLogging: - providers: - name: envoy {{< /text >}}
上面的示例使用默认的 envoy
访问日志提供程序,除了默认设置外,我们没有配置任何其他内容。
类似的配置也可以应用于单独的命名空间或单独的工作负载,以在细粒度级别控制日志记录。
关于使用 Telemetry API 的更多信息,请参见 Telemetry API 概述。
使用网格配置
如果您使用 IstioOperator
CR 来安装 Istio,请在您的配置中添加以下字段:
{{< text yaml >}} spec: meshConfig: accessLogFile: /dev/stdout {{< /text >}}
或者,在原来的 istioctl install
命令中添加相同的设置,例如:
{{< text syntax=bash snip_id=none >}} $ istioctl install --set meshConfig.accessLogFile=/dev/stdout {{< /text >}}
您也可以通过设置 accessLogEncoding
为 JSON
或 TEXT
来在两种格式之间切换。
您也许希望通过设置 accessLogFormat
来自定义访问日志的格式。
有关所有这三个设置的更多信息,请参阅 global mesh options:
meshConfig.accessLogFile
meshConfig.accessLogEncoding
meshConfig.accessLogFormat
默认访问日志格式
如果没有指定 accessLogFormat
Istio 将使用以下默认的访问日志格式:
{{< text plain >}} [%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESPONSE_FLAGS% %RESPONSE_CODE_DETAILS% %CONNECTION_TERMINATION_DETAILS% "%UPSTREAM_TRANSPORT_FAILURE_REASON%" %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%" %UPSTREAM_CLUSTER% %UPSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_REMOTE_ADDRESS% %REQUESTED_SERVER_NAME% %ROUTE_NAME%\n {{< /text >}}
下表显示了一个使用默认的访问日志格式的示例,请求从 sleep
发送到 httpbin
:
日志运算符 | sleep 中的访问日志 | 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
发送一个请求:{{< text bash >}} $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sS -v httpbin:8000/status/418 ... < HTTP/1.1 418 Unknown < server: envoy ...
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
{{< /text >}}
-
检查
sleep
的日志:{{< text bash >}} $ kubectl logs -l app=sleep -c istio-proxy [2019-03-06T09:31:27.354Z] "GET /status/418 HTTP/1.1" 418 - "-" 0 135 11 10 "-" "curl/7.60.0" "d209e46f-9ed5-9b61-bbdd-43e22662702a" "httpbin:8000" "172.30.146.73:80" outbound|8000||httpbin.default.svc.cluster.local - 172.21.13.94:8000 172.30.146.82:60290 - {{< /text >}}
-
检查
httpbin
的日志:{{< text bash >}} $ kubectl logs -l app=httpbin -c istio-proxy [2019-03-06T09:31:27.360Z] "GET /status/418 HTTP/1.1" 418 - "-" 0 135 5 2 "-" "curl/7.60.0" "d209e46f-9ed5-9b61-bbdd-43e22662702a" "httpbin:8000" "127.0.0.1:80" inbound|8000|http|httpbin.default.svc.cluster.local - 172.30.146.73:80 172.30.146.82:38618 outbound_.8000_._.httpbin.default.svc.cluster.local {{< /text >}}
请注意,与请求相对应的信息分别出现在源(sleep
)和目标(httpbin
)的 Istio
代理日志中。您可以在日志中看到 HTTP 动词(GET
)、HTTP 路径(/status/418
)、
响应码(418
)和其他请求相关信息。
清理
{{< text bash >}} $ kubectl delete -f @samples/sleep/sleep.yaml@ $ kubectl delete -f @samples/httpbin/httpbin.yaml@ {{< /text >}}
关闭 Envoy 的访问日志
编辑 istio
配置文件然后设置 meshConfig.accessLogFile
为 ""
。
{{< tip >}}
在下面的例子中,将 default
替换为安装 Istio 时使用的配置文件的名称。
{{< /tip >}}
{{< text bash >}} $ istioctl install --set profile=default ✔ Istio core installed ✔ Istiod installed ✔ Ingress gateways installed ✔ Installation complete {{< /text >}}