GKE 日志查询实战:基于 Cloud Logging LQL 的 GKE 资源类型、审计日志与 58 个可复用查询模式
2026/9/13 21:44:13 网站建设 项目流程

GKE 日志查询实战:基于 Cloud Logging LQL 的 GKE 资源类型、审计日志与 58 个可复用查询模式

【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills

在 Google Kubernetes Engine(GKE)集群排障中,最常见的难题不是"查不到日志",而是"不知道该去哪个日志源查"。GKE 的日志分散在容器 stdout/stderr、Pod 事件、节点系统日志、控制平面组件日志以及 Google Cloud 审计日志等多个resource.type之下。本文基于仓库中 cloud-logging-query-generation 技能的 GKE 参考文档,系统讲解 GKE 日志的资源类型体系与四种结构性查询模式,并完整收录文档中的 58 个可直接复制的 Logging Query Language(LQL)查询示例,覆盖集群事件、控制平面审计、调度/OOM/Kubelet 排障、容器错误日志检索、TPU 节点与 GKE Job/JobSet 日志归集、节点自愈与集群删除审计等场景。读完后,你可以直接针对任意 GKE 排障需求写出精确的 LQL 查询。

一、先选对 resource.type:GKE 日志的资源类型体系

GKE 日志按产生者拆分为多个resource.type值。任何 GKE 查询的第一步都应该是把查询约束到正确的资源类型上,然后再去搜日志内容(payload),这是该参考文档给出的核心原则。

资源类型速查

资源类型用途典型场景
k8s_container工作负载发出的应用日志非结构化日志(textPayload)与结构化 JSON 日志(jsonPayload),调试应用的最常用类型
k8s_podPod 生命周期事件驱逐(eviction)、调度间隙(scheduling gap)、就绪探针(readiness probe)
k8s_node基础设施级节点事件kubelet 错误、容器运行时日志、节点自动修复
k8s_cluster/gke_cluster控制平面日志与集群级操作Kubernetes 原生组件(API server、scheduler、controller-manager)写k8s_cluster;GCP 基础设施操作(如删除 GKE 集群本身)写gke_cluster

一个关键区分点:k8s_clustergke_cluster并存。集群内部发生的事(Pod 创建、Namespace 变更、API server 行为)记录在k8s_cluster上;而 GKE 集群作为一个 Google Cloud 资源被创建、修复、删除时,则由gke_cluster承载。后文的示例查询会反复体现这一区分。

二、四种结构性查询模式

参考文档将高频需求归纳为四种模式,掌握模式比死记查询更重要,因为绝大多数 GKE 日志需求都可以映射到这四种结构。

模式 1:应用日志(stdout / stderr)

当需求形如"我的应用里有哪些 error"、"foo-pod 的日志"、"某容器的 stdout"时:

  • 目标resource.type="k8s_container"
  • resource.labels.pod_nameresource.labels.container_nameresource.labels.namespace_name过滤;
  • 原始日志字符串位于textPayload(非结构化)或jsonPayload(结构化 JSON 记录)。

示例:查看某个 Pod 的错误容器日志:

resource.type="k8s_container" AND resource.labels.pod_name="<POD_NAME>" AND severity=ERROR

模式 2:Kubernetes 事件

当需求形如"Pod 驱逐"、"节点扩缩容"、"BackOff 事件"时:

  • log_id("events")过滤;
  • jsonPayload.reason(例如"Evicted""FailedScheduling""BackOff")和jsonPayload.message内搜索。

示例:Pod 驱逐事件:

resource.type="k8s_pod" AND log_id("events") AND jsonPayload.reason="Evicted"

模式 3:系统与控制平面日志

调试 GKE 内部基础设施组件(ingress controller、kube-dns 等)时:

  • 目标是kube-system命名空间:resource.labels.namespace_name="kube-system"
  • 控制平面组件通常记录在k8s_cluster资源类型下。

模式 4:Google Cloud 审计日志 vs Kubernetes 审计日志

