获取 Envoy 访问日志

Istio 最简单的日志类型是Envoy 的访问日志。Envoy 代理打印访问信息到标准输出。Envoy 容器的标准输出能够通过 kubectl logs 命令打印出来。

开始之前

  • 按照安装指南中的说明安装 Istio。

  • 启动 sleep 示例,以获取发送请求的测试源。如果您启用了自动 sidecar 注入,运行以下命令部署示例应用程序:

Zip

  1. $ kubectl apply -f @samples/sleep/sleep.yaml@

否则,在使用以下命令部署 sleep 应用程序之前,手动注入 sidecar:

Zip

  1. $ kubectl apply -f <(istioctl kube-inject -f @samples/sleep/sleep.yaml@)

您可以使用任何安装了 curl 的 pod 作为测试源。

  • 为了发送请求,您需要创建 SOURCE_POD 环境变量来存储源 pod 的名称:
  1. $ export SOURCE_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})

如果您启用了 sidecar 自动注入,通过以下命令部署 httpbin 服务:

Zip

  1. $ kubectl apply -f @samples/httpbin/httpbin.yaml@

否则,您必须在部署 httpbin 应用程序前进行手动注入,部署命令如下:

Zip

  1. $ kubectl apply -f <(istioctl kube-inject -f @samples/httpbin/httpbin.yaml@)

开启 Envoy 访问日志

修改 istio 配置文件:

  1. $ istioctl manifest apply --set values.global.proxy.accessLogFile="/dev/stdout"
  2. configmap "istio" replaced

您也可以通过设置 accessLogEncodingJSONTEXT 来在两种格式之间切换。

您也许希望通过设置 accessLogFormat 来自定义访问日志的格式

这三种参数也可以通过安装选项来进行配置:

  • global.proxy.accessLogFile
  • global.proxy.accessLogEncoding
  • global.proxy.accessLogFormat

测试访问日志

  • sleephttpbin 发送一个请求:
  1. $ kubectl exec -it $(kubectl get pod -l app=sleep -o jsonpath='{.items[0].metadata.name}') -c sleep -- curl -v httpbin:8000/status/418
  2. * Trying 172.21.13.94...
  3. * TCP_NODELAY set
  4. * Connected to httpbin (172.21.13.94) port 8000 (#0)
  5. > GET /status/418 HTTP/1.1
  6. ...
  7. < HTTP/1.1 418 Unknown
  8. < server: envoy
  9. ...
  10. -=[ teapot ]=-
  11. _...._
  12. .' _ _ `.
  13. | ."` ^ `". _,
  14. \_;`"---"`|//
  15. | ;/
  16. \_ _/
  17. `"""`
  18. * Connection #0 to host httpbin left intact
  • 检查 sleep 的日志:
  1. $ kubectl logs -l app=sleep -c istio-proxy
  2. [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 的日志:
  1. $ kubectl logs -l app=httpbin -c istio-proxy
  2. [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)和其他请求相关信息

清除

关闭 sleephttpbin 服务:

ZipZip

  1. $ kubectl delete -f @samples/sleep/sleep.yaml@
  2. $ kubectl delete -f @samples/httpbin/httpbin.yaml@

关闭 Envoy 的访问日志

编辑 istio 配置文件然后设置 accessLogFile""

  1. $ istioctl manifest apply
  2. configmap "istio" replaced

相关内容

Mixer 和 SPOF 神话

提高可用,降低延迟。

Mixer 适配器模型

概要说明 Mixer 的插件架构。

Jaeger

了解如何配置代理以向 Jaeger 发送追踪请求。

LightStep

怎样配置代理才能把追踪请求发送到 LightStep。

Mixer 配置模型

描述 Istio 策略执行和遥测机制的配置模型。

TLS Egress 监控和策略配置

描述如何在 TLS Egress 上配置 SNI 监控和策略。