获取 Envoy 访问日志

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

      如果您安装demo的,则将启用 Egress Gateway和访问日志。

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

      Zip

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

      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})
    • 启动 Httpbin 样例程序。

      如果您启用了 ,通过以下命令部署 httpbin 服务:

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

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

      Zip

    Istio 提供了几种启用访问日志的方法。建议使用遥测 API

    遥测 API 可以开启或关闭访问日志:

    1. apiVersion: telemetry.istio.io/v1alpha1
    2. kind: Telemetry
    3. metadata:
    4. namespace: istio-system
    5. spec:
    6. accessLogging:
    7. - providers:
    8. - name: envoy

    上面的示例使用默认的 envoy 访问日志提供程序,除了默认设置外,我们没有配置任何其他内容。

    类似的配置也可以应用于单独的名称空间或单独的工作负载,以在细粒度级别控制日志记录。

    关于使用遥测 API 的更多信息,请参见。

    如果你使用 IstioOperator CR 来安装 Istio,请在你的配置中添加以下字段:

    1. spec:
    2. meshConfig:
    3. accessLogFile: /dev/stdout

    否则,在原来的 istioctl install 命令中添加相同的设置,例如:

    1. $ istioctl install <flags-you-used-to-install-Istio> --set meshConfig.accessLogFile=/dev/stdout

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

    更多信息请参考global mesh options在这三个设置中:

    • meshConfig.accessLogFile
    • meshConfig.accessLogEncoding
    • meshConfig.accessLogFormat

    如果没有指定 accessLogFormat Istio 将使用以下默认的访问日志格式:

    下表显示了一个使用默认的访问日志格式的示例,请求从 sleep 发送到 httpbin:

    1. sleephttpbin 发送一个请求:

      1. $ kubectl exec "$SOURCE_POD" -c sleep -- curl -sS -v httpbin:8000/status/418
      2. ...
      3. < HTTP/1.1 418 Unknown
      4. < server: envoy
      5. ...
      6. -=[ teapot ]=-
      7. _...._
      8. .' _ _ `.
      9. | ."` ^ `". _,
      10. \_;`"---"`|//
      11. | ;/
      12. \_ _/
      13. `"""`
    2. 检查 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 -
    3. 检查 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) 和其他。

    关闭 sleep 和 服务:

    Zip

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

    1. $ istioctl install --set profile=default
    2. Istio core installed
    3. Istiod installed