第2章:Log Analytics 工作区创建与管理

聊到 Azure Monitor,首先得有个「家」——这个家就是 Log Analytics 工作区。说白了,所有日志数据最终都要汇聚到这里。我刚开始接触 Azure 监控时,以为工作区就是个简单的日志桶,往里面倒数据就完事了。结果第一个生产项目就踩了坑。

嗯,咱们今天就把这件事彻底讲清楚。

2.1 什么是 Log Analytics 工作区

Log Analytics 工作区是一个逻辑容器。它用来存储 Azure 资源、虚拟机、容器甚至本地服务器产生的日志和指标数据。每个工作区有自己独立的数据隔离边界、访问控制策略和定价模型。

我个人习惯用一个比喻:你可以把工作区想象成一个「专用的数据仓库」。仓库里有不同的货架,也就是表(Table)。每种日志类型对应一张表,比如 AzureActivity 存活动日志,Perf 存性能指标。查询时用 KQL 语言,从这个仓库里拉数据。

核心角色速览

  • 数据接收器:所有诊断设置、代理、数据收集规则(DCR)的最终目的地
  • 查询引擎:支持 KQL 实时分析、图表展示、告警触发
  • 访问边界:细粒度 RBAC 控制,可以按表、按行甚至按列授权
  • 计费单位:数据摄入量、保留时长都按工作区独立计费

2.2 工作区的创建流程

创建本身不难,但有几个细节你一定要注意。我在项目中见过有人把工作区跟资源组放到不同区域,结果网络延迟高得离谱。

通过 Azure 门户创建

步骤其实不复杂:

  1. 登录 portal.azure.com,搜索「Log Analytics 工作区」
  2. 点击「创建」,填写订阅、资源组、工作区名称
  3. 最关键的是 区域 选择——一定要靠近你的主要 Azure 资源区域
  4. 配置定价层,默认为按量付费
  5. 点击「审阅 + 创建」,等几分钟部署完成

提示:创建完成后别急着走。我习惯立刻做三件事:设置每日上限、配置数据保留期、开启基础日志。后面我们会细讲。

通过 PowerShell 或 CLI 创建

自动化场景下,我更推荐 CLI。一个命令就能搞定:

# Azure CLI 示例
az monitor log-analytics workspace create \
  --resource-group rg-monitoring \
  --workspace-name law-prod-001 \
  --location eastus2 \
  --sku PerGB2018

PowerShell 版本类似:

# PowerShell 示例
New-AzOperationalInsightsWorkspace \
  -ResourceGroupName rg-monitoring \
  -Name law-prod-001 \
  -Location eastus2 \
  -Sku PerGB2018

你看看,差别不大。关键是参数里我指定了 PerGB2018 这个 SKU——按每 GB 数据摄入量计费,适合大多数场景。

2.3 数据保留与定价策略

数据保留是这个章节里最容易出问题的地方。我见过一个团队,日志保留设成 90 天,结果一个月账单翻了三倍。

Azure 的保留策略分两层:

保留类型 默认时长 可配置范围 适用场景
交互式保留 30 天 4 - 730 天 日常查询、告警、仪表盘
长期保留 无(关闭) 1 - 2557 天(7 年) 合规审计、历史分析

警告:交互式保留超过 30 天后会额外计费。之前有个客户把所有工作区开到 365 天,「其实」大部分日志根本不会被查。建议根据业务合规需求分层配置——高频查询的日志保留 90 天,归档日志走长期保留,这样能省 30-50% 的成本。

定价模型有两种主流选择:

  • 按量付费 (Pay-as-you-go):每 GB 数据摄入约 ¥2-5(取决于区域),适合中小规模
  • 容量预留 (Commitment Tier):承诺每日摄入量(比如 100 GB/天),折扣深度可达 30-60%,适合大规模生产环境

嗯,这里要注意:容量预留是按工作区分开计算的。如果你有 10 个工作区,想要享受折扣,得在每个工作区单独开启预留层级。

2.4 工作区的访问控制

安全不能马虎。Log Analytics 的权限模型比想象中灵活,但配置起来也有讲究。

