在GKE上使用Istio获取Envoy访问日志

时间:2019-07-17 15:04:30

标签: google-kubernetes-engine istio stackdriver google-cloud-stackdriver envoyproxy

我希望Envoy的Istio访问日志(即记录每个HTTP请求的日志)显示在Stackdriver日志中。我尝试按照https://istio.io/docs/tasks/telemetry/logs/access-log/中的步骤进行操作。但是,GKE上Istio的默认accessLogFile设置似乎是空的,如果我尝试用kubectl edit configmap -n istio-system istio进行更改,则系统会在几分钟后将其重置。

是否可以将GKE的访问日志上的Istio推送到Stackdriver中?

2 个答案:

答案 0 :(得分:3)

对于Istio的Google托管版本(通过选中GKE群集上的复选框启用),默认情况下,版本1.13和更高版本的访问日志处于禁用状态,配置映射为accessLogFile: ""。在1.12或更早版本上,访问日志默认情况下处于启用状态,因此configmap具有accessLogFile: "/dev/stdout"

如前所述,您无法更改它,因为对帐会清除更改。

我与Google一起记录了一个支持案例,以找出最佳方法,他们建议改为使用Mixer日志。要访问它们,您需要在GKE集群上启用Stackdriver(旧的或更新的Kubernetes Engine监视)。然后,您可以使用过滤器logName="projects/[PROJECT-NAME]/logs/server-accesslog-stackdriver.logentry.istio-system"

要查看两个服务之间的请求,可以使用此Stackdriver查询:

logName="projects/[PROJECT-NAME]/logs/server-accesslog-stackdriver.logentry.istio-system"
labels.destination_app="[YOUR-SERVICE]"
labels.source_app="[YOUR-OTHER-SERVICE]"

要查看来自GKE外部并流经Istio Ingress网关的请求,请执行以下操作:

logName="projects/[YOUR-PROJECT]/logs/server-accesslog-stackdriver.logentry.istio-system"
labels.destination_app="[YOUR-SERVICE]"
labels.source_app="istio-ingressgateway"

这些日志不是100%等效于代理访问日志,并且可能无法帮助解决所有情况。 Google提出了一项功能请求,以支持对Istio配置图的自定义,其中包括accessLogFile设置:https://issuetracker.google.com/issues/126527530

我建议对此功能感兴趣的人都应该通过添加星号来为其投票。

希望有帮助!

答案 1 :(得分:0)

在GKE中,所有stdoutstderr都获得documentation,以便稍后通过Fluentd解析并导出到Stackdriver中。

使用kubectl logs命令可以访问访问日志,这意味着它们位于节点中,并且正在使用Fluentd代理进行解析和导出。

我复制了此文件,并可以使用以下collected and sent to the node's log-rotate查找访问日志(根据您自己的资源进行更改):

resource.type="container"
resource.labels.cluster_name="gke-cluster"
resource.labels.namespace_id="application-namespace"
resource.labels.project_id="project-id"
resource.labels.zone:"gcp-zone1-a"
resource.labels.container_name="istio-proxy"
resource.labels.pod_id:"sleep-"

重要的一行是resource.labels.container_name="istio-proxy",用于查询 istio-proxy 容器,并使用resource.labels.pod_id:"sleep-"查看感兴趣的pod的每个副本。

关于configMap,由于GKE是托管的Kubernetes实现,因此您不应更改许多配置,包括Fluentd。 对帐循环将自动重置对这些资源的任何更改。

如果确实需要,可以在使用GKE时部署自己的Stackdriver advaced filter的Fluentd。