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),用于采集来自计算实例、容器或本地应用的日志。
二、日志组与日志对象:先规划,再启用
日志组是 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 Log | Audit | API 调用审计、合规检查 |
| VCN Flow Log | VCN | 网络流量分析、安全排查 |
| Load Balancer Access Log | Load Balancer | HTTP 请求分析、错误定位 |
| Load Balancer Error Log | Load Balancer | 后端连接失败、超时排查 |
| Object Storage Access Log | Object Storage | 对象访问审计、异常下载检测 |
| API Gateway Access Log | API Gateway | API 调用统计、限流分析 |
| Autonomous Database Log | ADB | 数据库审计、慢查询分析 |
| WAF Log | WAF | 攻击检测、规则命中分析 |
| Bastion Session Log | Bastion | 运维会话审计 |
不同服务的日志启用方式略有差异。以 VCN 流日志为例,需要在 VCN 详情页的“日志”选项卡中创建日志,选择日志组、指定采集范围(整个 VCN 或某个子网/网卡),并设置采样率。采样率越高,日志量越大,成本也越高。生产环境通常建议先以较低采样率(如 10%)观察流量特征,再按需调整。
四、日志采集与存储的基本配置
对于 OCI 原生服务日志,采集是“启用即生效”的:创建日志对象后,Logging 服务会自动从源资源拉取日志并写入日志组。对于自定义日志,则需要部署 OCI Logging Agent 或使用 Unified Monitoring Agent,在计算实例上配置日志源路径和解析规则。
一个典型的自定义日志采集配置流程如下:
- 在目标计算实例上安装 Unified Monitoring Agent,并确认 Agent 状态为 Running。
- 在 Logging 中创建自定义日志对象,选择“从计算实例采集”,指定日志组和日志名称。
- 在 Agent 配置中声明日志源,例如
/var/log/app/*.log,并设置解析器(如 JSON、正则、Syslog)。 - 保存后,Agent 会按配置持续读取文件增量,并将新日志推送到 Logging 服务。
存储方面,日志写入日志组后,默认保留 30 天。如果需要更长的保留期,可以在日志组级别调整保留天数,或通过 Service Connector Hub 将日志转发到 Object Storage。Service Connector Hub 的配置需要指定源(Logging)、源日志组、目标(Object Storage 桶)、目标前缀以及批处理策略(如每 5 分钟或每 10 MB 触发一次)。
最后,日志查询可以通过控制台“日志搜索”完成,也可以使用 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
查询时需要注意:日志搜索是按日志组范围进行的,时间范围、查询语句和日志组三者缺一不可。对于生产排障,建议先用较宽的时间窗口和关键字定位,再逐步收窄到具体资源或错误码,避免一开始就使用过于复杂的过滤条件导致漏查。