Cloud Logging:查询与审计
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
用结构化日志关联请求、业务 ID 和错误;Console:Logging → Logs Explorer。
推荐做法#
- 应用输出单行 JSON,order_id 等放日志字段,不做高基数 metric label。
- 按服务启用需要的 Data Access audit log,并控制保留期与敏感字段。
- log-based metric 创建后再产生测试事件,历史日志不自动回填新增计数。
常用操作#
替换为实际资源;本段不依赖 lab.env。
PROJECT_ID='REPLACE_PROJECT_ID'
gcloud logging read 'severity>=ERROR' \
--project="$PROJECT_ID" --freshness=1h --limit=20 --format=json容易踩的坑#
Admin Activity 不覆盖对象/Secret 读取审计。 例如 Secret Manager 的 Data Read 要单独检查启用状态;查看 Data Access 日志通常还需
roles/logging.privateLogViewer,不能仅依赖普通 Logs Viewer。审计日志
- 没有日志先查时间窗、resource type、采样/排除配置,再判断请求未到达。
配置说明与完整示例(按需展开)
前置:环境篇。Cloud Run 标准输出/错误输出自动进入 Logging;输出单行 JSON 能直接按字段查询。
source lab.env
gcloud services enable logging.googleapis.com
gcloud logging write lab-events '{"event":"order_failed","order_id":"demo-1"}' --payload-type=json --severity=ERROR
gcloud logging read 'logName="projects/'"$PROJECT_ID"'/logs/lab-events" AND jsonPayload.order_id="demo-1"' --freshness=1h --limit=10 --format=json创建日志指标后再生成日志,历史日志不会回填为新增计数:
gcloud logging metrics create lab_errors --description='Learning error count' --log-filter='logName="projects/'"$PROJECT_ID"'/logs/lab-events" AND severity>=ERROR'
gcloud logging write lab-events '{"event":"order_failed","order_id":"demo-2"}' --payload-type=json --severity=ERROR验收:Logs Explorer 可按 jsonPayload.order_id 找到事件;Metrics Explorer 可选到 logging.googleapis.com/user/lab_errors,等待摄取延迟后出现计数。日志计数指标
不要把 order ID/user ID 做成指标标签,避免高基数;放日志字段即可。不要记录 token、密码和完整个人数据。
审计练习#
在 IAM & Admin → Audit Logs 中为 Secret Manager 开启 Data Read,访问实验 Secret 后查询:
gcloud logging read 'protoPayload.serviceName="secretmanager.googleapis.com" AND protoPayload.methodName:"AccessSecretVersion"' --freshness=1h --limit=10 --format=json确认 principalEmail; Service Account impersonation 还检查 delegation 信息。Admin Activity 与 Data Access 审计不是同一类,后者许多服务需要显式启用,读取私有日志还需要相应权限。审计日志
完成监控实验后再清理:
gcloud logging metrics delete lab_errors
gcloud logging logs delete lab-events若为实验临时开启 Data Access,恢复原配置;按需要设置保留期与排除项,避免长期摄取费用。