- 获取 Envoy 访问日志
- 开始之前
- 开启 Envoy 访问日志
- 测试访问日志
- 清理
- 关闭 Envoy 的访问日志
- 相关内容
获取 Envoy 访问日志
Istio 最简单的日志类型是Envoy 的访问日志。Envoy 代理打印访问信息到标准输出。可以通过 kubectl logs
命令来打印 Envoy 容器的标准输出。
开始之前
按照安装指南中的说明安装 Istio。
启动 sleep 示例,以获取发送请求的测试源。
如果您启用了自动 sidecar 注入,请执行
Zip
$ kubectl apply -f @samples/sleep/sleep.yaml@
否则,在部署 sleep
应用程序前,您必须手动注入 sidecar:
Zip
$ kubectl apply -f <(istioctl kube-inject -f @samples/sleep/sleep.yaml@)
您可以使用任何安装了 curl
的 pod 作为测试源。
- 为了发送请求,您需要创建
SOURCE_POD
环境变量来存储源 pod 的名称:
$ export SOURCE_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
- 启动 httpbin 样例程序。
如果您启用了 sidecar 自动注入, 通过以下命令部署 httpbin
服务:
Zip
$ kubectl apply -f @samples/httpbin/httpbin.yaml@
否则,您必须在部署 httpbin
应用程序前进行手动注入,部署命令如下:
Zip
$ kubectl apply -f <(istioctl kube-inject -f @samples/httpbin/httpbin.yaml@)
开启 Envoy 访问日志
修改 istio
配置文件:
$ helm template install/kubernetes/helm/istio --namespace=istio-system -x templates/configmap.yaml --set global.proxy.accessLogFile="/dev/stdout" | kubectl replace -f -
configmap "istio" replaced
您也可以通过设置 accessLogEncoding
来在 JSON 和 TEXT 两种格式之间切换。
您也许希望通过 accessLogFormat
来自定义访问日志格式。
这三个参数也可以通过修改 helm values 来进行配置:
global.proxy.accessLogFile
global.proxy.accessLogEncoding
global.proxy.accessLogFormat
测试访问日志
- 从
sleep
向httpbin
发送一个请求:
$ kubectl exec -it $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c sleep -- curl -v httpbin:8000/status/418
* Trying 172.21.13.94...
* TCP_NODELAY set
* Connected to httpbin (172.21.13.94) port 8000 (#0)
> GET /status/418 HTTP/1.1
...
< HTTP/1.1 418 Unknown
< server: envoy
...
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`
* Connection #0 to host httpbin left intact
- 检查
sleep
的日志:
$ 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 -
- 检查
httpbin
的日志:
$ 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
请注意,与请求对应的消息分别出现在源(sleep
)和目标(httpbin
)的 Istio 代理日志中。您可以在日志中看到 HTTP 动词(GET
)、HTTP 路径(/status/418
)、响应编码(418
)和其他相关信息。
清理
关闭 sleep 和 httpbin 服务:
ZipZip
$ kubectl delete -f @samples/sleep/sleep.yaml@
$ kubectl delete -f @samples/httpbin/httpbin.yaml@
关闭 Envoy 的访问日志
编辑 istio
的配置信息然后设置 accessLogFile
为 ""
。
$ helm template install/kubernetes/helm/istio --namespace=istio-system -x templates/configmap.yaml | kubectl replace -f -
configmap "istio" replaced
相关内容
Mixer 适配器模型
概要说明 Mixer 的插件架构。
Egress TLS 流量中的 SNI 监控及策略
如何为 Egress TLS 流量配置 SNI 监控并应用策略。
Jaeger
了解如何配置代理以向 Jaeger 发送追踪请求。
Zipkin
了解如何配置代理以向 Zipkin 发送追踪请求。
使用 Fluentd 记录日志
此任务说明如何配置 Istio 以将日志输出到 Fluentd 守护程序。
使用 Grafana 可视化指标度量
这个任务向您展示了如何设置和使用 Istio 仪表盘来监视网格流量。