Get-AzureRmLog -CorrelationId 未按预期检索记录

Get-AzureRmLog -CorrelationId does not retrieve records as expected

我正在使用以下命令检索 activity 日志

$ActivityLog = Get-AzureRmLog -StartTime $starttime -EndTime $endTime -WarningAction SilentlyContinue -MaxRecord $MaxRecords -Status 'Succeeded' 

$Output = $ActivityLog | Where-Object {$_.Authorization.Action -eq 'Microsoft.Resources/deployments/write'} 

接下来我循环检索记录并尝试使用 correlationid 获取相关记录 - 下面的简化代码。

foreach ($record in $output)
{
    $record.CorrelationId
    if($record.CorrelationId -eq $null -or $record.CorrelationId -eq ''){'error'}

    Get-AzureRmLog -CorrelationId $($record.CorrelationId) -WarningAction SilentlyContinue
    #EXPECTED this command to show me the original record and any related log entries.
}

在我的例子中,我遍历了每个 activity 日志记录,我可以使用上面的脚本验证我对每个记录都有一个有效的相关 ID。

然而,当我尝试使用 Get-AzureRmLog -CorrelationId 获取相关记录时,我得到了很多记录的 0 个结果。我可以理解有些活动在日志中可能只有一个相关条目。然而,即使对于这种情况,当我 运行 Get-AzureRmLog -CorrelationId 时,我希望它会 return 我们最初从中检索相关 ID 的单个 activity 日志条目。

为什么会这样?

相关 ID 的缺失事件记录可能根本没有映射到指定 date-time window 期间的任何事件。

Get-AzureRMlog -CorrelationId "Insert Correlation ID here"

如果 运行 具有有效的关联 ID,将在当前 date/time 执行后的最后 7 天内枚举最多 1000 个与指定关联 ID 关联的事件。每个关联 ID 通常只输出一个事件。

作为测试,我建议您挑选一些您希望看到的关联事件的关联 ID,并分别 运行 Get-AzureRMlog 每个关联 ID 并验证事件输出。然后 运行 针对列表中的关联 ID 进行相同的测试,没有要比较的事件。如果未列出任何事件,则表示在 time-frame 期间没有与 ID 关联的事件日志。

article 有一些用法示例,可能对您的调查有用。

通过关联 ID 获取事件日志

PS C:\>Get-AzureRmLog -CorrelationId "60c694d0-e46f-4c12-bed1-9b7aef541c23"

此命令列出最多 1000 个与指定关联 ID 关联的事件,这些事件发生在当前 date/time 的 7 天内。注意:这通常只是一个事件。

通过具有最大事件数的关联 ID 获取事件日志

PS C:\>Get-AzureRmLog -CorrelationId "60c694d0-e46f-4c12-bed1-9b7aef541c23" -MaxEvents 100

此命令最多列出 100 个与指定关联 ID 关联的事件,这些事件发生在当前 date/time 的 7 天内。注意:这通常只是一个事件。

通过关联 ID 和开始时间获取事件日志

PS C:\>Get-AzureRmLog -CorrelationId "60c694d0-e46f-4c12-bed1-9b7aef541c23" -StartTime 2017-05-22T04:30:00

此命令最多列出 1000 个与指定关联 ID 关联的事件,这些事件发生在当地时间 2017-05-22T04:30:00 或之后,前提是开始时间不早于当前时间的 90 天date/time。注意:这通常只是一个事件。