我希望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中?
答案 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中,所有stdout
和stderr
都获得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。