设置诊断日志记录

监视服务器性能对于任何 Analysis Services 解决方案都至关重要。 Azure Analysis Services 与 Azure Monitor 集成。 借助 Azure Monitor 资源日志,可监视日志并将其发送到 Azure 存储,将其流式传输到 Azure 事件中心,并将其导出到 Azure Monitor 日志

Resource logging to Storage, Event Hubs, or Azure Monitor logs

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

会记录哪些内容?

可选择“引擎”“服务”和“指标”类别。

引擎

选择“引擎”将记录所有 xEvents。 不能选择单个事件。

XEvent 类别 事件名称
安全审核 审核登录
安全审核 审核注销
安全审核 审核服务器启动和停止
进度报告 进度报告开始
进度报告 进度报告结束
进度报告 进度报告进行中
查询 查询开始
查询 查询结束
命令 命令开始
命令 命令结束
错误和警告 错误
发现 发现结束
通知 通知
会话 会话初始化
死锁
查询处理 VertiPaq SE 查询开始
查询处理 VertiPaq SE 查询结束
查询处理 VertiPaq SE 查询缓存匹配
查询处理 直接查询开始
查询处理 直接查询结束

服务

操作名称 发生条件
ResumeServer 恢复服务器
SuspendServer 暂停服务器
DeleteServer 删除服务器
RestartServer 用户通过 SSMS 或 PowerShell 重启服务器
GetServerLogFiles 用户通过 PowerShell 导出服务器日志
ExportModel 用户通过在 Visual Studio 中使用 Open 在门户中导出模型

所有指标

“指标”类别会将相同的服务器指标记录到 AzureMetrics 表中。 如果使用的是查询横向扩展,并且需要为每个只读副本分离指标,请改用 AzureDiagnostics 表(其中 OperationName 等于 LogMetric)。

设置诊断日志记录

Azure 门户

  1. Azure 门户中找到服务器,单击左侧导航栏中的“诊断设置”,然后单击“启用诊断”。

    Screenshot showing Turn on diagnostics in the Azure portal.

  2. 在“诊断设置”中,指定以下选项:

    • 名称。 为要创建的日志输入名称。

    • 存档到存储帐户。 要使用此选项,需要一个可连接到的现有存储帐户。 请参阅创建存储帐户。 按照说明创建一个资源管理器常规用途帐户,然后返回到门户中的此页面来选择存储帐户。 新创建的存储帐户可能几分钟后才会显示在下拉菜单中。

    • 流式传输到事件中心。 要使用此选项,需要一个可连接到的现有事件中心命名空间和事件中心。 若要了解详细信息,请参阅使用 Azure 门户创建事件中心命名空间和事件中心。 然后在门户中返回到此页,选择事件中心命名空间和策略名称。

    • 发送到 Log Analytics。 若要使用此选项,可以使用现有工作区或者在门户中新建工作区资源。 有关查看日志的详细信息,请参阅本文中的在 Log Analytics 工作区中查看日志

    • 引擎 选择此选项以记录 Xevent。 若要存档到存储帐户,可以选择资源日志的保留期。 保留期到期后会自动删除日志。

    • 服务。 选择此选项以记录服务级别事件。 若要存档到存储帐户,可以选择资源日志的保留期。 保留期到期后会自动删除日志。

    • 指标 选择此选项可在指标中存储详细数据。 若要存档到存储帐户,可以选择资源日志的保留期。 保留期到期后会自动删除日志。

  3. 单击“保存” 。

    如果收到错误,指出“无法更新诊断 <工作区名称> 的诊断。 订阅 <订阅 ID> 未注册为使用 microsoft.insights”,请遵照排查 Azure 诊断问题中的说明注册帐户,然后重试此过程。

    若要在将来的任意时间点更改资源日志的保存方式,可以返回此页修改设置。

PowerShell

以下基本命令可以帮助你开始使用。 如需有关使用 PowerShell 为存储帐户设置日志记录的逐步指导,请参阅本文稍后部分的教程。