工作区级 RBAC

直接在 Azure RBAC 层面赋予角色。常用的内置角色有:

  • Log Analytics 读者:能查询所有表的日志,但不能写入或修改配置
  • Log Analytics 贡献者:可以读写配置、设置告警、创建查询包
  • 所有者:完全控制,包括删除工作区

表级 RBAC(精细权限)

这才是真正的利器。我曾经遇到一个场景:安全团队需要看到所有安全日志,但开发团队只能看自己服务的性能日志。用表级 RBAC 就能实现:

# 给安全团队赋权,只允许查询 SecurityEvent 表
$tableParams = @{
  ResourceGroupName = "rg-monitoring"
  WorkspaceName     = "law-prod-001"
  TableName         = "SecurityEvent"
  RoleDefinitionName = "Log Analytics 读者"
}

Set-AzOperationalInsightsTable -ResourceGroupName $tableParams.ResourceGroupName `
  -WorkspaceName $tableParams.WorkspaceName `
  -TableName $tableParams.TableName `
  -RetentionInDays 365

你看,核心是通过 Set-AzOperationalInsightsTable 命令给不同的表单独绑定权限。这样团队 A 只能访问 Table A,团队 B 只能访问 Table B,互不干扰。

最佳实践:

  • 使用 Azure AD 条件访问策略做二次验证
  • 为每个应用创建独立的查询包(Query Pack),不共享
  • 定期审计工作区的权限变化,尤其是全局管理员

2.5 多工作区架构设计

单个工作区最多能接收约 500 TB/天的数据。大部分企业不会打到这个天花板,但还是得考虑架构规划。

我通常用两种模型:

  • 集中式模型:所有资源写入同一个工作区。优点是查询简单、跨资源关联分析方便;缺点是权限混杂、数据爆炸后查询性能下降
  • 分散式模型:每个环境(开发/测试/生产)或每个业务线独立建工作区。优点是隔离性好、计费清晰;缺点是跨工作区查询时需要联合查询,稍微麻烦一点

你想想看,哪种更适合你的场景?如果是几十台虚拟机的小规模监控,集中式完全够用。大型企业的话,我建议按业务线拆开——至少把生产环境和非生产环境完全隔离。

2.6 工作区健康检查与迁移

工作区用久了,难免要调整。我遇到过最头疼的问题是:早期创建的工作区区域选错了,后来业务搬到另一个区域,日志延迟高达 10 分钟。

迁移工作区本身没有一键功能。我的做法是:

  1. 在新区域创建一个新工作区
  2. 把所有虚拟机和 Azure 资源的诊断设置指向新工作区
  3. 在数据保留策略里,把旧工作区的数据再保留一段时间(做历史审计用)
  4. 等旧工作区没有新数据写入后,逐步降级并最终删除

提示:迁移时可以用 Azure Monitor 的数据导出功能(Export to Storage)把历史数据备份到存储账户。这样旧工作区删除后,你依然能通过 Azure 存储访问历史日志。

2.7 本章知识体系

下面这张图把 Log Analytics 工作区的核心脉络串起来了。你把它存下来,写配置时当个参考图挺好用。

Log Analytics 工作区知识结构图 Log Analytics 工作区知识体系 Log Analytics 工作区 1. 工作区创建 2. 数据保留 & 定价 3. 访问控制 4. 健康检查 & 迁移 门户 / CLI / PowerShell 区域选择优先级 资源组部署策略 交互式保留:4-730天 长期保留:1-2557天 按量付费 vs 容量预留 Azure RBAC(读者/贡献者) 表级 RBAC 精细权限 条件访问 & 查询包 健康检查:区域延迟 / 数据量 迁移策略:新工作区 + 重指诊断设置 核心脉络:创 → 管 → 控 → 迁

你看看这张图,四个主分支基本覆盖了工作区的全生命周期管理。从创建、定价、权限控制到健康检查,每一步都有陷阱。

好,Log Analytics 工作区这部分我们先到这里。记住一句话:工作区是监控的基础设施,一开始设计好,后面能省很多事。