这是 GKE 审计中最容易混淆的地方,参考文档给出了清晰的判定规则:

  • 审计基础设施本身(比如"谁创建了这个 GKE 集群")→ 属于通用 Google Cloud API 审计日志,走gke_cluster等资源类型;
  • 审计集群内部(比如"谁删除了某个 Namespace 或 Pod")→ 目标resource.type="k8s_cluster",用log_id("cloudaudit.googleapis.com/activity")(或data_access)过滤,并在protoPayload.methodName中搜索原生 Kubernetes API 字符串(例如"io.k8s.core.v1.namespaces.create")。

关于protoPayload各字段的完整语义(principalEmailcallerIpauthorizationInfostatus.code等),可继续参考同技能下的 审计日志参考。其中一条与 GKE 排障直接相关的规则是:查找失败用protoPayload.status.code!=0(0 表示成功),这正是后文"控制平面错误(排除正常 Conflict)"查询的写法依据。

三、易踩的坑:用户自定义 Kubernetes 标签的存储方式

这是参考文档专门点名的 gotcha,值得单独强调:

当你按自定义的 Kubernetes Pod 标签(如app: my-apptier: backend)过滤时,不要去resource.labels找,也不要找labels.app这类"无包装"键名。Cloud Logging 把自定义 Kubernetes 元数据存放在全局labels对象中,并自动加上"k8s-pod/"前缀。

  • 正确写法:labels."k8s-pod/app"="my-app"

注意这里字段路径包含点号,按 LQL 语法参考 的规则,含特殊字符(斜杠、点号)的字段路径必须整体放在双引号内。此外,labels中的其他前缀键也遵循类似规律,例如:

  • 节点名:labels."compute.googleapis.com/resource_name"(见下文"按节点过滤容器日志");
  • GKE Job 名:labels."k8s-pod/batch.kubernetes.io/job-name"
  • JobSet 名:labels."k8s-pod/jobset_sigs_k8s_io/jobset-name"
  • Skaffold 开发标识:labels."k8s-pod/skaffold_dev/run-id"

四、示例查询全集(58 个,按场景分组)

以下查询完整继承自参考文档。所有变量以<UPPER_SNAKE_CASE>占位,替换后即可在 Cloud Logging 控制台(或gcloud logging read)中使用。LQL 通用规则:字符串字面量必须用双引号,布尔运算符AND/OR/NOT全大写,用括号显式分组——这些是 技能主文档 中列出的核心规则。

4.1 集群范围与集群操作审计

指定 Google Cloud 位置的集群日志(变量:<LOCATION>):

resource.type="k8s_cluster" AND resource.labels.location="<LOCATION>"

GKE 集群操作(GCP 审计视角)

resource.type="gke_cluster" AND log_id("cloudaudit.googleapis.com/activity")

GKE 集群创建

resource.type="gke_cluster" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.methodName="google.container.v1.ClusterManager.CreateCluster"

Kubernetes 集群上的 deployment 操作(集群内部视角):

resource.type="k8s_cluster" AND log_id("cloudaudit.googleapis.com/activity") AND SEARCH(protoPayload.methodName, "deployments")

集群认证失败(匿名用户请求)

resource.type="k8s_cluster" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.authenticationInfo.principalEmail="system:anonymous"

指定区域(us-central1-b)的集群操作与事件

resource.type="k8s_cluster" AND resource.labels.location="us-central1-b"

某用户发起的 Pod 请求(变量:<USER_EMAIL>):

resource.type="k8s_cluster" AND log_id("cloudaudit.googleapis.com/activity") AND SEARCH(protoPayload.methodName, "io.k8s.core.v1.pods") AND protoPayload.authenticationInfo.principalEmail="<USER_EMAIL>"

集群删除事件(变量:<CLUSTER_NAME>):

resource.type="gke_cluster" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND SEARCH(protoPayload.methodName, "DeleteCluster")

