4. Log Analytics工作区设计

Log Analytics 工作区是 Azure 可观测性体系的数据中枢。它既是 Azure Monitor 日志的存储与查询引擎,也是跨资源、跨订阅、跨区域日志集中管理的边界。工作区设计得好,后续的告警、仪表板、工作簿、Sentinel 接入都会顺畅;设计得差,往往在半年后表现为查询变慢、成本失控、权限混乱、数据割裂。本节围绕四个核心维度展开:数据保留、访问控制、成本优化、跨资源查询与集中管理。

一、工作区是数据边界,不是简单的容器

一个 Log Analytics 工作区在物理上对应一个独立的日志存储与索引单元,拥有自己的保留策略、定价层、访问控制模型和查询端点。所有写入其中的日志表(如 Heartbeat、Perf、ContainerLogV2、AzureActivity、AppTraces)共享同一套保留与计费规则,但可以按表设置差异化保留。理解这一点是设计的前提:工作区决定了“数据放在哪里、留多久、谁能看、花多少钱”。

常见的设计误区是“每个资源建一个工作区”。这会导致查询需要跨多个工作区拼接,告警规则数量膨胀,权限难以统一。更合理的做法是按管理边界、合规要求、成本归属和查询范围来划分工作区,通常 1~5 个即可覆盖大多数企业场景。

二、数据保留:交互保留与长期保留分层

Log Analytics 的保留分为两层:交互保留(Interactive Retention)默认 30 天,可配置 30~730 天,此期间数据可被任意查询,按分析日志计费;长期保留(Long-term Retention)可延长至最多 12 年,数据进入低成本存储,查询需使用 search 或 restore 作业,按搜索计费。设计时应按表的查询频率分层:高频排障表(如 ContainerLogV2、AppExceptions)保留 30~90 天;合规审计表(如 AzureActivity、SecurityEvent)交互保留 90 天、长期保留 1~7 年;低价值指标表(如 Perf 的部分计数器)可缩短交互保留以控成本。

保留策略可按表设置,示例配置如下:

# 按表设置保留(示例参数,非实测结果)
AzureActivity        : interactive=90d,  total=2555d (7年)
SecurityEvent        : interactive=90d,  total=2555d
ContainerLogV2       : interactive=30d,  total=90d
AppTraces            : interactive=30d,  total=90d
Perf                 : interactive=30d,  total=30d
Heartbeat            : interactive=30d,  total=30d

判断保留是否合理,可以观察两个信号:一是过去 90 天内被查询的表与时间范围分布,二是长期保留数据的实际检索频率。若某表长期保留但一年未被 search 过,应考虑降级或归档到 Storage Account。

三、访问控制:工作区级与表级 RBAC

Log Analytics 的访问控制有两层:工作区级 RBAC(如 Log Analytics Reader、Log Analytics Contributor)和表级 RBAC(通过 Azure 自定义角色限定到具体表,如仅允许读取 SecurityEvent)。表级 RBAC 是实现“同一工作区、不同团队看不同数据”的关键手段,避免为隔离权限而拆分工作区。

典型设计:平台团队拥有 Log Analytics Contributor,可管理保留与数据源;安全团队通过自定义角色仅能读取 SecurityEvent、SigninLogs;应用团队仅能读取自己命名空间对应的 ContainerLogV2 与 AppTraces。资源上下文查询(Resource-context)则允许拥有某资源读取权限的用户直接查看该资源日志,无需工作区权限,适合开发人员自助排障。

建议默认关闭“所有用户可查询”的宽松设置,改用表级 RBAC + 资源上下文组合,既满足最小权限,又保留自助能力。

四、成本优化:从数据摄入到查询的全链路

