Azure Monitor通过活动日志功能记录Azure资源的管理操作。 活动日志记录操作,例如创建虚拟机、更改密钥保管库访问策略或资源管理器部署错误。 这些管理操作也称为 控制平面 操作。 使用活动日志查看或审核此信息,或创建警报,以在事件发生时主动通知。
与活动日志不同,Azure资源日志捕获在资源内执行的数据平面操作。 例如,这些操作包括从密钥保管库获取机密或向数据库发出请求。 默认情况下不会收集资源日志,并且需要使用 诊断设置进行配置。
活动日志条目
默认情况下,Azure Monitor 收集活动日志条目,无需配置。 系统生成这些条目,不能更改或删除它们。 条目通常是由更改(创建、更新和删除操作)或正在启动的操作导致的。 活动日志通常不会捕获读取操作。
活动日志条目通常用于在 事件发生后的 3 到 20 分钟内进行分析和警报。 有关活动日志类别的说明,请参阅 Azure 活动日志事件架构。
保留期
Azure 将活动日志事件保留 90 天 ,然后删除它们。 在此期间,无论数量多少,您都不会为条目付费。 有关更多功能(例如更长的保留期),请创建诊断设置,并根据需求 收集其他位置中的条目 。 延长保留期的最常见原因之一是保留 资源创建者信息,该信息仅在活动日志中可用。
查看和检索活动日志
查看订阅、资源组或单个资源的活动日志事件。 使用Azure门户,或使用 Activity Log REST API 以编程方式查询它们。
Azure 门户从大多数服务菜单中提供活动日志窗格。 其中每个区域还支持使用 REST 或通过特定的Azure CLI和Azure PowerShell命令进行编程访问。
指定要检索的事件的时间间隔。 若要使用 REST API 检索事件,必须包含 $filter 参数以及至少一个 eventTimestamp 起始值。 默认情况下,活动日志将事件保留 90 天。 确保时间范围的开始和结束时间都位于该 90 天时段内。
活动日志访问场景
以下部分演示了通过 Azure 门户、以编程方式使用Azure CLI和Azure PowerShell或 REST 调用访问和检索活动日志事件的不同方法的常见方案:
注释
Azure门户示例提供有关该视图中预期事件类型的额外上下文。
注释
Azure PowerShell 示例重点介绍了通过 Get-AzActivityLog cmdlet 可用的特定 cmdlet 命令。
原生 Azure PowerShell 示例使用当前上下文中所选的订阅。
注释
REST API 示例演示如何通过$filter 使用所需的参数来检索事件。
列出资源组的活动日志事件示例还演示了如何使用 Prefer 标头为客户端显式设置超时时间,使其与活动日志 REST API 的 75 秒最大超时时间保持一致。
支持的 $filter 模式 |
详细信息 |
| 具有时间范围的默认订阅 |
$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' |
| 资源组 |
$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and resourceGroupName eq '{resourceGroupName}' |
| 特定资源 |
$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and resourceUri eq '{resourceURI}' |
| 资源提供程序 |
$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and resourceProvider eq '{resourceProviderName}' |
| 相关 ID |
$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and correlationId eq '{correlationID}' |
列出订阅的活动日志事件
订阅级别事件捕获由资源提供程序直接创建的事件,是列出活动日志事件的默认范围。 租户级别和管理组级别事件仅捕获这些层次结构中的 Azure 资源管理器事件。 这些更高级别的范围不包括由Azure 资源管理器操作外部的资源提供程序直接生成的事件。
注释
以下示例在特定时间范围内检索订阅的活动日志事件。
从中打开 活动日志 的菜单确定其初始筛选器。 如果从 “监视 ”菜单打开它,则默认选择的唯一筛选器是订阅。 这与从 订阅> 中选择订阅 >活动日志打开它相同。
以下Azure CLI示例使用az monitor activity-log list命令。
显式时间范围:
Azure CLI使用 --start-time 和 --end-time 支持与 REST 相同的显式时间范围:
# Set variables
startTime="<StartTime>"
endTime="<EndTime>"
# Retrieve activity log events
az monitor activity-log list \
--start-time "$startTime" \
--end-time "$endTime"
相对时间范围:
Azure CLI 还支持使用 --offset 指定相对时间范围。
注释
例如, --offset 14d 返回过去 14 天内的事件。
# Set variables
offset="14d"
# Retrieve activity log events
az monitor activity-log list \
--offset "$offset"
注释
Azure CLI命令使用当前 CLI 上下文中的Azure 资源管理器终结点,因此无需在命令语法中指定 management.chinacloudapi.cn。
以下Azure PowerShell示例使用 Get-AzActivityLog cmdlet。
显式时间范围:
Azure PowerShell支持使用 StartTime 和 EndTime 指定确切的时间范围,类似于 REST:
# Set variables
$startTime = [datetime]"<StartTime>"
$endTime = [datetime]"<EndTime>"
$getAzActivityLogParams = @{
StartTime = $startTime
EndTime = $endTime
}
# Retrieve activity log events
Get-AzActivityLog @getAzActivityLogParams
相对时间范围:
Azure PowerShell还支持使用 Get-Date 和 StartTime 的 EndTime 表达式查询相对时间范围。
注释
以下示例返回过去 14 天内的事件,时间范围截止到命令运行时。
# Set variables
$lookbackDays = 14
$getAzActivityLogParams = @{
StartTime = (Get-Date).AddDays(-$lookbackDays)
EndTime = Get-Date
}
# Retrieve activity log events
Get-AzActivityLog @getAzActivityLogParams
注释
Azure PowerShell cmdlet 使用当前 Az 上下文中的Azure 资源管理器终结点,因此无需在 cmdlet 语法中指定management.chinacloudapi.cn。
以下 REST 示例使用 Activity Logs - List REST API 操作。
GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}'
Authorization: Bearer {accessToken}
列出资源组的活动日志事件
将 resourceGroupName 添加到 $filter,以将 Azure Monitor 活动日志结果的范围限定为特定的资源组。
从中打开 活动日志 的菜单确定其初始筛选器。 如果从某个资源的菜单打开它,则筛选器将设置为该资源。 选择 “添加筛选器 ”以向筛选器添加更多属性。 下面是可在门户中筛选的其他属性:
-
Resource - 属于Azure解决方案的项,例如数据库或虚拟机。
-
资源类型 - 资源 所属的类别,例如虚拟机、Web 应用或数据库。
-
Operation - 影响Azure 资源管理器资源的操作或命令,例如创建、删除和写入。
-
事件发起者 - 按启动事件的标识筛选事件。
-
事件类别 - 筛选特定操作的事件类型。
以下Azure CLI示例使用az monitor activity-log list命令。
注释
Prefer: wait=75的 REST 标头在此操作的 Azure CLI 命令中没有直接等效项。 此命令直接发出查询并返回匹配的活动日志记录。
使用 az monitor activity-log list 命令检索范围限定为资源组的活动日志事件。 特定的Azure CLI命令可降低等效 REST API 调用的复杂性。
# Set variables
resourceGroupName="<ResourceGroupName>"
offset="30d"
# Retrieve activity log events
az monitor activity-log list \
--resource-group "$resourceGroupName" \
--offset "$offset"
注释
Azure CLI命令使用当前 CLI 上下文中的Azure 资源管理器终结点,因此无需在命令语法中指定 management.chinacloudapi.cn。
以下Azure PowerShell示例使用 Get-AzActivityLog cmdlet。
注释
Prefer: wait=75的 REST 标头在此操作的 Azure PowerShell cmdlet 中没有直接等效项。 此命令直接发出查询并返回匹配的活动日志记录。
Azure PowerShell提供 Get-AzActivityLog cmdlet,以检索在相对时间范围内限定为资源组的活动日志事件。
# Set variables
$resourceGroupName = "<ResourceGroupName>"
$lookbackDays = 30
$getAzActivityLogParams = @{
ResourceGroupName = $resourceGroupName
StartTime = (Get-Date).AddDays(-$lookbackDays)
EndTime = Get-Date
}
# Retrieve activity log events
Get-AzActivityLog @getAzActivityLogParams
注释
Azure PowerShell cmdlet 使用当前 Az 上下文中的Azure 资源管理器终结点,因此无需在 cmdlet 语法中指定management.chinacloudapi.cn。
以下 REST 示例使用 Activity Logs - List REST API 操作。
GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}' and resourceGroupName eq '{resourceGroupName}'
Authorization: Bearer {accessToken}
Prefer: wait=75
返回特定活动日志属性
使用参数仅返回指定属性,从而减少响应有效负载大小。 有关详细信息,请参阅 活动日志架构属性说明。
Azure门户不提供直接限制从活动日志事件返回的属性的方法。 若要减少查看的数据量,请使用“活动日志”边栏选项卡中的“编辑列”选项选择门户视图中显示哪些列。
以下Azure CLI示例使用az monitor activity-log list命令。
使用--max-events的az monitor activity-log list参数来限制返回的记录数。
# Set variables
offset="30d"
maxEvents=100
selectFields=(
eventName
operationName
status
eventTimestamp
correlationId
submissionTimestamp
level
)
# Retrieve activity log events
az monitor activity-log list \
--offset "$offset" \
--max-events "$maxEvents" \
--select "${selectFields[@]}"
注释
Azure CLI命令使用当前 CLI 上下文中的Azure 资源管理器终结点,因此无需在命令语法中指定 management.chinacloudapi.cn。
以下Azure PowerShell示例使用 Get-AzActivityLog cmdlet。
使用-MaxRecord的Get-AzActivityLog参数来限制返回的记录数。
# Set variables
$lookbackDays = 30
$maxRecord = 100
$selectProperties = @(
"EventName"
"OperationName"
"Status"
"EventTimestamp"
"CorrelationId"
"SubmissionTimestamp"
"Level"
)
$getAzActivityLogParams = @{
StartTime = (Get-Date).AddDays(-$lookbackDays)
EndTime = Get-Date
MaxRecord = $maxRecord
}
# Retrieve activity log events
Get-AzActivityLog @getAzActivityLogParams |
Select-Object -Property $selectProperties
注释
Azure PowerShell cmdlet 使用当前 Az 上下文中的Azure 资源管理器终结点,因此无需在 cmdlet 语法中指定management.chinacloudapi.cn。
以下 REST 示例使用 Activity Logs - List REST API 操作。
GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}'&$select=eventName,operationName,status,eventTimestamp,correlationId,submissionTimestamp,level
Authorization: Bearer {accessToken}
列出租户级活动日志事件
租户级活动日志事件通常具有有限的条目,但可能包括管理组或订阅创建等重要事件。 这些事件独立于订阅级活动日志事件,但可能包含重复的资源管理事件。
在这一范围内查询使用的 REST API 与订阅级活动日志事件 API 不同。 Azure CLI和Azure PowerShell不提供专用命令。
在 Azure 门户中转到 Monitor>Activity log。 更改 “活动 ”下拉菜单,然后选择“ 目录活动”。
此截图显示 Azure 门户中活动日志页中选中的“目录活动”选项。
以下Azure CLI示例使用 az rest 调用 Tenant Activity Logs - List REST API 操作。
# Set variables
apiVersion="<ApiVersion>"
startTime="<StartTime>"
endTime="<EndTime>"
filter="eventTimestamp ge '$startTime' and eventTimestamp le '$endTime'"
encodedFilter=$(jq -rn --arg filter "$filter" '$filter | @uri')
# Build request URL
apiEndpoint="https://management.chinacloudapi.cn"
provider="Microsoft.Insights/eventtypes/management/values"
queryString="?api-version=$apiVersion&\$filter=$encodedFilter"
url="$apiEndpoint/providers/$provider$queryString"
# Retrieve tenant-level activity log events
az rest --method get --url "$url"
以下Azure PowerShell示例使用 Invoke-AzRestMethod 调用 Tenant Activity Logs - List REST API 操作。
# Set variables
$apiVersion = "<ApiVersion>"
$startTime = "<StartTime>"
$endTime = "<EndTime>"
$filter = "eventTimestamp ge '$startTime' and eventTimestamp le '$endTime'"
$encodedFilter = [uri]::EscapeDataString($filter)
# Build request URL
$apiEndpoint = "https://management.chinacloudapi.cn"
$provider = "Microsoft.Insights/eventtypes/management/values"
$queryString = "?api-version=$apiVersion&`$filter=$encodedFilter"
$url = "$apiEndpoint/providers/$provider$queryString"
$invokeAzRestMethodParams = @{
Uri = $url
Method = "GET"
}
Invoke-AzRestMethod @invokeAzRestMethodParams
以下 REST 示例使用 Tenant Activity Logs - List REST API 操作。
GET https://management.chinacloudapi.cn/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}'
Authorization: Bearer {accessToken}
列出管理组级活动日志事件
管理组级活动日志的事件捕获针对特定管理组的事件,例如政策分配和管理组成员身份更改。
注释
- 以下示例使用
2017-03-01-preview 管理组级活动日志查询所需的 API 版本。
若要查看Azure门户中的管理组级活动日志事件,请转到 Management 组>选择管理组>活动日志。
&显示 Azure 门户中管理组的活动日志边栏选项卡的屏幕截图。
以下Azure CLI示例使用 az rest 调用 Management group activity log query REST API 操作。
# Set variables
apiVersion="<ApiVersion>"
managementGroupId="<ManagementGroupId>"
startTime="<StartTime>"
endTime="<EndTime>"
filter="eventTimestamp ge '$startTime' and eventTimestamp le '$endTime'"
encodedFilter=$(jq -rn --arg filter "$filter" '$filter | @uri')
# Build request URL
apiEndpoint="https://management.chinacloudapi.cn"
path="/providers/Microsoft.Management/managementGroups/$managementGroupId"
provider="Microsoft.Insights/eventtypes/management/values"
queryString="?api-version=$apiVersion&\$filter=$encodedFilter"
url="$apiEndpoint$path/providers/$provider$queryString"
# Retrieve management-group activity log events
az rest --method get --url "$url"
以下Azure PowerShell示例使用 Invoke-AzRestMethod 调用 Management group activity log query REST API 操作。
# Set variables
$apiVersion = "<ApiVersion>"
$managementGroupId = "<ManagementGroupId>"
$startTime = "<StartTime>"
$endTime = "<EndTime>"
$filter = "eventTimestamp ge '$startTime' and eventTimestamp le '$endTime'"
$encodedFilter = [uri]::EscapeDataString($filter)
# Build request URL
$apiEndpoint = "https://management.chinacloudapi.cn"
$path = "/providers/Microsoft.Management/managementGroups/$managementGroupId"
$provider = "Microsoft.Insights/eventtypes/management/values"
$queryString = "?api-version=$apiVersion&`$filter=$encodedFilter"
$url = "$apiEndpoint$path/providers/$provider$queryString"
$invokeAzRestMethodParams = @{
Method = "GET"
Uri = $url
}
Invoke-AzRestMethod @invokeAzRestMethodParams
以下 REST 示例使用 Management group activity log query REST API 操作。
GET https://management.chinacloudapi.cn/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Insights/eventtypes/management/values?api-version={apiVersion}&$filter=eventTimestamp ge '{startTime}' and eventTimestamp le '{endTime}'
Authorization: Bearer {accessToken}
下表介绍了上述示例中使用的参数。
| Variable |
示例值 |
Purpose |
apiEndpoint |
https://management.chinacloudapi.cn |
ARM 端点。 |
subscriptionId |
当前订阅 |
REST URL 范围;原生命令使用当前上下文。 |
resourceGroupName |
<ResourceGroupName> |
要查询的资源组。 |
managementGroupId |
<ManagementGroupId> |
查询的管理组 |
apiVersion |
<ApiVersion> |
REST API 索引中所选操作的版本。 |
活动日志见解
活动日志洞察是一个 Azure Monitor 工作簿,它提供一组仪表板,用于监视订阅中资源和资源组的更改。 仪表板还显示有关哪些用户或服务在订阅中执行了活动以及活动状态的数据。
若要启用活动日志见解,请将活动日志导出到 Log Analytics 工作区,如 导出活动日志中所述。 此过程将事件发送到 AzureActivity 表,该表供活动日志见解使用。
可以在订阅或资源级别打开活动日志洞察。 要获取订阅,请在“监视”菜单中的“工作簿”部分选择“活动日志见解”。
对于单个资源,请从资源菜单的“工作簿”部分选择“活动日志见解”。
导出活动日志
创建诊断设置,以将活动日志条目发送到其他目标,以便额外的保留时间和功能。
在 Azure 门户中,在 Azure Monitor 菜单上选择“活动日志”,然后选择“导出活动日志”。 有关创建诊断设置的详细信息和其他方法,请参阅 Azure Monitor 中的诊断设置。 请确保 禁用活动日志的任何旧配置。
以下部分提供有关资源日志的每个可配置目标的详细信息。
注释
导出活动日志的旧方法是日志配置文件。 请参阅 遗留集合方法。
将活动日志发送到 Log Analytics 工作区,以获取以下功能:
活动日志没有数据引入费用。 活动日志的保留费用仅适用于超过默认保留期 90 天的时间段。 可将 保留期增加到 最多 12 年。
Log Analytics 工作区中的活动日志数据存储在名为 AzureActivity 的表中。 此表的结构因 日志条目的类别而异。
注释
例如,若要查看每个类别的活动日志记录计数,请使用以下查询:
AzureActivity
| summarize count() by CategoryValue
注释
若要检索管理类别中的所有记录,请使用以下查询:
AzureActivity
| where CategoryValue == "Administrative"
Important
在某些情况下,字段中 AzureActivity 的值可能与其他等效值不同。 在AzureActivity中查询数据时,使用不区分大小写的运算符进行字符串比较,或使用标量函数(scalar function)在比较之前,将字段强制为统一大小写。 例如,使用 tolower() 函数让字段始终为小写,或者在执行字符串比较时使用 =~ 运算符。
将活动日志发送到 Azure 事件中心,以将条目发送到 Azure 外部,例如,发送到第三方 SIEM 或其他日志分析解决方案。 来自事件中心的活动日志事件以 JSON 格式使用,其中的 records 元素包含每个有效负载中的记录。 架构取决于类别,并在 Azure 活动日志事件架构中进行了描述。
导出活动日志
{
"records": [
{
"time": "2019-01-21T22:14:26.9792776Z",
"resourceId": "/subscriptions/s1/resourceGroups/MSSupportGroup/providers/microsoft.support/supporttickets/115012112305841",
"operationName": "microsoft.support/supporttickets/write",
"category": "Write",
"resultType": "Success",
"resultSignature": "Succeeded.Created",
"durationMs": 2826,
"callerIpAddress": "192.0.2.1",
"correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
"identity": {
"authorization": {
"scope": "/subscriptions/s1/resourceGroups/MSSupportGroup/providers/microsoft.support/supporttickets/115012112305841",
"action": "microsoft.support/supporttickets/write",
"evidence": {
"role": "Subscription Admin"
}
},
"claims": {
"aud": "https://management.core.chinacloudapi.cn/",
"iss": "https://sts.chinacloudapi.cn/aaaabbbb-0000-cccc-1111-dddd2222eeee/",
"iat": "1421876371",
"nbf": "1421876371",
"exp": "1421880271",
"ver": "1.0",
"http://schemas.microsoft.com/identity/claims/tenantid": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"http://schemas.microsoft.com/claims/authnmethodsreferences": "pwd",
"http://schemas.microsoft.com/identity/claims/objectidentifier": "aaaa0000-bb11-2222-33cc-444444dddddd",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn": "admin@contoso.com",
"puid": "1003BFFD8EC002D4",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "9vckmEGF7zDKk1YzIY8k0t1_EAPaXoeHyPRn6f413zM",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname": "John",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname": "Smith",
"name": "John Smith",
"groups": "bbbb1111-cc22-3333-44dd-555555eeeeee,aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb,cccc2222-dd33-4444-55ee-666666ffffff",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name": " admin@contoso.com",
"appid": "00001111-aaaa-2222-bbbb-3333cccc4444",
"appidacr": "2",
"http://schemas.microsoft.com/identity/claims/scope": "user_impersonation",
"http://schemas.microsoft.com/claims/authnclassreference": "1"
}
},
"level": "Information",
"location": "global",
"properties": {
"statusCode": "Created",
"serviceRequestId": "bbbbbbbb-1111-2222-3333-cccccccccccc"
}
}
]
}
如果要保留超过 90 天的日志数据进行审核、静态分析或备份,请将活动日志发送到 Azure 存储帐户。 如果您需要将事件保留 90 天或更短时间,则无需将其存档到存储帐户中。
将活动日志发送到存储时,一旦发生事件,就会在存储帐户中创建存储容器。 容器中的 blob 使用以下命名约定:
insights-activity-logs/resourceId=/SUBSCRIPTIONS/{subscription ID}/y={four-digit numeric year}/m={two-digit numeric month}/d={two-digit numeric day}/h={two-digit 24-hour clock hour}/m=00/PT1H.json
insights-activity-logs/resourceId=/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/y=2020/m=06/d=08/h=18/m=00/PT1H.json
每个 PT1H.json Blob 都包含一个 JSON 对象,其中包含在 blob URL 中指定的小时收到的日志文件中的事件。 在当前小时内,收到的事件将被追加到 PT1H.json 文件中,无论它们是在何时生成的。 URL m=00 中的分钟参数始终为 00,因为 Blob 是每小时创建一次的。
每个事件都以以下格式存储在 PT1H.json 文件中。 此格式使用通用的顶级架构,但对于每个类别来说都是唯一的,如 活动日志架构中所述。
{
"time": "2020-06-12T13:07:46.766Z",
"resourceId": "/SUBSCRIPTIONS/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/RESOURCEGROUPS/MY-RESOURCE-GROUP/PROVIDERS/MICROSOFT.COMPUTE/VIRTUALMACHINES/MV-VM-01",
"correlationId": "bbbb1111-cc22-3333-44dd-555555eeeeee",
"operationName": "Microsoft.Resourcehealth/healthevent/Updated/action",
"level": "Information",
"resultType": "Updated",
"category": "ResourceHealth",
"properties": {
"eventCategory": "ResourceHealth",
"eventProperties": {
"title": "This virtual machine is starting as requested by an authorized user or process. It will be online shortly.",
"details": "VirtualMachineStartInitiatedByControlPlane",
"currentHealthStatus": "Unknown",
"previousHealthStatus": "Unknown",
"type": "Downtime",
"cause": "UserInitiated"
}
}
}
导出管理组活动日志
为管理组创建诊断设置时,它会导出该管理组及其层次结构下的所有管理组的 Azure Monitor 活动日志事件。 如果层次结构中的多个管理组具有诊断设置,则会收到重复事件。 对最高级别管理组的诊断设置足以用于管理组事件,但它不会捕获每个订阅级活动日志事件。
Azure 资源管理器写入活动日志事件时包括一个hierarchy属性,但该属性不是必需的。 Azure 资源管理器外部的资源提供程序不会填充它。 没有此属性的订阅级别事件不会传播到管理组诊断设置,包括根管理组上的设置。
若要捕获未传播到管理组的事件,请为每个需要监视的订阅 创建订阅级诊断设置 。 如果需要导出所有订阅级事件,请选择所有活动日志类别。
如果订阅和管理组将相同的事件导出到同一目标,则会收到重复事件。 保留订阅级诊断设置,以免在没有 hierarchy 属性时漏掉事件。
注释
例如,如果 MG1 包含 MG2(包含 Subscription1),则 MG1 上的诊断设置将捕获 MG1、MG2 的活动日志事件,以及 Subscription1 上的诊断设置收集的许多事件。 在 Subscription1 上配置诊断设置,以也捕获没有 hierarchy 属性的事件。 不需要 MG2 上的诊断设置来收集相同的管理组事件。
如果你有重复的事件,请使用使用所有字段哈希标识唯一记录的查询来合并它们。
注释
以下 Kusto 示例查询显示了在 Log Analytics 工作区中收集的日志样本:
AzureActivity
| extend Hash = hash(dynamic_to_json(pack_all()))
| summarize arg_max(TimeGenerated, *) by Hash
将活动日志导出到文件
选择 “下载为 CSV ”,将活动日志导出到 Azure 门户中的 CSV 文件。
Important
导出大量日志条目可能需要很长时间。 若要提高性能,请减少导出的时间范围。 在 Azure 门户中,设置 Timespan 设置。
以下Azure CLI示例使用az monitor activity-log list命令。
# Set variables
startTime="<StartTime>"
endTime="<EndTime>"
maxItems=1000
outputFile="<OutputFilePath>"
# Retrieve activity log events
az monitor activity-log list \
--start-time "$startTime" \
--end-time "$endTime" \
--max-items "$maxItems" \
> "$outputFile"
注释
Azure CLI命令使用当前 CLI 上下文中的Azure 资源管理器终结点,因此无需在命令语法中指定 management.chinacloudapi.cn。
以下Azure PowerShell示例使用 Get-AzActivityLog cmdlet。
# Set variables
$startTime = "<StartTime>"
$endTime = "<EndTime>"
$outputFile = "<OutputFilePath>"
$getAzActivityLogParams = @{
StartTime = $startTime
EndTime = $endTime
}
# Retrieve activity log events
Get-AzActivityLog @getAzActivityLogParams |
Export-Csv -Path $outputFile -NoTypeInformation
注释
以下示例 PowerShell 脚本按一小时间隔将活动日志导出到 CSV 文件,每个文件都保存到单独的文件中。
# Set variables
$startTime = [datetime]"<StartTime>"
$endTime = [datetime]"<EndTime>"
$outputFolder = "<OutputFolder>"
# Ensure output folder exists
if (-not (Test-Path $outputFolder)) {
New-Item -Path $outputFolder -ItemType Directory
}
# Loop through 1-hour intervals
$currentStart = $startTime
while ($currentStart -lt $endTime) {
$currentEnd = $currentStart.AddHours(1)
if ($currentEnd -gt $endTime) { $currentEnd = $endTime }
$timestamp = $currentStart.ToString("yyyyMMdd-HHmm")
$csvFile = Join-Path $outputFolder "ActivityLog_$timestamp.csv"
Write-Host "Fetching logs from $currentStart to $currentEnd..."
Get-AzActivityLog -StartTime $currentStart -EndTime $currentEnd -ErrorAction Stop |
Export-Csv -Path $csvFile -NoTypeInformation
$currentStart = $currentEnd
}
Write-Host "Export completed. Files saved to $outputFolder."
注释
Azure PowerShell cmdlet 使用当前 Az 上下文中的Azure 资源管理器终结点,因此无需在 cmdlet 语法中指定management.chinacloudapi.cn。
识别资源创建
使用活动日志了解系统何时创建资源以及创建资源的人员。 活动日志是存储资源创建者的唯一位置。 由于活动日志默认仅保留 90 天的数据,因此必须将日志导出到允许延长保留期的位置,例如 Log Analytics 工作区。 然后,通过查询 AzureActivity 表查找资源的创建者。 数据会按照您在 此表的保留期中指定的时间保留。
相关内容