这里有一个与 技能主文档 规则呼应的细节:当不确定methodName的完整版本前缀时(例如DeleteCluster可能带版本前缀),技能要求使用范围限定的SEARCH()函数而非精确匹配,避免版本前缀不匹配导致漏查,同时明确不要用冒号运算符(:),因为它可能产生子串误报。上文"集群创建"示例中已知完整方法名google.container.v1.ClusterManager.CreateCluster,故用=精确匹配;"集群删除"示例则展示了SEARCH()的写法。两种写法在原文档中并存,正体现了这条规则。

4.2 Pod 与命名空间级审计

Kubernetes 事件总览

resource.type="k8s_cluster" AND log_id("events")

Kubernetes Endpoints 更新

resource.type="k8s_cluster" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.request.kind="Endpoints"

Pod 创建/删除审计(正则同时匹配两种方法名):

resource.type="k8s_cluster" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.methodName=~"io\.k8s\.core\.v1\.pods\.(create|delete)"

注意=~使用的是 RE2 语法正则,且未锚定,因此需要对点号显式转义。

控制平面来源的 Pod 审计日志(变量:<CLUSTER_LOCATION><CLUSTER_NAME><POD_NAME><POD_NAMESPACE>):

resource.type="k8s_cluster" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.resourceName="core/v1/namespaces/<POD_NAMESPACE>/pods/<POD_NAME>"

Pod 驱逐审计(变量:<CLUSTER_LOCATION><CLUSTER_NAME>):

resource.type="k8s_cluster" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.methodName="io.k8s.core.v1.pods.eviction.create"

节点审计日志(变量同上):

resource.type="k8s_cluster" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("cloudaudit.googleapis.com/activity") AND SEARCH(protoPayload.methodName, "io.k8s.core.v1.nodes")

Addon Manager 活动(系统组件视角,变量同上):

resource.type="k8s_cluster" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.authenticationInfo.principalEmail="system:addon-manager"

控制平面错误(排除正常的 Conflict)(变量同上):

resource.type="k8s_cluster" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.status.message!="Conflict" AND protoPayload.status.code!=0

这个查询排除了乐观锁冲突(Conflict在并发写入的 K8s 集群中属正常噪音),只保留status.code!=0的真正错误,是控制平面健康巡检的实用模板。

Pod IP 分配与释放(变量:<CLUSTER_NAME><POD_NAME>):

resource.type="k8s_cluster" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND protoPayload.resourceName:"<POD_NAME>" AND ((protoPayload.methodName="io.k8s.core.v1.pods.status.patch" AND protoPayload.request.status.podIP:*) OR (protoPayload.methodName="io.k8s.core.v1.pods.delete" AND protoPayload.response.status.podIP:*))

这里用到了:*通配符做"字段存在性检查":podIP:*表示"该字段存在任意值",用于识别"这次 patch 就是分配 IP"以及"删除时释放的 IP"两个方向。这一语法在 LQL 语法参考 中定义为 Field-Exists Check。

4.3 控制平面日志与组件事件

控制平面日志(K8s 原生组件视角)

resource.type="k8s_cluster" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.serviceName="k8s.io"

控制平面日志(GKE 引擎视角)

resource.type="k8s_cluster" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.serviceName="container.googleapis.com"

这两个查询通过protoPayload.serviceName区分"Kubernetes 自身 API 活动"与"Google 容器引擎侧活动",配合前文gke_cluster的查询,构成三层控制平面审计视图。

控制平面组件日志(API server / Scheduler / Controller Manager)。与k8s_cluster的审计日志不同,这三条查询使用的是k8s_control_plane_component资源类型,直接检索组件自身的运行日志(变量:<CLUSTER_LOCATION><CLUSTER_NAME>):

resource.type="k8s_control_plane_component" AND resource.labels.component_name="apiserver" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>"
resource.type="k8s_control_plane_component" AND resource.labels.component_name="scheduler" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>"
resource.type="k8s_control_plane_component" AND resource.labels.component_name="controller-manager" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>"

Ingress Controller 事件(变量同上):

resource.type="k8s_cluster" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("events") AND jsonPayload.source.component="loadbalancer-controller"

Service Controller 事件(kube-controller-manager)(变量同上):

