在 Azure Monitor 中创建诊断设置
在 Azure Monitor 中创建和编辑诊断设置,以将 Azure 平台指标和日志发送到不同的目标,例如 Azure Monitor 日志、Azure 存储或 Azure 事件中心。 可以使用不同的方法(例如 Azure 门户、Azure CLI、PowerShell 和 Azure 资源管理器)来处理诊断设置。
可以在 Azure 门户中通过“Azure Monitor”菜单或资源菜单配置诊断设置。
在 Azure 门户中配置诊断设置的位置取决于资源:
对于单项资源,在资源菜单中的“监视”下,选择“诊断设置”。
对于一项或多项资源,在 Azure Monitor 菜单中,选择“设置”下的“诊断设置”,然后选择相应资源。
对于活动日志,在“Azure Monitor”菜单中选择“活动日志”,然后选择“导出活动日志”。 请确保禁用活动日志的任何旧配置。 有关说明,请参阅禁用现有设置。
如果选定的资源上不存在任何设置,系统会提示你创建设置。 选择“添加诊断设置”。
如果资源上有现有的设置,则会看到已配置的设置列表。 若要添加新设置,请选择“添加诊断设置”。 或者,选择“编辑设置”以编辑现有设置。 每个设置最多只能包含一个目标类型。
为设置指定名称(如果未指定)。
要路由的日志和指标:对于日志,请选择一个类别组,或选中要发送到后续指定目标的每个数据类别对应的各个复选框。 每种 Azure 服务的类别列表各不相同。 如果还要将指标存储到 Azure Monitor 日志中,请选择“AllMetrics”。
目标详细信息:选中每个目标对应的复选框。 此时将显示多个选项,以便添加更多信息。
发送到 Log Analytics 工作区:选择你的订阅和要向其发送数据的 Log Analytics 工作区。 如果没有工作区,则必须在继续操作之前创建一个。
存档到存储帐户:选择你的订阅和用于存储数据的存储帐户。
流式传输到事件中心:指定以下条件:
- 订阅:事件中心所属的订阅。
- 事件中心命名空间:如果没有,则必须创建一个。
- 事件中心名称(可选):将所有数据发送到的名称。 如果未指定名称,将为每个日志类别创建一个事件中心。 如果发送多个类别,可能需要指定一个名称来限制创建的事件中心数。 有关详细信息,请参阅 Azure 事件中心的配额和限制。
- 事件中心策略名称(可选):策略定义流式处理机制具有的权限。 有关详细信息,请参阅事件中心功能。
发送到合作伙伴解决方案:必须先在订阅中安装 Azure 本机 ISV 服务。
如果服务同时支持特定于资源模式和 Azure 诊断模式,则在选择“Log Analytics 工作区”作为目标时,会显示用于选择目标表的选项。 通常应选择特定于资源,因为表结构支持更大的灵活性和更高效的查询。
选择“保存”。
几分钟后,新设置将出现在此资源的设置列表中。 生成新的事件数据时,日志会流式传输到指定目标。 发出事件后可能需要长达 15 分钟的时间该事件才会出现在 Log Analytics 工作区中。
在 Azure PowerShell 中使用 New-AzDiagnosticSetting cmdlet 创建诊断设置。 有关参数说明,请参阅此 cmdlet 的文档。
以下示例 PowerShell cmdlet 使用 Log Analytics 工作区为密钥保管库的所有日志或审核日志,以及指标创建诊断设置。
$KV = Get-AzKeyVault -ResourceGroupName <resource group name> -VaultName <key vault name>
$Law = Get-AzOperationalInsightsWorkspace -ResourceGroupName <resource group name> -Name <workspace name> # LAW name is case sensitive
$metric = New-AzDiagnosticSettingMetricSettingsObject -Enabled $true -Category AllMetrics
# For all available logs, use:
$log = New-AzDiagnosticSettingLogSettingsObject -Enabled $true -CategoryGroup allLogs
# or, for audit logs, use:
$log = New-AzDiagnosticSettingLogSettingsObject -Enabled $true -CategoryGroup audit
New-AzDiagnosticSetting -Name 'KeyVault-Diagnostics' -ResourceId $KV.ResourceId -WorkspaceId $Law.ResourceId -Log $log -Metric $metric -Verbose
在 Azure CLI 中使用 az monitor diagnostic-settings create 命令来创建诊断设置。 有关参数说明,请参阅此命令的文档。
以下示例命令使用所有三个目标创建诊断设置。 语法会因你的客户端而稍有不同。
若要指定特定于资源的模式(如果服务支持该模式),请添加值为 true
的 export-to-resource-specific
参数。
az monitor diagnostic-settings create \
--name KeyVault-Diagnostics \
--resource /subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.KeyVault/vaults/mykeyvault \
--logs '[{"category": "AuditEvent","enabled": true}]' \
--metrics '[{"category": "AllMetrics","enabled": true}]' \
--storage-account /subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> \
--workspace /subscriptions/<subscription ID>/resourcegroups/<resource group name>/providers/microsoft.operationalinsights/workspaces/<log analytics workspace name> \
--event-hub-rule /subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.EventHub/namespaces/<event hub namespace>/authorizationrules/RootManageSharedAccessKey \
--event-hub <event hub name> \
--export-to-resource-specific true
以下 JSON 模板提供了一个示例,演示如何创建诊断设置以将所有审核日志发送到 Log Analytics 工作区。 请记住,apiVersion
可能会根据范围内的资源而变化。
模板文件
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"scope": {
"type": "string"
},
"workspaceId": {
"type": "string"
},
"settingName": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.Insights/diagnosticSettings",
"apiVersion": "2021-05-01-preview",
"scope": "[parameters('scope')]",
"name": "[parameters('settingName')]",
"properties": {
"workspaceId": "[parameters('workspaceId')]",
"logs": [
{
"category": null,
"categoryGroup": "audit",
"enabled": true
}
]
}
}
]
}
参数文件
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"settingName": {
"value": "audit3"
},
"workspaceId": {
"value": "/subscriptions/<subscription id>/resourcegroups/<resourcegroup name>/providers/microsoft.operationalinsights/workspaces/<workspace name>"
},
"scope": {
"value": "Microsoft.<resource type>/<resourceName>"
}
}
}
疑难解答
下面提供了一些故障排除提示。
指标类别不受支持
部署诊断设置时,你会收到类似于“不支持指标类别‘xxxx’”的错误消息。即使之前的部署成功,也可能会遇到此错误。
此问题发生在使用资源管理器模板、REST API、CLI 或 Azure PowerShell 时。 通过 Azure 门户创建的诊断设置不受影响,因为仅显示受支持的类别名称。
出现该问题的原因是基础 API 最近发生了更改。 除“AllMetrics”以外的指标类别都不受支持,并且除了一些特定的 Azure 服务之外从未支持过。 过去,部署诊断设置时,将忽略其他类别名称。 Azure Monitor 后端将这些类别重定向到了“AllMetrics”。 从 2021 年 2 月开始,对后端进行了更新,以明确确认提供的指标类别是否准确。 此更改可能导致某些部署失败。
如果收到此错误,请更新部署,将任何指标类别名称替换为“AllMetrics”以解决此问题。 如果部署之前添加了多个类别,则只保留具有“AllMetrics”引用的类别。 如果仍出现此问题,请通过 Azure 门户联系 Azure 支持。
由于 resourceID 中包含非 ASCII 字符,设置消失
诊断设置不支持具有非 ASCII 字符的资源 ID。 以“Preproducción”一词为例。由于无法重命名 Azure 中的资源,唯一的选择是创建不包含非 ASCII 字符的新资源。 如果这些字符在一个资源组中,可以将其下的资源移到新的资源组。 否则,你需要重新创建该资源。
数据重复或丢失的可能性
会尽一切努力确保所有日志数据都正确发送到你的目标,但不可能保证终结点之间 100% 的日志数据传输。 已建立重试和其他机制来解决这些问题,并尝试确保日志数据到达终结点。
非活动资源
当资源处于不活动状态并导出零值指标时,诊断设置导出机制会以增量方式进行退避,以避免导出和存储零值所带来的不必要成本。 退避可能会导致下一个非零值的导出延迟。
当资源处于非活动状态一小时后,导出机制会退避到 15 分钟。 这意味着导出下一个非零值可能会有长达 15 分钟的延迟。 处于非活动状态七天后,会达到两小时的最大退避时间。 一旦资源开始导出非零值,导出机制就会恢复到原来的三分钟导出延迟。
此行为仅适用于导出的指标,不会影响基于指标的警报或自动缩放。
后续步骤