skills 仓库实战指南:用 gcloud 配置单项目 Cloud Logging(日志桶、日志视图、日志指标与成本优化)
2026/9/13 20:16:51 网站建设 项目流程

skills 仓库实战指南:用 gcloud 配置单项目 Cloud Logging(日志桶、日志视图、日志指标与成本优化)

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

本篇基于 cloud-logging-configuration-basics 技能文档,系统讲解在单一 Google Cloud 项目中如何用gcloudCLI 完成 Cloud Logging 的完整配置:创建带保留期与 Observability Analytics 的区域日志桶、通过日志 sink 路由日志、创建 logs-based 指标、用日志视图和带 IAM 条件的 Logs View Accessor 限制敏感日志可见性,以及通过 sink 排除与sample()采样控制日志成本。读完本文,你可以按“安全确认分级”的规范,安全地让 AI Agent 或直接手动完成一套合规、可审计、可控成本的单项目日志配置。

技能定位与适用边界

该技能定义于 skills/cloud/cloud-logging-configuration-basics/SKILL.md,其元数据中明确声明了覆盖范围:

  • 配置单项目(single-project)的 Cloud Logging 资源:区域日志桶(regional log buckets)、日志 sink、日志视图(log views);
  • 在默认视图_Default的过滤器中排除或隐藏敏感日志;
  • 针对日志视图的 IAM 权限(roles/logging.viewAccessor与 IAM conditions);
  • logs-based metrics、log exclusions、采样(sampling)。

技能 front matter 中同时给出了明确的不适用边界:跨项目或组合日志配置请改用仓库中的姊妹技能 cloud-logging-cross-project-configuration,该技能覆盖中央日志桶路由与读时聚合(log scopes)场景。仓库根目录 index.json 中对这两个技能的描述也体现了同样的边界划分,可据此快速判断需求归属。

另外,文档针对受限沙箱环境给出了一条关键约束:在评测或网络受限环境中,不得运行网络发现类命令去探测项目 ID、资源名或组织 ID,而应直接使用提示中给定的确切项目 ID 或{project_id}等占位符直接执行配置命令——否则发现命令会挂起直至超时。

安全确认分级(Safety Tiers):Agent 执行 gcloud 命令前的强制规则

这是该技能最有价值的设计之一:所有 Cloud Logging 的变更操作被划分为四个安全级别(Tier),Agent 必须在执行命令前对号入座。从源码结构看,这套分级在 cloud-logging-cross-project-configuration 中也以相同方式复用,并与 gcloud 技能 中“IAM 变更禁止自主执行、破坏性操作必须显式授权”的通用红线一致。

级别含义典型命令执行规则
Tier R:只读仅读取状态或查询日志gcloud logging readgcloud logging buckets list无需确认,可立即执行以收集信息
Tier M:非计费变更不产生直接存储/计费成本、不影响资源安全与访问策略的配置修改或元数据创建gcloud logging views creategcloud logging views updategcloud logging scopes creategcloud logging buckets create无需确认,可立即执行以应用配置
Tier B:计费与安全敏感变更(高危)创建产生计费的资源/集成,或修改安全与 IAM 访问控制策略(存在权限提升风险)gcloud logging metrics creategcloud logging links creategcloud projects add-iam-policy-binding必须交互式确认:须向用户展示逐字命令并获得确认后方可执行,严禁在与用户确认的同一轮直接执行
Tier D:不可逆数据丢失永久丢弃或删除日志的操作,例如 sink 排除gcloud logging buckets deletegcloud logging sinks update --add-exclusion必须显式键入确认(例如 "Yes, discard logs"),暂停执行直到用户回复

这条分级规则的意义在于:日志桶、日志视图这类“纯元数据”资源本身不计费,可以放手让 Agent 自动化;而 sink 路由、指标创建、IAM 授权会持续产生费用或改变访问面,sink 排除则可能直接导致日志不再落盘,必须逐层加码确认强度。

前置条件

技能文档说明:若本机缺少gcloud可执行文件,需先按 Google Cloud SDK 官方安装指南安装 Google Cloud CLI(安装方式参见 README 中提到的技能安装渠道之外的官方文档)。执行本文全部命令的前提是已完成gcloud登录且当前账号对目标项目具备相应 IAM 权限。仓库中的 gcloud 技能 还给出了 Agent 侧的通用执行约束:每条命令显式携带--project={project_id}避免命中错误项目、为执行类命令附加--quiet防止交互挂起、优先通过gcloud help <leaf_command>校验叶子命令语法。

创建日志桶(合规与分析场景,Tier M)

为监管合规创建指定保留期、启用 Observability Analytics 的区域日志桶:

gcloud logging buckets create {bucket_id} \ --project={project_id} \ --location={region} \ --retention-days={retention_days} \ --enable-analytics

参数说明:

  • {bucket_id}:日志桶 ID,例如my-custom-bucket
  • {region}:例如us-central1要启用 Observability Analytics 必须使用区域(regional)日志桶,不能使用global位置;
  • {retention_days}:保留天数,例如365(一天一删,到期日志自动清除)。

