获取envoy的访问日志
最简单的Istio日志记录是 Envoy的访问日志记录。envoy代理将访问信息打印到其标准输出中。然后可以通过kubectl logs命令打印Envoy容器的标准输出。
先决条件
如果安装demo 配置概要文件,则将启用出口网关和访问日志记录。
部署sleep示例应用程序以用作发送请求的测试源。如果 启用了自动边车注入功能,请运行以下命令来部署示例应用程序:
$ kubectl apply -f samples/sleep/sleep.yaml
否则,请在sleep使用以下命令部署应用程序之前手动注入sidecar :
$ kubectl apply -f <(istioctl kube-inject -f samples/sleep/sleep.yaml)
您可以将curl已安装的任何Pod用作测试源。
将SOURCE_POD环境变量设置为源容器的名称:
$ export SOURCE_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
如果启用了自动边车注入,请部署httpbin服务:
$ kubectl apply -f samples/httpbin/httpbin.yaml
否则,您必须在部署httpbin应用程序之前手动注入sidecar :
$ kubectl apply -f <(istioctl kube-inject -f samples/httpbin/httpbin.yaml)
启用Envoy的访问日志
如果使用IstioOperatorCR安装Istio,请在配置中添加以下字段:
spec:
meshConfig:
accessLogFile: /dev/stdout
否则,将等效设置添加到原始istioctl install命令中,例如:
$ istioctl install <flags-you-used-to-install-Istio> --set meshConfig.accessLogFile=/dev/stdout
您还可以通过设置accessLogEncoding为JSON或在JSON和文本之间进行选择TEXT。
您可能还想通过编辑自定义访问日志的 格式。accessLogFormat
有关这三个设置的更多信息,请参考全局网格选项:
meshConfig.accessLogFile meshConfig.accessLogEncoding meshConfig.accessLogFormat
测试访问日志
$ kubectl exec "$SOURCE_POD" -c sleep -- curl -v httpbin:8000/status/418
...
< HTTP/1.1 418 Unknown
< server: envoy
...
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`
$ kubectl logs -l app=sleep -c istio-proxy
[2020-10-30T12:36:44.547Z] "GET /status/418 HTTP/1.1" 418 - "-" 0 135 25 24 "-" "curl/7.69.1" "f13c2118-3ef9-9ed9-91b7-5d21358029c3" "httpbin:8000" "10.244.0.30:80" outbound|8000||httpbin.default.svc.cluster.local 10.244.0.29:46348 10.96.148.56:8000 10.244.0.29:44678 - default
$ kubectl logs -l app=httpbin -c istio-proxy
[2020-10-30T12:36:44.553Z] "GET /status/418 HTTP/1.1" 418 - "-" 0 135 3 2 "-" "curl/7.69.1" "f13c2118-3ef9-9ed9-91b7-5d21358029c3" "httpbin:8000" "127.0.0.1:80" inbound|8000|| 127.0.0.1:42940 10.244.0.30:80 10.244.0.29:46348 outbound_.8000_._.httpbin.default.svc.cluster.local default
注意,对应于该请求的消息出现在源和目的地两者的Istio代理日志,sleep和httpbin分别。您可以在日志中看到HTTP动词(GET),HTTP路径(/status/418),响应代码(418)和其他与请求相关的信息。
清理
$ kubectl delete -f samples/sleep/sleep.yaml
$ kubectl delete -f samples/httpbin/httpbin.yaml
删除或设置为Istio安装配置中""的meshConfig.accessLogFile设置。
在下面的示例中,替换default为安装Istio时使用的配置文件的名称。
$ istioctl install --set profile=default
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Installation complete