大麦云服 大麦云服 立即咨询

谷歌云试用账号 GCP谷歌云如何查看操作日志

谷歌云GCP / 2026-04-17 20:04:26

你有没有过这种经历——早上刚到工位,运维同事冲进来拍桌:“昨天下午3:17,有人把生产环境的VPC防火墙规则全删了!”你冷汗一冒,赶紧打开GCP控制台,手指悬在一堆菜单上,内心OS:这破日志到底藏在哪?不是在‘监控’里,不在‘安全中心’,也不在‘IAM’页面右上角那个小铃铛里……

别慌。今天这篇,不讲虚的,不堆术语,就当咱俩蹲在茶水间边喝美式边聊——怎么在GCP里真正把操作日志‘揪出来’、‘看明白’、‘用得上’。

先泼一盆冷水:GCP的日志,根本不是“一个日志”

很多人卡在第一步,是因为默认以为GCP有个叫“操作日志”的统一入口。错!GCP把日志分成了三类,像三个性格迥异的室友:

  • 审计日志(Audit Logs):官方嘴替,记所有“谁干了啥”,比如创建VM、修改IAM策略、删除存储桶。分管理员活动日志(Admin Activity)和数据访问日志(Data Access)——后者默认关闭,开它要手动点开关,且可能影响性能;
  • 系统日志(System Event Logs):GCP自己写的日记,比如“Compute Engine后端服务重启了”,跟人没关系,纯基础设施心跳;
  • 应用日志(Application Logs):你代码里print出来的,或者容器stdout/stderr吐的,归你管,不归GCP“操作审计”管。

你要找的“谁删了防火墙”,只在审计日志里,而且必须是Admin Activity那一本。记牢这句话,省下两小时瞎翻。

方法一:控制台可视化——适合救火,也适合新手

路径直给:
左侧导航栏 → Logging → Logs Explorer(注意!不是旧版的“Logs Viewer”,新版叫Logs Explorer,UI蓝白配色更清爽)。

进去第一眼,别急着输关键字。先做三件事:

  1. 选资源范围:右上角“资源”下拉框,选“组织”“文件夹”“项目”或具体服务(比如“compute.googleapis.com/Firewall”)。查整个项目操作?选“项目”;只盯防火墙?直接选Firewall资源——精准狙击,日志量少一半;
  2. 谷歌云试用账号 设时间窗:右上角时间选择器,别信默认“过去1小时”。删规则是下午3:17?手动切到“自定义时间”,选昨天15:00–15:30——缩小范围,秒出结果;
  3. 加预设过滤:点击“添加查询条件” → “日志名称” → 选 projects/[YOUR-PROJECT-ID]/logs/cloudaudit.googleapis.com%2Factivity(这是Admin Activity日志的固定ID,复制粘贴最稳)。

这时界面会刷出一堆日志。但别被密密麻麻的JSON吓住——重点看三列:

  • 时间戳:精确到毫秒,比你手表准;
  • 方法名(methodName):比如 compute.firewalls.deleteiam.roles.bind,一看就知道干了啥;
  • 主体(principalEmail):谁干的?邮箱地址清清楚楚,连服务账号([email protected])都原形毕露。

想快速定位?在搜索框直接敲:
resource.type="firewall" severity=NOTICE methodName:"compute.firewalls.delete"
回车,立竿见影。注意:severity=NOTICE是审计日志的固定等级,别写ERROR——它真不报错,它只是冷静记录。

方法二:命令行gcloud——适合自动化、写脚本、凌晨三点被PagerDuty叫醒时

装好gcloud CLI,认证完,一行命令甩过去:

gcloud logging read \
  'resource.type="project" \
   logName="projects/YOUR-PROJECT-ID/logs/cloudaudit.googleapis.com%2Factivity" \
   protoPayload.methodName:"compute.firewalls.delete"' \
  --limit=20 \
  --format='table(protoPayload.authenticationInfo.principalEmail,
              protoPayload.methodName,
              timestamp,
              protoPayload.request.resource.name)'

解释下关键点:

  • logName必须URL编码,%2F就是斜杠,别手抖写成/,否则报400;
  • --format用table,把邮箱、动作、时间、对象名四列打出来,比原始JSON清爽十倍;
  • 想导出CSV?加--format=csv,再重定向> firewall-deletes.csv,发给老板当证据链。

进阶技巧:加--freshness=1h只查最近1小时,避免翻历史库卡死;用jq管道解析:
gcloud ... --format=json | jq '.[] | select(.protoPayload.methodName == "compute.instances.insert") | .protoPayload.authenticationInfo.principalEmail'——批量挖出所有新启VM的人。

方法三:API调用——适合集成进内部审计平台,或你就是那个写API的人

POST请求到:
https://logging.googleapis.com/v2/projects/YOUR-PROJECT-ID/logs/entries:list

Body里塞JSON:

{
  "resourceNames": ["projects/YOUR-PROJECT-ID"],
  "filter": "logName = \"projects/YOUR-PROJECT-ID/logs/cloudaudit.googleapis.com%2Factivity\" AND protoPayload.methodName = \"compute.instances.setMetadata\"",
  "pageSize": 10
}

记住两个硬核要点:

  • API返回的是entries数组,每条entry里protoPayload才是你要的审计信息,别在jsonPayload里找;
  • 分页靠nextPageToken,别一次性要10万条——GCP会温柔地给你返回429,附赠一句“Too Many Requests”。

避坑指南:那些让你怀疑人生的“查不到”时刻

坑1:权限不够,看到空白页
审计日志读取需要logging.logEntries.list权限。普通开发者账号?大概率没有。解决方案:让管理员给你加roles/logging.viewer角色(别加Owner!最小权限原则)。

坑2:日志延迟,刚操作完刷不出来
GCP承诺“通常30秒内可见”,但高峰期可能2分钟。别狂刷F5,喝口水,等半分钟再查——真没日志,再查操作是否成功(比如防火墙删没删成,得去Network → Firewall确认状态)。

坑3:查到了日志,但principalEmail是serviceAccount
别急着封号!可能是CI/CD流水线(比如Cloud Build)执行的。顺藤摸瓜:查protoPayload.serviceData里的buildId,跳转Cloud Build控制台,看谁触发了这次构建。

坑4:日志保留期只有90天?
默认是的。但别慌——在Logs Explorer点右上角齿轮图标 → “日志存储区”,建个my-audit-logs存储区,绑定到BigQuery或Cloud Storage。存多久?你说了算。成本?每月几毛钱,换来的是一年份的操作追溯权,值。

最后送你一句GCP祖训

Google Cloud的文档里藏着一句话,建议刻在工位屏保上:
“Audit logs are not retroactive. They only record activity after the log sink is created or the project is configured to retain them.”

翻译成人话:日志不会穿越。今天配置了审计日志,昨天删的防火墙,它真不记得。所以——别等出事才开日志,就像别等牙疼才买牙刷。

现在,关掉这篇文章,打开你的GCP控制台,花2分钟,把cloudaudit.googleapis.com/activity日志加到你的日志存储区里。做完这一步,你已经比80%的GCP用户更懂怎么守护自己的云了。

毕竟,在云上,看不见的权限,比删库跑路更可怕;而看得见的日志,就是你唯一的防弹衣。

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系