3、Azure活动日志详解:活动日志内容结构、类别(管理、服务健康、安全等)、查看与筛选

活动日志是什么?先说说我的理解

Azure 活动日志就是平台的审计日志,记录着所有控制平面操作。说白了,你在 Azure 上做的每一次创建、修改、删除资源,都会在这里留下痕迹。我习惯把它比作 Azure 的“操作黑匣子”——出了问题翻一翻,谁在什么时候动了什么,一目了然。

但它不记录数据平面操作,比如从存储账户里下载文件、查询数据库。这个区别很多人刚开始容易搞混。嗯,这里要注意:活动日志只管 管理操作,不碰数据面。

活动日志内容结构:一条记录长什么样?

每条活动日志都是一个 JSON 对象,里面有几十个字段。不过日常排查,你重点关注的就那几个。我整理成了一张表格,方便对照:

字段名 说明 示例值
caller 操作发起者(用户/服务主体/系统) admin@contoso.com
operationName 操作名称,通常含资源类型和动作 Microsoft.Compute/virtualMachines/write
status 操作结果:Succeeded / Failed / Started Failed
eventTimestamp 事件发生时间(UTC) 2025-02-18T09:23:45.123Z
category 日志类别(见下文) Administrative
resourceId 操作目标的 Azure 资源 ID /subscriptions/.../resourceGroups/.../providers/...
correlationId 相关事件关联 ID(调试利器) a1b2c3d4-...
level 严重级别:Critical / Error / Warning / Informational Error

我在项目中遇到过好几次,光看 operationName 不够,必须配合 correlationId 才能串联起同一操作的多条日志。比如创建虚拟机失败,往往先是 Started,然后才是 Failed,中间可能还有子操作。用 correlationId 一搜,全连起来了。

活动日志类别:三大主线 + 其他

类别字段把日志分成了几类。最常用的三个:

  • Administrative(管理):所有资源创建、修改、删除、分配权限等。占日志量的 90% 以上。
  • Service Health(服务健康):Azure 服务自身的问题,比如区域故障、计划维护。这个不是你的操作,是微软的。
  • Security(安全):安全相关事件,比如 Azure AD 条件访问评估、安全策略违规。注意它不包含登录失败等细节,那些得看 Sign-in logs。

除此之外还有 Alert(警报触发)、Autoscale(自动缩放)、Recommendation(建议)等类别,但很少用到。

为什么要有分类?因为筛选的时候直接按 category 过滤,效率极高。我曾经排查一起“资源无故被删”的事故,先按 Administrative 和 Delete 操作过滤,只用了 30 秒就定位到人了。

小技巧:在门户中查看活动日志时,可以先用“类别”下拉框选 Administrative,再输入操作名关键词。这样能大幅减少滚动条折磨。

查看与筛选:三种姿势,各有利弊

查看活动日志,我个人常用三种方式:门户、Azure CLI、PowerShell。你按场景选就行。

1. Azure 门户

最直观。在左侧菜单点“Monitor”→ 活动日志,或者直接在资源页点“活动日志”。

支持快速筛选:时间范围、类别、操作、状态、发起者。还可以添加自定义筛选条件。

适合临时看一眼,或者给非技术同事展示。

2. Azure CLI

我习惯用 CLI 做快速排查。命令简单,响应快。

# 列出最近1小时的管理类失败操作
az monitor activity-log list \
  --filter "category eq 'Administrative' and status eq 'Failed'" \
  --start-time "$(date -u -d '1 hour ago' '+%Y-%m-%dT%H:%M:%SZ')"

配合 --query 参数可以只取你关心的字段,适合脚本化。

3. PowerShell

更接近 .NET 体系,适合需要复杂逻辑的场景。

Get-AzLog -StartTime (Get-Date).AddHours(-1) `
          -Status Failed `
          -Category Administrative |
  Select-Object OperationName, Caller, EventTimestamp, Status

说到底,这三种方法查出来的数据是一样的,区别在于交互方式。你想想看,日常告警响应时间就几分钟,哪还有时间慢慢点门户?我都是 CLI 上来直接 grep。

避坑指南:我曾经在筛选时把时间范围设成“最近24小时”,结果因为时区没转成 UTC,漏掉了凌晨2点的操作。活动日志时间戳默认是 UTC,但门户显示时做了本地转换。用 CLI 一定要传 UTC 时间。
另外,活动日志默认保留 90 天,超过的数据会自动消失。如果需要长期审计,必须把日志导出到存储账户或 Log Analytics 工作区。

一张图看懂活动日志体系

下面我用 SVG 画了一张结构图,把上面讲的内容串起来。你可以把它当作速查地图。

Azure 活动日志体系结构 Azure 活动日志知识体系 Azure 控制平面操作 活动日志(Activity Log) Administrative(管理) Service Health(服务健康) Security(安全) 查看方式 Azure 门户 Azure CLI PowerShell 仅记录控制平面 保留 90 天

从图里能看出来,所有控制平面操作统一汇聚到活动日志,按类别分流,最后通过三种方式查询。你可以在门户上点鼠标,也可以用 CLI 写一行命令——结果一样,后者适合自动化。

总结几个实用经验

  • 筛选关键词:用 operationName 的 Microsoft.Compute/virtualMachines/delete 这种格式,避免把创建误判为删除。
  • 定时导出:审计要求高的场景,建议用诊断设置把活动日志流到 Log Analytics,再建警报。比如“30分钟内同一用户连续删除3个资源”就发通知。
  • 了解默认保留期:90天。如果你需要查半年前的操作,必须提前导出到存储账户。我有个客户因为在第91天发现违规操作,结果日志已经被清理,后悔莫及。
核心记住一条:活动日志是排查控制面问题的第一入口。遇到资源创建失败、权限拒绝、意外删除,先去看活动日志。配合 correlationId 和 status 筛选,五分钟内通常能找到根因。

好了,这一章的内容就这么多。活动日志结构和筛选本身不难,难的是养成“出事先看活动日志”的习惯。我记得刚接触 Azure 时,遇到问题总先去找 VM 内的系统日志,折腾半天才发现是 Azure 平台拒绝了操作。从那以后,活动日志成了我解决问题时的第一站。