获取 Envoy 访问日志

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

开始之前

  • 按照安装指南中的说明安装 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. $ helm template install/kubernetes/helm/istio --namespace=istio-system -x templates/configmap.yaml --set global.proxy.accessLogFile="/dev/stdout" | kubectl replace -f -
  2. configmap "istio" replaced

您也可以通过设置 accessLogEncoding 来在 JSON 和 TEXT 两种格式之间切换。

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

这三个参数也可以通过修改 helm values 来进行配置:

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

测试访问日志

  • sleephttpbin 发送一个请求:
  1. $ kubectl exec -it $(kubectl get pod -l app=sleep -o jsonpath={.items..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. $ helm template install/kubernetes/helm/istio --namespace=istio-system -x templates/configmap.yaml | kubectl replace -f -
  2. configmap "istio" replaced

相关内容

Mixer 适配器模型

概要说明 Mixer 的插件架构。

Egress TLS 流量中的 SNI 监控及策略

如何为 Egress TLS 流量配置 SNI 监控并应用策略。

Jaeger

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

Zipkin

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

使用 Fluentd 记录日志

此任务说明如何配置 Istio 以将日志输出到 Fluentd 守护程序。

使用 Grafana 可视化指标度量

这个任务向您展示了如何设置和使用 Istio 仪表盘来监视网格流量。