此参考架构介绍了如何将先前导出到 Cloud Storage 的日志导回至 Cloud Logging。
此参考架构面向希望配置和运行日志导入作业的工程师和开发者(包括 DevOps 工程师、网站可靠性工程师 [SRE] 和安全调查人员)。本文档假定您熟悉运行 Cloud Run 作业,并掌握如何使用 Cloud Storage 和 Cloud Logging。
架构
下图展示了此参考架构中 Google Cloud 服务的使用方式:
此工作流包括以下组件:
- Cloud Storage 存储桶:包含要导入回 Cloud Logging 的先前导出的日志。由于这些日志之前已导出,因此它们通过预期的导出格式进行整理。
- Cloud Run 作业:运行导入日志进程:
- 从 Cloud Storage 读取存储日志条目的对象。
- 根据 Cloud Storage 存储桶中导出日志的组织,在请求的时间范围内查找指定日志 ID 的导出日志。
- 将对象转换为 Cloud Logging API
LogEntry
结构。系统会将多个LogEntry
结构汇总到批次中,以减少 Cloud Logging API 配额用量。该架构会在必要时处理配额错误。 - 将转换后的日志条目写入 Cloud Logging。如果您多次重新运行同一作业,可能会导致重复条目。如需了解详情,请参阅运行导入作业。
- Cloud Logging:提取并存储转换后的日志条目。系统会按照路由和存储概览中所述的方式处理日志条目。
- BigQuery:使用 SQL 对导入的日志运行分析查询(可选)。为了从 Cloud Storage 导入审核日志,此架构会修改日志 ID;在查询导入的日志时,您必须考虑这一重命名操作。
使用场景
如果您的组织需要额外的日志分析以对突发事件进行调查或对过去的事件进行其他审核,则可以选择部署此架构。例如,您可能需要在数据库访问情况审核中,分析去年第 1 季度与数据库的连接。
设计替代方案
本部分介绍了此参考架构文档中所示默认设计的替代方案。
保留期限和导入的日志
Cloud Logging 要求传入的日志条目的时间戳不超过 30 天的保留期限。系统不会存储时间戳早于导入时间前 30 天的导入日志条目。
此架构会验证 Cloud Run 作业中设置的日期范围,以免导入早于 29 天的日志,从而保留一天的安全边际。
如需导入早于 29 天的日志,您需要对实施代码进行以下更改,然后构建要在 Cloud Run 作业配置中使用的新容器映像。
- 移除了对日期范围的 30 天验证
- 将原始时间戳作为用户标签添加到日志条目中
- 重置日志条目的时间戳标签,以允许其通过当前时间戳注入
使用此修改时,您必须在 Log Analytics 查询中使用 labels
字段而不是 timestamp
字段。如需详细了解 Log Analytics 查询和示例,请参阅 SQL 查询示例。
设计考虑事项
以下指南可帮助您开发满足组织要求的架构。
费用优化
使用此参考架构导入日志的成本有多个影响因素。
您将使用 Google Cloud 的以下收费组件:
请考虑以下可能增加成本的因素:
- 日志重复:为避免产生额外的日志存储成本,请不要多次运行具有相同配置的导入作业。
- 其他目标位置中的存储:为避免产生额外的日志存储成本,请在目标项目中停用路由政策,以防将日志存储到其他位置,或将日志转发到其他目标,例如 Pub/Sub 或 BigQuery。
- 额外的 CPU 和内存:如果导入作业超时,您可能需要在导入作业配置中增加导入作业的 CPU 和内存。增加这些值可能会增加产生的 Cloud Run 成本。
- 其他任务:如果预计每天在时间范围内导入的日志数量较大,您可能需要增加导入作业配置中的任务数量。作业会在任务之间平均分配时间范围,因此每个任务都会并行处理该范围内相近天数的数据。增加任务数量可能会增加产生的 Cloud Run 成本。
- 存储类别:如果您的 Cloud Storage 存储桶的存储类别不是 Standard,例如 Nearline、Durable Reduced Availability (DRA) 或 Coldline,可能会产生额外费用。
- 不同位置之间的数据流量:将导入作业配置为在与您从其中导入日志的 Cloud Storage 存储桶相同的位置运行。否则,可能会产生网络出站流量费用。
如需根据您的预计使用量(包括 Cloud Run 作业)生成费用估算值,请使用价格计算器。
运营效率
本部分介绍了在部署解决方案后管理分析查询的注意事项。
日志名称和查询
日志会存储到日志条目的 logName
字段中定义的项目。如需将日志导入所选项目,此架构会修改每个导入日志的 logName
字段。导入日志存储在日志 ID 为 imported_logs
的所选项目的默认日志存储桶中(除非该项目具有更改存储目标位置的日志路由政策)。logName
字段的原始值保存在 labels
字段中(密钥为 original_logName
)。
在查询导入的日志时,您必须考虑原始 logName
值的位置。如需详细了解 Log Analytics 查询和示例,请参阅 SQL 查询示例。
性能优化
如果您要导入的日志量超出了 Cloud Run 容量限制,则作业可能会在导入完成之前超时。为防止数据导入不完整,不妨考虑在导入作业中提高 tasks
值。增加 CPU 和内存资源还有助于在增加任务数量时提升任务性能。
部署
如需部署此架构,请参阅部署作业以将日志从 Cloud Storage 导入 Cloud Logging。
后续步骤
- 查看 GitHub 代码库中的实施代码。
- 了解如何使用 Log Analytics 和 SQL 分析导入的日志。
- 如需查看更多参考架构、图表和最佳做法,请浏览云架构中心。
贡献者
作者:Leonid Yankulin | 开发者关系工程师
其他贡献者:
- Summit Tuladhar | 高级软件工程师
- Wilton Wong | 企业架构师
- Xiang Shen | 解决方案架构师