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_pod | Pod 生命周期事件 | 驱逐(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_cluster与gke_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_name、resource.labels.container_name或resource.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各字段的完整语义(principalEmail、callerIp、authorizationInfo、status.code等),可继续参考同技能下的 审计日志参考。其中一条与 GKE 排障直接相关的规则是:查找失败用protoPayload.status.code!=0(0 表示成功),这正是后文"控制平面错误(排除正常 Conflict)"查询的写法依据。
三、易踩的坑:用户自定义 Kubernetes 标签的存储方式
这是参考文档专门点名的 gotcha,值得单独强调:
当你按自定义的 Kubernetes Pod 标签(如app: my-app、tier: 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_id是container.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=ERRORContainer 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=ERRORTPU 训练任务的节点名通常共享前缀(如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=ERRORJob/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):
- 比较运算符:
=、!=、>、<、>=、<=、:(子串搜索)、=~(RE2 正则)、!~(正则不匹配)。运算符右侧支持括号值列表,如jsonPayload.reason=("Evicted" OR "FailedScheduling")。 - 字段存在性:
field:*检查字段是否存在(Pod IP 查询中的podIP:*)。 - SEARCH 函数:
SEARCH()接收单个字符串字面量,做大小写不敏感的 token 化子串搜索;SEARCH(field, "kw")可限定字段。不要向 SEARCH 传布尔表达式,多个关键词用SEARCH("a") OR SEARCH("b")组合。 - 正则:
=~使用 RE2 语法、大小写敏感、默认不锚定;需要锚定时显式写^/$,大小写不敏感时加(?i)。 - 时间范围:
timestamp >= "2023-11-29T23:00:00Z"(严格 RFC 3339),或日期快捷写法timestamp > "2023-11-29"。 - 内置函数:
log_id()(匹配日志 ID,GKE 查询中出现频率最高)、source()(按资源层级)、sample(insertId, 0.01)(确定性抽样,适合全集群日志量过大时先用 1% 抽样定位模式再放大)。 - 占位符纪律:技能主文档 强调"绝不要因缺少变量而阻塞"——请求中缺项目 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),仅供参考