resource.type="k8s_cluster" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("events") AND jsonPayload.source.component="service-controller"

Cluster Autoscaler 事件(变量同上):

resource.type="k8s_cluster" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("events") AND jsonPayload.source.component="cluster-autoscaler"

Cluster Autoscaler 扩容失败(visibility logs)(变量同上):

resource.type="k8s_cluster" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("container.googleapis.com/cluster-autoscaler-visibility") AND jsonPayload.resultInfo.results.errorMsg.messageId:"scale.up"

注意这条查询的log_idcontainer.googleapis.com/cluster-autoscaler-visibility——GKE 专门为 Autoscaler 扩容失败提供了独立的可视化日志流,比普通 events 里翻BackOff/FailedScheduling更直接。

4.4 调度、节点与内存排障

查询某 Pod 创建期间的事件(变量:<POD_NAME>):

resource.type="k8s_pod" AND resource.labels.pod_name="<POD_NAME>" AND log_id("events")

调度器事件(变量:<CLUSTER_LOCATION><CLUSTER_NAME>):

resource.type="k8s_pod" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("events") AND jsonPayload.source.component="default-scheduler"

调度器抢占事件(Preemption)(变量同上):

resource.type="k8s_pod" AND resource.labels.location="<CLUSTER_LOCATION>" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("events") AND jsonPayload.source.component="default-scheduler" AND jsonPayload.reason="Preempted"

节点事件

resource.type="k8s_node" AND log_id("events")

OOM 事件(原因字段与消息字段双路命中):

resource.type="k8s_node" log_id("events") (jsonPayload.reason:("OOMKilling" OR "SystemOOM") OR jsonPayload.message:("OOM encountered" OR "out of memory"))

这里jsonPayload.reason:("OOMKilling" OR "SystemOOM")是对一组值做子串匹配(冒号运算符支持右侧括号值列表),与=精确匹配不同,能容忍事件消息中的措辞差异。

4.5 节点系统日志(Kube-proxy、容器运行时、Kubelet)

Kube-proxy 日志

resource.type="k8s_node" AND log_id("kube-proxy")

容器运行时(dockerd)日志

resource.type="k8s_node" AND log_id("container-runtime")

Kubelet 错误或失败

resource.type="k8s_node" AND log_id("kubelet") AND jsonPayload.MESSAGE:("error" OR "fail")

GKE 系统日志的全量节点日志视图——一次性覆盖节点侧 10 个日志流:

resource.type = "k8s_node" AND logName:( "logs/container-runtime" OR "logs/docker" OR "logs/kube-container-runtime-monitor" OR "logs/kube-logrotate" OR "logs/kube-node-configuration" OR "logs/kube-node-installation" OR "logs/kubelet" OR "logs/kubelet-monitor" OR "logs/node-journal" OR "logs/node-problem-detector")

log_id()函数配合使用logName字段过滤,是当需要跨多个节点侧日志流做统一巡检时的写法。

GKE 系统组件的容器/Pod 日志(覆盖 9 个系统命名空间):

resource.type = ("k8s_container" OR "k8s_pod") AND resource.labels.namespace_name = ( "cnrm-system" OR "config-management-system" OR "gatekeeper-system" OR "gke-connect" OR "gke-system" OR "istio-system" OR "knative-serving" OR "monitoring-system" OR "kube-system")

4.6 容器日志精细化检索(全文档最高频的一组查询)

全集群 stdout 容器日志

resource.type="k8s_container" AND log_id("stdout")

全集群容器错误日志(stderr + ERROR 级)

resource.type="k8s_container" AND log_id("stderr") AND severity=ERROR

指定 Pod 的错误日志(变量:<POD_NAME>):

resource.type="k8s_container" AND resource.labels.pod_name="<POD_NAME>" AND severity=ERROR

指定 Pod 内指定容器的错误日志(变量:<POD_NAME>):

resource.type="k8s_container" AND resource.labels.pod_name="<POD_NAME>" AND resource.labels.container_name="server" AND severity=ERROR

指定命名空间与容器的错误日志