两个关键事实来自文档原文:

  1. 计费特性:日志桶本身在没有任何日志被 sink 路由进来之前的存储与摄入均不产生费用——费用发生在“路由”这一步;
  2. 强制降级警告:一旦日志桶升级为使用 Observability Analytics,就无法再降级移除分析能力。文档要求在给出任何成本优化或排除日志的建议时,都必须显式附带这句警告。

验证日志桶(Tier R)

gcloud logging buckets describe {bucket_id} \ --location={region} \ --project={project_id}

检查输出中的保留期、位置与 Analytics 配置,以确认合规项达标。

将日志路由到日志桶(Tier B)

计费动作(Tier B):将日志条目路由到桶会产生与存储数据量成正比的持续费用。执行前必须获得用户的交互式确认。

日志条目只有当某个 sink 的过滤器匹配条目并指向该桶时才会被存储到该桶。路由命令:

gcloud logging sinks create {sink_id} \ projects/{project_id}/locations/{region}/buckets/{bucket_id} \ --log-filter='{filter_expression}' \ --project={project_id}

这里 sink 的目标是一个完整的路径资源名projects/{project_id}/locations/{region}/buckets/{bucket_id}--log-filter用 Logging Query Language 表达式圈定要路由的日志子集。若需要用自然语言生成这段 filter,可参考仓库中同属CloudObservabilityAndMonitoring分类的 cloud-logging-query-generation 技能,它专门负责生成 LQL 查询,并强调字符串字面量必须用双引号、布尔运算符大写(AND/OR/NOT)等语法规范。

Logs-Based Metrics:从日志生成监控指标

Logs-based metrics 统计匹配某个过滤器的日志条目数量,可用于跟踪错误率并搭建告警策略。

1. 创建计数器指标(Tier B)

计费动作(Tier B):创建 logs-based 指标会按上报的数据点数量持续计费,执行前必须获得交互式确认。

例如统计 “OutOfMemory” 错误出现次数:

gcloud logging metrics create {metric_name} \ --log-filter='{filter_expression}' \ --description='{description}' \ --project={project_id}

参数示例:

  • {metric_name}oom_error_count
  • {filter_expression}textPayload:"OutOfMemory"
  • {description}"Count of log entries about OOMs"

文档同时提示:指标的各字段存在取值限制,需参照 Cloud Logging REST 参考中的projects.metrics(LogMetric)资源定义来约束字段配置。

2. 验证指标(Tier R)

gcloud logging metrics describe {metric_name} \ --project={project_id}

describe确认指标存在并检查其过滤器与配置是否符合预期。

限制敏感日志的访问(安全场景)

背景事实:任何对该项目拥有roles/logging.viewer的人,都可以通过项目的_Default日志视图看到_Default日志桶中的日志。要收窄敏感日志的可见面,分四步进行:

Agent 歧义处理规则:如果用户只说“排除/隐藏/移除”敏感日志而没有说明是否要停止存储,必须默认走第 1 步——从默认视图中排除。这是一个安全的、非破坏性的 Tier M 操作;只有当用户明确使用“停止存储(stop storing)”“永久丢弃(permanently discard)”“sink 排除(sink exclusion)”这类破坏性措辞时,才执行下文“从存储中丢弃敏感日志”一节的操作。

1. 从默认视图排除敏感日志(Tier M)

更新_Default日志视图的过滤器,把敏感日志显式排除在默认访问面之外:

gcloud logging views update _Default \ --bucket=_Default \ --location=global \ --project={project_id} \ --log-filter='NOT LOG_ID("cloudaudit.googleapis.com/data_access") AND NOT LOG_ID("externalaudit.googleapis.com/data_access") AND NOT LOG_ID("{sensitive_log_id}")'

该过滤器同时排除了云审计数据访问日志(cloudaudit.googleapis.com/data_accessexternalaudit.googleapis.com/data_access)与指定的{sensitive_log_id}。注意过滤器中统一使用LOG_ID("...")而不是logName匹配——姊妹技能 cross-project 文档 的排障章节也专门指出:logName:abc这类标准写法在 sink 过滤器中可能匹配失败,精确匹配时应始终使用LOG_ID("abc")

2. 创建包含敏感日志的专用日志视图(Tier M)

例如创建一个只有安全团队可见的security-logs-view,其过滤器只放行{sensitive_log_id}

gcloud logging views create security-logs-view \ --bucket=_Default \ --location=global \ --project={project_id} \ --log-filter='LOG_ID("{sensitive_log_id}")' \ --description="Sensitive logs"

3. 用 IAM 条件把 Logs View Accessor 授权限定到该视图(Tier B)

安全动作(Tier B):授予 IAM 权限会改变访问控制策略,执行前必须由用户显式确认。

{security_group_email}对应的安全组授权,使其只能访问_Default桶中的security-logs-view