Log Analytics 成本主要由三部分构成:数据摄入(按 GB)、交互保留(按 GB·天)、查询(分析查询通常包含在摄入中,search/restore 单独计费)。优化应从源头开始:

  • 摄入前过滤:使用数据收集规则(DCR)过滤无用日志,例如丢弃 Debug 级别 AppTraces、排除高频低价值 Perf 计数器。
  • 表计划选择:对仅用于审计、极少查询的表使用基本日志(Basic Logs),摄入成本显著降低,但仅支持有限查询;对高频分析表使用分析日志(Analytics Logs)。
  • 保留分层:交互保留只保留排障窗口,长期保留交给低成本层。
  • 查询治理:限制仪表板刷新频率,避免大范围 search 作业,使用 summarize 与时间范围裁剪。

一个可执行的成本检查清单如下:

检查项判断依据动作
DCR 是否过滤是否存在 Debug/Verbose 日志添加 where 过滤
表计划是否匹配该表近 30 天查询次数低频表转 Basic Logs
交互保留是否过长查询时间范围分布缩短至 30~90 天
是否存在重复采集同一数据多表写入合并数据源
仪表板刷新频率是否低于 5 分钟调整为 15 分钟以上

五、跨资源查询与集中管理

跨资源查询有两种主要方式:跨工作区查询(workspace() 函数)和跨资源查询(union 多个资源或使用 Azure Resource Graph 补充元数据)。当工作区按区域或业务线拆分时,可用 workspace("id").Table 在单个查询中合并结果。跨订阅场景下,需确保查询身份对目标工作区有读取权限。

集中管理的核心是“数据源统一接入、查询统一入口、权限统一模型”。建议使用数据收集规则(DCR)作为统一接入层,将 VM、容器、应用、平台诊断日志汇聚到指定工作区;使用 Azure Monitor 的查询包(Query Pack)沉淀标准查询;使用工作簿(Workbook)作为统一可视化入口。下图展示了工作区设计中数据流、保留分层与访问控制的关系。

Log Analytics 工作区设计:数据流 · 保留分层 · 访问控制 数据源 VM / 容器 Agent 应用 App Insights 平台诊断日志 安全 / 活动日志 DCR 数据收集规则 过滤 Debug / Verbose 选择目标表与工作区 转换 KQL 预处理 Log Analytics 工作区 分析日志表(高频查询) 基本日志表(低频审计) 交互保留 30~730 天 长期保留 ≤ 12 年 访问控制 工作区级 RBAC Reader / Contributor 表级 RBAC 自定义角色限定表 资源上下文查询 按资源权限自助查看 最小权限原则 成本优化链路 摄入前过滤 DCR where 条件 表计划选择 Basic / Analytics 保留分层 交互 + 长期 查询治理 时间裁剪 / 刷新 成本可见性 Usage 表分析 跨资源查询与集中管理 workspace() 跨工作区 union 多资源合并 Query Pack 标准查询 Workbook 统一入口

图中左侧是数据源,经 DCR 过滤与转换后写入工作区;工作区内按表计划与保留分层组织;右侧是访问控制模型;下方是成本优化链路与跨资源查询能力。四者共同构成工作区设计的完整视图。

六、设计决策的落地顺序

实际落地时,建议按以下顺序推进:先确定工作区数量与归属(按管理边界与合规要求),再定义每张表的保留策略与表计划,然后配置 DCR 过滤与转换,接着建立表级 RBAC 与资源上下文权限,最后用 Usage 表与查询日志持续验证成本与访问是否符合预期。每一步都应留下可复查的配置记录,避免后续变更时失去依据。

工作区合并或拆分是高风险操作,涉及历史数据迁移、告警规则重定向和权限重建。建议在初期就规划好边界,避免运行半年后再做大规模调整。

总结来看,Log Analytics 工作区设计的本质是在“集中管理”与“边界隔离”之间找到平衡:用尽量少的工作区承载尽量多的数据,用表级 RBAC 和保留分层实现精细控制,用 DCR 和查询治理控制成本,用跨工作区查询保持全局视野。掌握这四点,后续的告警、仪表板与 Sentinel 接入都会建立在一个稳定、可扩展的基础之上。