若要使用 PowerShell 启用指标和资源日志记录,请使用以下命令:

  • 若要允许在存储帐户中存储资源日志,请使用以下命令:

    Set-AzDiagnosticSetting -ResourceId [your resource id] -StorageAccountId [your storage account id] -Enabled $true
    

    存储帐户 ID 是需要将日志发送到的存储帐户的资源 ID。

  • 若要允许将资源日志流式传输到事件中心,请使用以下命令:

    Set-AzDiagnosticSetting -ResourceId [your resource id] -ServiceBusRuleId [your service bus rule id] -Enabled $true
    

    Azure 服务总线规则 ID 是以下格式的字符串:

    {service bus resource ID}/authorizationrules/{key name}
    
  • 若要允许将资源日志发送到 Log Analytics 工作区,请使用以下命令:

    Set-AzDiagnosticSetting -ResourceId [your resource id] -WorkspaceId [resource id of the log analytics workspace] -Enabled $true
    
  • 可以使用以下命令获取 Log Analytics 工作区的资源 ID:

    (Get-AzOperationalInsightsWorkspace).ResourceId
    

可以结合这些参数启用多个输出选项。

REST API

了解如何使用 Azure Monitor REST API 更改诊断设置

资源管理器模板

了解如何在创建资源时使用资源管理器模板启用诊断设置

管理日志

通常在设置日志记录数小时后可使用日志。 存储帐户中的日志完全由你管理:

  • 使用标准 Azure 访问控制方法,通过限制访问你的日志的人员来保护日志的安全。
  • 删除不想继续保留在存储帐户中的日志。
  • 请务必设置保留期,以便从存储帐户中删除旧日志。

在 Log Analytics 工作区中查看日志

在 Log Analytics 工作区资源中,指标和服务器事件与 Xevent 集成,以便并列分析。 Log Analytics 工作区还可配置为接收来自其他 Azure 服务的事件,从而提供整个体系结构的诊断日志记录数据。

若要查看诊断数据,请从 Log Analytics 工作区的左侧菜单中打开“日志”。

Screenshot showing log Search options in the Azure portal.

在查询生成器中,展开 LogManagement>AzureDiagnostics 。 AzureDiagnostics 包括引擎和服务事件。 注意即时创建了一个查询。 EventClass_s 字段包含 xEvent 名称,如果使用 Xevent 进行本地日志记录,你可能觉得该名称很眼熟。 单击“EventClass_s”或某一个事件名称,Log Analytics 工作区会继续构造查询。 请务必保存查询以便稍后重复使用。

查询示例

示例 1

以下查询返回模型数据库和服务器的每个查询结束/刷新结束事件的持续时间。 如果进行横向扩展,则结果将按副本细分,因为副本编号包含在 ServerName_s 中。 按 RootActivityId_g 分组可减少从 Azure 诊断 REST API 检索到的行数,并有助于保持在 Log Analytics 速率限制中所述的限制内。

let window = AzureDiagnostics
   | where ResourceProvider == "MICROSOFT.ANALYSISSERVICES" and Resource =~ "MyServerName" and DatabaseName_s =~ "MyDatabaseName" ;
window
| where OperationName has "QueryEnd" or (OperationName has "CommandEnd" and EventSubclass_s == 38)
| where extract(@"([^,]*)", 1,Duration_s, typeof(long)) > 0
| extend DurationMs=extract(@"([^,]*)", 1,Duration_s, typeof(long))
| project  StartTime_t,EndTime_t,ServerName_s,OperationName,RootActivityId_g,TextData_s,DatabaseName_s,ApplicationName_s,Duration_s,EffectiveUsername_s,User_s,EventSubclass_s,DurationMs
| order by StartTime_t asc

示例 2

以下查询返回服务器的内存和 QPU 消耗。 如果进行横向扩展,则结果将按副本细分,因为副本编号包含在 ServerName_s 中。

let window = AzureDiagnostics
   | where ResourceProvider == "MICROSOFT.ANALYSISSERVICES" and Resource =~ "MyServerName";
window
| where OperationName == "LogMetric" 
| where name_s == "memory_metric" or name_s == "qpu_metric"
| project ServerName_s, TimeGenerated, name_s, value_s
| summarize avg(todecimal(value_s)) by ServerName_s, name_s, bin(TimeGenerated, 1m)
| order by TimeGenerated asc 

示例 3

以下查询返回服务器的 Analysis Services 引擎性能计数器每秒读取的行数。

let window =  AzureDiagnostics
   | where ResourceProvider == "MICROSOFT.ANALYSISSERVICES" and Resource =~ "MyServerName";
