3. OCI日志服务入门

OCI Logging 是 Oracle Cloud Infrastructure 中统一的日志采集、管理与查询服务。它把分散在计算、网络、数据库、存储、安全等各类资源中的日志,通过一个统一的模型汇聚到 Logging 服务中,再交给 Logging Analytics、Service Connector Hub、Functions 或第三方 SIEM 做进一步分析。理解 Logging 的关键,是先分清它的三层对象模型:日志组(Log Group)→ 日志(Log)→ 日志条目(Log Entry),再理解日志从“产生”到“可查询”的完整链路。

一、Logging 服务架构:从日志源到可查询日志

OCI Logging 的架构可以拆成四个层次。最上层是日志源,即产生日志的 OCI 服务或自定义应用;第二层是日志对象,它是 Logging 中承载某类日志的容器,绑定到具体资源;第三层是日志组,用于对日志做逻辑分组、权限隔离和生命周期管理;最下层是日志存储与消费,日志写入后可通过控制台、CLI、API、SDK 查询,也可通过 Service Connector Hub 转发到 Object Storage、Streaming、Logging Analytics 或 Functions。

需要特别区分两类日志:审计日志(Audit Log)由 OCI Audit 服务统一产生,记录所有 OCI API 调用,属于租户级、默认开启、不可关闭;服务日志(Service Log)由各服务自身产生,例如 VCN 流日志、负载均衡访问日志、Object Storage 访问日志,需要用户显式启用并指定日志组。此外还有自定义日志(Custom Log),用于采集来自计算实例、容器或本地应用的日志。

OCI Logging 服务架构与日志对象模型 日志源层 Audit 审计日志 租户级 · 默认开启 服务日志 VCN / LB / Object Storage 自定义日志 Agent / 应用输出 数据库日志 Autonomous / DB System 安全与合规日志 WAF / Bastion / Flow 日志对象层(Log) 日志组 Log Group 逻辑分组 · 权限边界 · 生命周期 日志 Log 绑定资源 · 类型 · 保留策略 日志条目 Log Entry 时间戳 · 来源 · 内容 存储与消费层 控制台 / CLI / API 即时查询 Service Connector 转发到下游 Object Storage 长期归档 Streaming 实时消费 Logging Analytics 分析 关键关系 • 一个日志组可包含多个日志;一个日志只能属于一个日志组 • 日志组是 IAM 策略与保留策略的最小作用单元;日志条目是实际写入的数据 • 审计日志自动进入 _Audit 日志组;服务日志需手动启用并指定日志组

二、日志组与日志对象:先规划,再启用

日志组是 Logging 中最重要的组织单元。它既是权限边界,也是保留策略边界。在 IAM 中,可以通过策略限制某个用户组只能读取特定日志组下的日志,例如:

Allow group AppSupport to read log-content in compartment Prod
where target.log-group.name = 'lg-prod-app'

日志组还决定了日志的保留时长。OCI Logging 默认保留 30 天,可在创建日志组时设置为 1 到 365 天。超过保留期的日志会被自动清理,因此如果日志需要长期保存,应在创建日志组时就规划好保留策略,或通过 Service Connector Hub 把日志转发到 Object Storage 做归档。

日志对象(Log)是绑定到具体资源的日志容器。创建服务日志时,需要指定:日志组、日志名称、日志类型(如 VCN Flow Log、Load Balancer Access Log)、源资源(如某个 VCN、某个负载均衡器)、日志类别(如访问日志、错误日志)。日志对象创建后,Logging 会自动开始采集该资源产生的日志,无需额外部署 Agent。

建议按“环境 + 用途”命名日志组,例如 lg-prod-network、lg-prod-app、lg-dev-all,避免所有日志都堆在默认日志组中,导致权限和保留策略难以区分。

三、支持的服务日志类型

OCI Logging 原生支持多种服务日志,常见类型包括:

日志类型来源服务典型用途
Audit LogAuditAPI 调用审计、合规检查
VCN Flow LogVCN网络流量分析、安全排查
Load Balancer Access LogLoad BalancerHTTP 请求分析、错误定位
Load Balancer Error LogLoad Balancer后端连接失败、超时排查
Object Storage Access LogObject Storage对象访问审计、异常下载检测
API Gateway Access LogAPI GatewayAPI 调用统计、限流分析
Autonomous Database LogADB数据库审计、慢查询分析
WAF LogWAF攻击检测、规则命中分析
Bastion Session LogBastion运维会话审计

不同服务的日志启用方式略有差异。以 VCN 流日志为例,需要在 VCN 详情页的“日志”选项卡中创建日志,选择日志组、指定采集范围(整个 VCN 或某个子网/网卡),并设置采样率。采样率越高,日志量越大,成本也越高。生产环境通常建议先以较低采样率(如 10%)观察流量特征,再按需调整。

四、日志采集与存储的基本配置

对于 OCI 原生服务日志,采集是“启用即生效”的:创建日志对象后,Logging 服务会自动从源资源拉取日志并写入日志组。对于自定义日志,则需要部署 OCI Logging Agent 或使用 Unified Monitoring Agent,在计算实例上配置日志源路径和解析规则。

一个典型的自定义日志采集配置流程如下:

  1. 在目标计算实例上安装 Unified Monitoring Agent,并确认 Agent 状态为 Running。
  2. 在 Logging 中创建自定义日志对象,选择“从计算实例采集”,指定日志组和日志名称。
  3. 在 Agent 配置中声明日志源,例如 /var/log/app/*.log,并设置解析器(如 JSON、正则、Syslog)。
  4. 保存后,Agent 会按配置持续读取文件增量,并将新日志推送到 Logging 服务。

存储方面,日志写入日志组后,默认保留 30 天。如果需要更长的保留期,可以在日志组级别调整保留天数,或通过 Service Connector Hub 将日志转发到 Object Storage。Service Connector Hub 的配置需要指定源(Logging)、源日志组、目标(Object Storage 桶)、目标前缀以及批处理策略(如每 5 分钟或每 10 MB 触发一次)。

日志转发到 Object Storage 后,Object Storage 侧的生命周期规则才是最终保留边界。如果 Logging 日志组保留 30 天、Object Storage 生命周期为 365 天,则 30 天后 Logging 中不可查,但归档对象仍保留 365 天。规划时需同时考虑这两层保留策略。

最后,日志查询可以通过控制台“日志搜索”完成,也可以使用 CLI:

oci logging-search search-logs \
  --search-query 'search "ocid1.compartment.oc1..xxxx/ocid1.loggroup.oc1..yyyy" | where data.message contains "ERROR"' \
  --time-start 2025-01-01T00:00:00Z \
  --time-end 2025-01-01T01:00:00Z

查询时需要注意:日志搜索是按日志组范围进行的,时间范围、查询语句和日志组三者缺一不可。对于生产排障,建议先用较宽的时间窗口和关键字定位,再逐步收窄到具体资源或错误码,避免一开始就使用过于复杂的过滤条件导致漏查。