resource.type="k8s_container" AND resource.labels.namespace_name="istio-system" AND resource.labels.container_name="egressgateway" AND severity=ERROR

按 Pod 自定义标签过滤(对应第三节的k8s-pod/前缀规则):

resource.type="k8s_container" AND labels."k8s-pod/app"="loadgenerator" AND severity=ERROR

按节点过滤容器错误日志(变量:<NODE_NAME>):

resource.type="k8s_container" AND labels."compute.googleapis.com/resource_name"="<NODE_NAME>" AND severity=ERROR

按 Skaffold 运行标识过滤(变量:<SKAFFOLD_RUN_ID>)——本地开发反复部署时隔离每次 run 的日志:

resource.type="k8s_container" AND labels."k8s-pod/app"="loadgenerator" AND labels."k8s-pod/skaffold_dev/run-id"="<SKAFFOLD_RUN_ID>" AND severity=ERROR

按日志内容检索:非结构化文本。在指定 Pod 的textPayload中搜POST(变量:<POD_NAME>):

resource.type="k8s_container" AND resource.labels.pod_name="<POD_NAME>" AND textPayload:"POST" AND severity=ERROR

按日志内容检索:结构化 JSON。在指定 Pod 的结构化日志中精确匹配字段http.req.method(变量:<POD_NAME>):

resource.type="k8s_container" AND resource.labels.pod_name="<POD_NAME>" AND jsonPayload."http.req.method"="GET" AND severity=ERROR

注意jsonPayload."http.req.method"中字段名含点号需要加双引号;同时按 LQL 语法参考 的说明,映射到 struct/map 的字段路径是大小写敏感的,http.req.method必须与日志实际 key 完全一致。

kube-system 命名空间的容器错误

resource.type="k8s_container" AND resource.labels.namespace_name="kube-system" AND severity=ERROR

Container Insights 错误(Cloud Error Reporting 洞察)

resource.type="k8s_container" AND log_id("clouderrorreporting.googleapis.com/insights")

按容器名查日志(变量:<CONTAINER_NAME>):

resource.type="k8s_container" AND resource.labels.container_name="<CONTAINER_NAME>"

4.7 TPU 节点与批处理作业日志归集

同前缀 TPU 节点的 stdout 日志(变量:<TPU_NODE_PREFIX>,节点名正则前缀匹配):

resource.type="k8s_container" AND labels."compute.googleapis.com/resource_name"=~"<TPU_NODE_PREFIX>.*" AND log_id("stdout")

同前缀 TPU 节点的容器错误日志(变量同上):

resource.type="k8s_container" AND labels."compute.googleapis.com/resource_name"=~"<TPU_NODE_PREFIX>.*" AND log_id("stderr") AND severity=ERROR

TPU 训练任务的节点名通常共享前缀(如tpu-worker-...),用=~前缀正则一次性归集所有副本的日志,是分布式训练排障的常用手法。

同一 GKE Job 的 stdout 日志(变量:<JOB_NAME>,借助 Job 自动注入的 Pod 标签):

resource.type="k8s_container" AND labels."k8s-pod/batch.kubernetes.io/job-name" = "<JOB_NAME>" AND log_id("stdout")

同一 GKE Job 的容器错误日志(变量同上):

resource.type="k8s_container" AND labels."k8s-pod/batch.kubernetes.io/job-name"="<JOB_NAME>" AND log_id("stderr") AND severity=ERROR

同一 GKE JobSet 的 stdout 日志(变量:<JOBSET_NAME>):

resource.type="k8s_container" AND labels."k8s-pod/jobset_sigs_k8s_io/jobset-name"="<JOBSET_NAME>" AND log_id("stdout")

同一 GKE JobSet 的容器错误日志(变量同上):

resource.type="k8s_container" AND labels."k8s-pod/jobset_sigs_k8s_io/jobset-name"="<JOBSET_NAME>" AND log_id("stderr") AND severity=ERROR