window
| where OperationName == "LogMetric" 
| where parse_json(tostring(parse_json(perfobject_s).counters))[0].name == "Rows read/sec" 
| extend Value = tostring(parse_json(tostring(parse_json(perfobject_s).counters))[0].value) 
| project ServerName_s, TimeGenerated, Value
| summarize avg(todecimal(Value)) by ServerName_s, bin(TimeGenerated, 1m)
| order by TimeGenerated asc 

有成百上千的查询可以使用。 若要了解有关查询的详细信息,请参阅 Azure Monitor 日志查询入门

使用 PowerShell 启用日志记录

在此快速教程中,你将在 Analysis Services 服务器所在订阅和资源组中创建存储帐户。 然后使用 Set-AzDiagnosticSetting 启用诊断日志记录,将输出发送到新的存储帐户。

先决条件

要完成本教程,必须备好以下资源:

连接到订阅

启动 Azure PowerShell 会话,并使用以下命令登录用户的 Azure 帐户:

Connect-AzAccount -Environment AzureChinaCloud

在弹出的浏览器窗口中,输入 Azure 帐户用户名和密码。 Azure PowerShell 获取与此帐户关联的所有订阅,并按默认使用第一个订阅。

如果有多个订阅,可能需要指定用来创建 Azure 密钥保管库的特定订阅。 键入以下命令查看帐户的订阅:

Get-AzSubscription

然后,键入以下命令,以指定与要记录的 Azure Analysis Services 帐户关联的订阅:

Set-AzContext -SubscriptionId <subscription ID>

注意

如果帐户关联了多个订阅,请务必指定该订阅。

为日志创建新的存储帐户

如果服务器所属订阅中存在现有存储帐户,可对日志使用该帐户。 对本教程而言,需创建专用于 Analysis Services 日志的新存储帐户。 为方便起见,将存储帐户详细信息将存储到名为 sa 的变量中。

还要使用包含 Analysis Services 服务器的资源组。 将 awsales_resgroupawsaleslogsChina North 的值替换为自己的值:

$sa = New-AzStorageAccount -ResourceGroupName awsales_resgroup `
-Name awsaleslogs -Type Standard_LRS -Location 'China North'

标识用于你的日志的服务器帐户

将帐户名称设置为名为“account”的变量,其中 ResourceName 是帐户的名称。

$account = Get-AzResource -ResourceGroupName awsales_resgroup `
-ResourceName awsales -ResourceType "Microsoft.AnalysisServices/servers"

启用日志记录

若要启用日志记录,请将 Set-AzDiagnosticSetting cmdlet 与新存储帐户、服务器帐户和类别的变量一起使用。 运行以下命令,将“-Enabled”标志设置为“$true” :

Set-AzDiagnosticSetting  -ResourceId $account.ResourceId -StorageAccountId $sa.Id -Enabled $true -Categories Engine

输出应该类似于以下示例:

StorageAccountId            : 
/subscriptions/a23279b5-xxxx-xxxx-xxxx-47b7c6d423ea/resourceGroups/awsales_resgroup/providers/Microsoft.Storage/storageAccounts/awsaleslogs
ServiceBusRuleId            :
EventHubAuthorizationRuleId :
Metrics                    
    TimeGrain       : PT1M
    Enabled         : False
    RetentionPolicy
    Enabled : False
    Days    : 0

Logs                       
    Category        : Engine
    Enabled         : True
    RetentionPolicy
    Enabled : False
    Days    : 0

    Category        : Service
    Enabled         : False
    RetentionPolicy
    Enabled : False
    Days    : 0

WorkspaceId                 :
Id                          : /subscriptions/a23279b5-xxxx-xxxx-xxxx-47b7c6d423ea/resourcegroups/awsales_resgroup/providers/microsoft.analysisservic
es/servers/awsales/providers/microsoft.insights/diagnosticSettings/service
Name                        : service
Type                        :
Location                    :
Tags                        :

此输出确认已为服务器启用日志记录,会将信息保存到存储帐户。

还可为日志设置保留策略,以便自动删除较旧的日志。 例如,使用 -RetentionEnabled 标志将保留期策略设置为 $true,并将 -RetentionInDays 参数设置为 90。 将自动删除超过 90 天的日志。

Set-AzDiagnosticSetting -ResourceId $account.ResourceId`
 -StorageAccountId $sa.Id -Enabled $true -Categories Engine`
  -RetentionEnabled $true -RetentionInDays 90

后续步骤

了解有关 Azure Monitor 资源日志记录的详细信息。

请参阅 PowerShell 帮助中的 Set-AzDiagnosticSetting