gcloud projects add-iam-policy-binding {project_id} \ --member='group:{security_group_email}' \ --role='roles/logging.viewAccessor' \ --condition="expression=resource.name=='projects/{project_id}/locations/global/buckets/_Default/views/security-logs-view',title=Restricted to Specific Log View,description=Only allows access to the specified log view"

要点:授予roles/logging.viewAccessor必须附带把授权限定到特定日志视图的 IAM condition;condition 表达式中的resource.name需要与视图真实资源名完全一致,其中{location}按日志桶所在位置替换,例如global或区域位置us-central1

4. 验证敏感日志限制(Tier R)

gcloud logging views describe {view_id} \ --bucket={bucket_id} \ --location={region} \ --project={project_id}

确认输出中filter块包含预期的限制表达式。

从存储中丢弃敏感日志(Tier D,不可逆)

若组织合规策略要求完全不留存某些敏感日志,可以在日志写入磁盘之前通过 sink 排除将其丢弃:

gcloud logging sinks update _Default \ --project={project_id} \ --add-exclusion=name=exclude-sensitive,filter='LOG_ID("{sensitive_log_id}")'

破坏性动作(Tier D):_Defaultsink 的排除会立即且不可逆地删除匹配的日志条目。

文档为该步骤设定了最严格的执行规则:必须先向用户请求显式键入确认(例如 "I confirm I want to exclude{sensitive_log_id}logs from storage"),并且在询问确认的同一轮禁止执行gcloud logging sinks update命令——必须立即停止工具执行,等待用户回复后再进行。

成本优化:排除与采样(Tier D)

Cloud Logging 的成本由摄入与存储的数据量决定。降低成本的思路是:排除高吞吐、低价值的日志,或对其采样。每一个把日志路由到独立日志桶的 sink 都是成本构成点,也就是优化候选。

破坏性动作(Tier D):本节的排除操作会立即停止部分日志条目的存储,执行前必须获得显式键入确认(例如 "I confirm I want to exclude load balancer logs")。

完全排除某一类高吞吐日志(Tier D)

对路由日志进目标桶的 sink 添加排除:

gcloud logging sinks update {sink_id} \ --project={project_id} \ --add-exclusion=name={exclusion_name},filter={exclusion_filter}

参数示例:

  • {sink_id}_Default
  • {exclusion_name}exclude-lb-logs
  • {exclusion_filter}resource.type="http_load_balancer"

对高吞吐日志采样(Tier D)

若还需要保留一部分日志用于分析,可在排除过滤器中使用sample()函数:

sample(field, fraction)会匹配fraction比例的日志;当它出现在排除过滤器中时,被匹配的日志会被丢弃。要排除 90% 的日志(即只保留 10%),就写sample(insertId, 0.9)

例如排除 90% 的DEBUG级别日志:

gcloud logging sinks update _Default \ --project={project_id} \ --add-exclusion=name=sample-debug-logs,filter='severity=DEBUG AND sample(insertId, 0.9)'

验证排除与成本优化配置(Tier R)

列出 sink 详情并检查exclusions字段,确认过滤器已生效。以_Defaultsink 为例:

gcloud logging sinks describe _Default --project={project_id}

技能文档中引用的官方参考主题

原技能文档末尾列出了三类 Cloud Logging 官方参考,本文不输出外部链接,仅按主题列出,便于读者按名检索:

  • Cloud Logging 计数器指标(Counter Metrics)——对应上文 logs-based metrics 一节;
  • Cloud Logging 自定义日志视图(Custom Log Views)——对应_Default视图过滤与专用视图创建;
  • Cloud Logging 日志路由与排除(Routing and Exclusions)——对应 sink 路由与排除配置。

小结与延伸

围绕 cloud-logging-configuration-basics 这条主线,可以把单项目日志配置归纳为一条可执行链路:

  1. gcloud logging buckets create(Tier M,区域位置 + 保留期 +--enable-analytics,注意 Analytics 不可降级);
  2. gcloud logging sinks create(Tier B,路由日志开始计费);
  3. gcloud logging views update/create(Tier M,用_Default过滤器与专用视图划分敏感日志可见面);
  4. gcloud projects add-iam-policy-binding+roles/logging.viewAccessor+ IAM condition(Tier B,把访问权限钉死到具体视图);
  5. gcloud logging metrics create(Tier B,把日志模式变成可告警的指标);
  6. gcloud logging sinks update --add-exclusion/sample()(Tier D,显式键入确认后做排除与采样);
  7. 全程用describe类 Tier R 命令闭环验证。

若日志规模扩展到多项目,应切换到 cloud-logging-cross-project-configuration 技能处理集中式存储或读时聚合;所有gcloud命令的执行细节(语法校验、数据缩减、非交互约束)则可参照 gcloud 技能 与 skills/cloud/gcloud/references/cli-usage.md 中的规范。仓库通过 README 提供的npx skills add google/skills方式安装上述技能后即可在 Agent 工作流中复用。

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

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

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

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

立即咨询