Job/JobSet 查询之所以能只凭作业名归集全部 Pod 的日志,正是因为 Kubernetes 会给 Job 派生的 Pod 打上batch.kubernetes.io/job-name等标签,而 Cloud Logging 又把这些标签以k8s-pod/前缀镜像到全局labels中——再次验证了第三节标签 gotcha 的普适性。

4.8 节点自愈与集群级事件

节点自动修复事件(变量:<CLUSTER_NAME>)——注意这里资源类型是gke_nodepool,属于 GCP 基础设施侧审计,而非集群内部:

resource.type="gke_nodepool" AND resource.labels.cluster_name="<CLUSTER_NAME>" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.methodName="google.container.v1.ClusterManager.RepairNodePool"

集群删除事件见 4.1 节(gke_cluster+SEARCH(protoPayload.methodName, "DeleteCluster"))。

五、配套 LQL 语法要点与使用建议

为让上述查询可独立复现,这里汇总 GKE 查询实际用到的 LQL 语法要点(完整规则见 api_reference.md):

  1. 比较运算符=!=><>=<=:(子串搜索)、=~(RE2 正则)、!~(正则不匹配)。运算符右侧支持括号值列表,如jsonPayload.reason=("Evicted" OR "FailedScheduling")
  2. 字段存在性field:*检查字段是否存在(Pod IP 查询中的podIP:*)。
  3. SEARCH 函数SEARCH()接收单个字符串字面量,做大小写不敏感的 token 化子串搜索;SEARCH(field, "kw")可限定字段。不要向 SEARCH 传布尔表达式,多个关键词用SEARCH("a") OR SEARCH("b")组合。
  4. 正则=~使用 RE2 语法、大小写敏感、默认不锚定;需要锚定时显式写^/$,大小写不敏感时加(?i)
  5. 时间范围timestamp >= "2023-11-29T23:00:00Z"(严格 RFC 3339),或日期快捷写法timestamp > "2023-11-29"
  6. 内置函数log_id()(匹配日志 ID,GKE 查询中出现频率最高)、source()(按资源层级)、sample(insertId, 0.01)(确定性抽样,适合全集群日志量过大时先用 1% 抽样定位模式再放大)。
  7. 占位符纪律:技能主文档 强调"绝不要因缺少变量而阻塞"——请求中缺项目 ID、Pod 名等标识符时直接插入<UPPERCASE>占位符;若某过滤条件对查询成立并非严格必需(例如用户未指定实例时的resource.labels.instance_id="..."),则应整行省略该过滤,而不是留下占位符,因为占位符会成为显式过滤条件导致漏查日志。

使用上的三条经验,均由文档结构直接支撑:

  • resource.type+log_id,后 payload:所有 58 个示例无一例外地以资源类型开头,控制扫描范围后再叠加内容条件;
  • 区分"集群内视角"与"Google Cloud 视角":前者查k8s_cluster(K8s API 字符串),后者查gke_cluster/gke_nodepool(GKE API 方法名如google.container.v1.ClusterManager.*);
  • 错误检索三件套severity=ERROR(日志级别)、jsonPayload.reason(K8s 事件原因码)、protoPayload.status.code!=0(API 审计失败),三者分别对应容器日志、K8s 事件、审计日志三类日志源。

六、小结

GKE 在 Cloud Logging 中的日志版图可以概括为一张映射表:应用排障 →k8s_container+textPayload/jsonPayload;Pod 生命周期 →k8s_pod+log_id("events");节点排障 →k8s_node+ 各组件log_id;K8s 组件审计 →k8s_cluster+protoPayload.methodName;GKE 集群/节点池运维操作 →gke_cluster/gke_nodepool+cloudaudit.googleapis.com/activity。配合labels."k8s-pod/..."前缀标签与 Job/JobSet 标签归集,本文收录的查询模板基本覆盖 GKE 日常排障与审计的全部常见需求。如需查询 GCE、Cloud Run、BigQuery 等其他服务的日志,可参考同目录下对应的 query_compute_engine.md、query_cloud_run.md 等服务参考文档,其结构与本文的 GKE 文档一致。

【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询