你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Monitor 日志成本计算和选项

大多数 Azure Monitor 实现的最大费用通常是在 Log Analytics 工作区中引入和保留数据。 Azure Monitor 中的一些功能没有直接成本,但会将成本附加到收集的工作区数据上。 本文介绍如何计算 Log Analytics 工作区和 Application Insights 资源的数据费用,以及影响成本的不同配置选项。

提示

有关降低 Azure Monitor 成本的策略,请参阅成本优化和 Azure Monitor

定价模型

Log Analytics 的默认定价采用即用即付模型,该模型基于数据引入量和数据保留。 每个 Log Analytics 工作区作为独立服务计费,并在 Azure 订阅的账单中产生相应费用。 Log Analytics 的定价是按区域设置的。 根据以下因素,数据引入量有时会很大:

  • 已启用的管理解决方案集及其配置。
  • 受监视资源的数量和类型。
  • 从每个受监视资源收集的数据类型。

此处提供了 Azure Monitor 计费计量名称的列表。

数据大小计算

数据量度量为发送要存储的数据的大小,以 GB(10^9 字节)单位度量。 单个记录的数据大小根据该记录的列(存储在 Log Analytics 工作区中)的字符串表示形式进行计算。 无论数据是从代理发送的还是在引入过程中添加的,都是如此。 此计算包括由日志引入 API转换自定义字段添加的任何自定义列,这些列在收集数据时添加并存储在工作区中。

注意

该可计费的数据量计算通常远小于整个传入 JSON 打包事件的大小。 在所有事件类型中,计费大小比传入数据大小平均小 25% 左右。 对于小型事件,最多可以达到 50%。 百分比包括从计费中排除的标准列的影响。 在估算成本并与其他定价模型进行比较时,必须了解计费数据大小的这种计算方式。

排除的列

所有表都有以下标准列,计算记录大小时不包括这些列。 计算记录大小时包含 Log Analytics 中存储的所有其他列。 标准列包括:

  • _ResourceId
  • _SubscriptionId
  • _ItemId
  • _IsBillable
  • _BilledSize
  • Type

排除的表

有些表完全不收取数据引入费用,其中包括 AzureActivityHeartbeatUsageOperation。 此信息将始终由 _IsBillable 列指示,该列指示记录是否已从数据引入、保留和存档计费中排除。

其他解决方案和服务的费用

某些解决方案具有更多关于免费数据引入的特定策略。 例如,Azure Migrate 在服务器评估的前 180 天免费提供依赖项可视化数据。 Microsoft Defender for CloudMicrosoft Sentinel配置管理等服务有其自己的定价模型。

有关任何独特的计费计算,请参阅不同服务和解决方案的文档。

承诺层级

除了即用即付模型外,Log Analytics 还具有承诺层级,与即用即付价格相比,使你能够节省最高 30% 的成本。 采用承诺层级定价时,你能够以低于即用即付定价的价格,为工作区购买起始量为 100 GB/天的数据引入量。 对于超出承诺级别的任何使用量(超额),将按当前承诺层级提供的每 GB 价格计费。 (使用相同的承诺层计费计量表为超额计费。例如,如果工作区处于 200 GB/天的承诺层,并且每天引入 300 GB,则使用量将按 200 GB/天承诺层的 1.5 个单位计费。) 承诺层的承诺期为 31 天,从选择承诺层时开始计算。

  • 在承诺期内,可以更改为更高级别的承诺层级(这将重新开始 31 天的承诺期)。 但在承诺期结束之前,无法返回到即用即付或更低的承诺层级。
  • 在承诺期结束时,工作区将保留所选的承诺层级,并且工作区随时都可以移动到即用即付或更低的承诺层级。
  • 如果工作区无意中移到了承诺层级,请联系 Microsoft 支持部门重置承诺期,以便可以移回即用即付定价层。

承诺层级每日按工作区进行计费。 如果工作区包含在专用群集中,则对该群集计费。 请参阅以下“专用群集”部分。 有关承诺层级及其价格的列表,请参阅 Azure Monitor 定价

Azure 承诺折扣(例如从 Microsoft 企业协议收到的折扣)适用于 Azure Monitor 日志承诺层级定价,与即用即付定价一样。 无论是按工作区还是按专用群集对使用量进行计费,都会应用折扣。

提示

每个 Log Analytics 工作区的“使用情况和估计成本”菜单项显示每个承诺级别的数据引入费用的估计值,以帮助你为数据引入模式选择最佳承诺层。 定期查看此信息,以确定是否可以通过转移到另一层级来减少费用。 有关此视图的信息,请参阅使用情况和预估成本。 若要查看实际费用,请使用 Azure 成本管理 = 计费

专用群集

Azure Monitor 日志专用群集是单个托管 Azure 数据资源管理器群集中的工作区集合。 专用群集支持客户管理的密钥等高级功能,并使用与工作区相同的承诺层级定价模型,不过,它们必须具有至少 100 GB/天的承诺级别。 对于超出承诺级别的任何使用量(超额),将按当前承诺层级提供的每 GB 价格计费。 群集没有即用即付选项。

在提高承诺级别后,群集承诺层级有 31 天的承诺期。 在承诺期,无法降低承诺层级的级别,但可以随时提高。 关联工作区与群集后,系统将使用所配置的承诺层级别在群集级对相关工作区的数据引入进行计费。

创建群集时,可指定两种群集计费模式:

  • 群集(默认):引入数据的计费在群集级别完成。 每个与群集关联的工作区中的引入数据数量将进行聚合,以计算该群集的每日帐单。 在针对群集中所有工作区的数据进行聚合之前,系统将在工作区级别应用基于 Microsoft Defender for Cloud 的每个节点的分配。

  • 工作区:群集的承诺层级成本按比例归属于群集中的工作区,按每个工作区的数据引入量计算(在计算了 Microsoft Defender for Cloud 的每个工作区的每个节点的分配之后)。

    如果群集在一天中引入的总数据量少于承诺层级,将对每个工作区的引入数据按每 GB 有效承诺层级费率进行计费(针对一部分承诺层级计费)。 承诺层级的未使用部分则按群集资源计费。

    如果某一天引入到群集中的总数据量高于承诺层级,则每个工作区将基于其当天的引入数据比例按承诺层级的比例进行计费,且每个工作区都将按高于承诺层级的引入数据比例进行计费。 如果某一天引入到工作区中的总数据量超出承诺层级,则不会计费到群集资源。

在群集计费选项中,数据保留针对每个工作区计费。 在创建群集时会开始群集计费,无论工作区是否已关联到群集。

将工作区与群集关联时,定价层将更改为群集,将根据群集的承诺层级对引入的数据计费。 与群集关联的工作区不再有自身的定价层。 可随时取消工作区与群集的关联,而且定价层可更改为每 GB。

如果关联的工作区使用旧的“按节点”定价层,则它将根据针对群集的承诺层级引入的数据来计费,而不再是按节点计费。 将继续应用 Microsoft Defender for Cloud 的每个节点的数据分配。

如果删除群集,即使群集在 31 天的承诺期内,群集的计费也会停止。

有关如何创建专用群集并指定其计费类型的详细信息,请参阅创建专用群集

基本日志

你可以将 Log Analytics 工作区中的某些表配置为使用基本日志。 这些表中的数据的引入费用大大降低,保留期也有限。 对这些表进行搜索需要付费。 基本日志适用于大量详细日志(用于调试、故障排除和审核),但不适用于分析和警报。

对基本日志进行搜索的费用基于执行搜索时扫描的数据 GB。

有关基本日志的详细信息,包括如何配置它们和查询它们的数据,请参阅在 Azure Monitor 中配置基本日志

日志数据保留和存档

除了数据引入之外,每个 Log Analytics 工作区中的数据保留都会产生费用。 你可以为整个工作区或每个表设置保留期。 在此时间段后,数据将被删除或存档。 存档日志的保留费用有所降低,但对其进行搜索会产生费用。 使用存档日志可降低出于合规性或偶尔调查的目的而必须存储的数据的成本。

删除自定义表不会删除与该表关联的数据,因此保留和存档费用将继续适用。

有关数据保留和存档的详细信息,包括如何配置这些设置和访问存档数据,请参阅在 Azure Monitor 日志中配置数据保留和存档策略

注意

使用 Log Analytics 清除功能从 Log Analytics 工作区中删除数据不会影响保留成本。 若要降低保留成本,请缩短工作区或特定表的保留期。

搜索作业

对存档日志进行搜索时使用搜索作业。 搜索作业是异步查询,用于将记录提取到工作区内的新搜索表中,以便进一步分析。 搜索作业按每天为执行搜索而访问的扫描数据 GB 数计费。

日志数据还原

对于需要使用完整的分析查询功能集中查询旧日志或存档日志的情况,数据还原功能是一个强大的工具。 还原操作使表中数据的特定时间范围在热缓存中可用于高性能查询。 完成后,可以稍后关闭数据。 日志数据还原按还原的数据量和还原保持活动状态的时间计费。 任何数据还原的最小计费值为 2 TB 和 12 小时。 还原超过 2 TB 和/或持续时间超过 12 小时的数据按比例计费。

日志数据导出

使用 Log Analytics 工作区中的数据导出功能,可以在数据到达 Azure Monitor 管道时,将工作区中每个选定表中的数据持续导出到 Azure 存储帐户或 Azure 事件中心。 使用数据导出的费用取决于导出的数据量。 导出的数据大小是导出的 JSON 格式数据中的字节数。

Application Insights 计费

由于基于工作区的 Application Insights 资源将其数据存储在 Log Analytics 工作区中,因此数据引入和保留的计费由 Application Insights 数据所在的工作区完成。 因此,可使用 Log Analytics 定价模型的所有选项,包括承诺层级以及即用即付。

提示

想要调整 Application Insights 表的保留设置? 基于工作区的组件的表名称已更改,请参阅 Application Insights 表结构

经典 Application Insights 资源的数据引入和数据保留遵循与基于工作区的资源相同的即用即付定价,但它们无法使用承诺层级。

进行 ping 测试和多步测试时发送的遥测数据的数据用量计费方式与应用发送的其他遥测数据相同。 使用 Web 测试以及启用自定义指标维度警报时,仍通过 Application Insights 来报告。 使用实时指标流时,不会根据数据量收费。

有关 Application Insights 早期采用者可用的旧层的详细信息,请参阅 Application Insights 旧版企业(按节点)定价层

使用 Microsoft Sentinel 的工作区

在 Log Analytics 工作区中启用 Microsoft Sentinel 后,在该工作区中收集的所有数据都需要支付 Microsoft Sentinel 费用以及 Log Analytics 费用。 因此,通常会将安全数据和操作数据分开放在不同的工作区,这样操作数据就不会产生 Microsoft Sentinel 费用

在某些情况下,合并这些数据可以节省成本。 通常,当你没有收集足够多的安全数据和操作数据,导致其均无法达到承诺层级,但合并后的数据足以达到承诺层级时,会出现这种情况。 有关详细信息和示例成本计算,请参阅设计 Microsoft Sentinel 工作区体系结构中的“合并 SOC 数据和非 SOC 数据”部分。

使用 Microsoft Defender for Cloud 的工作区

Microsoft Defender for Servers(Defender for Cloud 的一部分)按受监视服务数计费. 它提供 500 MB/服务器/天的数据分配,该分配适用于以下安全数据类型子集:

如果工作区位于旧的每节点定价层,则将合并 Defender for Cloud 和 Log Analytics 分配,并合用于所有可计费的引入数据。 若要详细了解 Microsoft Sentinel 客户如何受益,请参阅 Microsoft Sentinel 定价页

受监视服务器的数目按小时粒度计算。 每个受监视服务器的每日数据分配贡献在工作区级别聚合。 如果工作区位于旧的每节点定价层,则将合并 Microsoft Defender for Cloud 和 Log Analytics 分配,并共用于所有可计费的引入数据。

旧版定价层

在 2018 年 4 月 2 日之前已包含 Log Analytics 工作区或 Application Insights 资源的订阅,或者与 2019 年 2 月 1 日之前开始并仍处于活动状态的企业协议关联的订阅,将继续有权使用以下旧版定价层:

  • 独立(按 GB)
  • 按节点 (Operations Management Suite [OMS])

自 2022 年 7 月 1 日起,限制对旧版“免费试用”定价层的访问。 此处提供了独立定价层和每节点定价层的定价信息。

此处提供了 Azure Monitor 计费计量名称的列表(包括这些旧层)。

重要

旧定价层不支持访问 Log Analytics 中的某些最新功能,例如以经济高效的基本日志形式引入数据。

免费试用版定价层

“免费试用”定价层中的工作区将每日数据引入限制为 500 MB(Microsoft Defender for Cloud 收集的安全数据类型除外)。 数据保留期限制为 7 天。 免费试用定价层仅用于评估目的,不用于生产工作负载。 没有为“免费试用”层提供 SLA。

注意

仅在 2022 年 7 月 1 日之前,可以在旧版“免费试用”定价层中创建新工作区或将现有工作区移入。

独立定价层

独立定价层上的使用情况按引入数据量计费。 该使用情况在 Log Analytics 服务中进行报告,该计量名为“分析的数据”。独立定价层中的工作区具有用户可配置的 30 至 730 天的保留期。 独立定价层中的工作区不支持使用基本日志

按节点定价层

按节点定价层按小时粒度对每个受监视的 VM(节点)收费。 对于每个受监视的节点,每日会向工作区分配 500 MB 未计费的数据。 此分配按小时粒度计算,并且每天在工作区级别进行汇总。 超出每日数据分配聚合的引入数据在数据超额时按 GB 计费。 每节点定价层是旧式定价层,仅适用于满足旧式定价层要求的现有订阅。

如果工作区位于“按节点”定价层,则该服务在账单上为“Insight and Analytics”,用于提供 Log Analytics 使用情况。 按节点定价层中的工作区具有用户可配置的 30 至 730 天的保留期。 按节点定价层中的工作区不支持使用基本日志。 使用情况按三个计量进行报告:

  • 节点:以节点月为单位的受监视节点 (VM) 数量的使用情况。
  • 每个节点的数据超额:超出聚合数据分配的所引入数据的 GB 数。
  • 每个节点包含的数据:聚合数据分配所涵盖的引入数据量。 当工作区位于所有定价层时,也会使用此计量来显示 Microsoft Defender for Cloud 涵盖的数据量。

提示

如果工作区可访问“按节点”定价层,但你想知道在即用即付层中是否成本更低,请使用以下查询来获取建议。

标准和高级定价层

自 2016 年 10 月 1 日起,无法在标准高级定价层中创建工作区或将工作区移动到它们。 这些定价层中已有的工作区可以继续使用,但如果工作区已移出这些层,则无法将其移回。 标准和高级定价层具有固定的数据保留期,分别为 30 天和 365 天。 这些定价层中的工作区不支持使用基本日志和数据存档。 Azure 账单上针对这些旧层的数据引入计量称为“分析的数据”。

使用旧版定价层的 Microsoft Defender for Cloud

下面是 Log Analytics 旧层和 Microsoft Defender for Cloud 的使用量计费方式的相关注意事项:

  • 如果工作区位于旧版标准或高级层中,则仅针对 Log Analytics 数据引入而不是按节点对 Microsoft Defender for Cloud 进行计费。
  • 如果工作区位于旧版按节点层,将使用当前 Microsoft Defender for Cloud 基于节点的定价模型对 Microsoft Defender for Cloud 进行计费。
  • 在其他定价层(包括承诺层),如果 Microsoft Defender for Cloud 在 2017 年 6 月 19 日之前便已启用,则将仅根据 Log Analytics 数据引入情况对 Microsoft Defender for Cloud 进行计费。 否则,将使用当前 Microsoft Defender for Cloud 基于节点的定价模型对 Microsoft Defender for Cloud 进行计费。

有关定价层限制的详细信息,请参阅 Azure 订阅和服务限制、配额和约束

旧版定价层均没有基于区域的定价。

注意

若要使用通过购买用于 System Center 的 OMS E1 套件、OMS E2 套件或 OMS 附加产品所获得的权利,请选择 Log Analytics 的“按节点”定价层。

评估旧版按节点定价层

对于可访问旧版“按节点”定价层的工作区,通常很难确定是留在该层还是当前的即用即付或承诺层级更好。 需要了解“按节点”定价层中每个受监视节点的固定成本与其包含的数据分配(500 MB/节点/天)以及即用即付(每 GB)层中引入数据的成本之间的权衡。

使用以下查询根据工作区的使用情况模式提出最佳定价层建议。 此查询将查看过去 7 天内受监视的节点和引入到工作区的数据。 每一天都会评估哪个定价层是最佳的。 要使用查询,必须指定以下内容:

  • 通过将 workspaceHasSecurityCenter 设置为 truefalse 来指定工作区是否使用 Microsoft Defender for Cloud。
  • 更新价格(如果采用特定的折扣)。
  • 通过设置 daysToEvaluate 指定要回溯和分析的天数。 如果查询尝试查看 7 天数据的时间过长,此选项很有用。
// Set these parameters before running query
// For pay-as-you-go (per-GB) and commitment tier pricing details, see https://azure.microsoft.com/pricing/details/monitor/.
// You can see your per-node costs in your Azure usage and charge data. For more information, see https://learn.microsoft.com/azure/cost-management-billing/understand/download-azure-daily-usage.  
let workspaceHasSecurityCenter = true;
let daysToEvaluate = 7;
let PerNodePrice = 15.; // Monthly price per monitored node
let PerNodeOveragePrice = 2.30; // Price per GB for data overage in the Per Node pricing tier
let PerGBPrice = 2.30; // Enter the pay-as-you-go price for your workspace's region (from https://azure.microsoft.com/pricing/details/monitor/)
let CommitmentTier100Price = 196.; // Enter your price for the 100 GB/day commitment tier
let CommitmentTier200Price = 368.; // Enter your price for the 200 GB/day commitment tier
let CommitmentTier300Price = 540.; // Enter your price for the 300 GB/day commitment tier
let CommitmentTier400Price = 704.; // Enter your price for the 400 GB/day commitment tier
let CommitmentTier500Price = 865.; // Enter your price for the 500 GB/day commitment tier
let CommitmentTier1000Price = 1700.; // Enter your price for the 1000 GB/day commitment tier
let CommitmentTier2000Price = 3320.; // Enter your price for the 2000 GB/day commitment tier
let CommitmentTier5000Price = 8050.; // Enter your price for the 5000 GB/day commitment tier
// ---------------------------------------
let SecurityDataTypes=dynamic(["SecurityAlert", "SecurityBaseline", "SecurityBaselineSummary", "SecurityDetection", "SecurityEvent", "WindowsFirewall", "MaliciousIPCommunication", "LinuxAuditLog", "SysmonEvent", "ProtectionStatus", "WindowsEvent", "Update", "UpdateSummary"]);
let StartDate = startofday(datetime_add("Day",-1*daysToEvaluate,now()));
let EndDate = startofday(now());
union * 
| where TimeGenerated >= StartDate and TimeGenerated < EndDate
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize nodesPerHour = dcount(computerName) by bin(TimeGenerated, 1h)  
| summarize nodesPerDay = sum(nodesPerHour)/24.  by day=bin(TimeGenerated, 1d)  
| join kind=leftouter (
    Heartbeat 
    | where TimeGenerated >= StartDate and TimeGenerated < EndDate
    | where Computer != ""
    | summarize ASCnodesPerHour = dcount(Computer) by bin(TimeGenerated, 1h) 
    | extend ASCnodesPerHour = iff(workspaceHasSecurityCenter, ASCnodesPerHour, 0)
    | summarize ASCnodesPerDay = sum(ASCnodesPerHour)/24.  by day=bin(TimeGenerated, 1d)   
) on day
| join (
    Usage 
    | where TimeGenerated >= StartDate and TimeGenerated < EndDate
    | where IsBillable == true
    | extend NonSecurityData = iff(DataType !in (SecurityDataTypes), Quantity, 0.)
    | extend SecurityData = iff(DataType in (SecurityDataTypes), Quantity, 0.)
    | summarize DataGB=sum(Quantity)/1000., NonSecurityDataGB=sum(NonSecurityData)/1000., SecurityDataGB=sum(SecurityData)/1000. by day=bin(StartTime, 1d)  
) on day
| extend AvgGbPerNode =  NonSecurityDataGB / nodesPerDay
| extend OverageGB = iff(workspaceHasSecurityCenter, 
             max_of(DataGB - 0.5*nodesPerDay - 0.5*ASCnodesPerDay, 0.), 
             max_of(DataGB - 0.5*nodesPerDay, 0.))
| extend PerNodeDailyCost = nodesPerDay * PerNodePrice / 31. + OverageGB * PerNodeOveragePrice
| extend billableGB = iff(workspaceHasSecurityCenter,
             (NonSecurityDataGB + max_of(SecurityDataGB - 0.5*ASCnodesPerDay, 0.)), DataGB )
| extend PerGBDailyCost = billableGB * PerGBPrice
| extend CommitmentTier100DailyCost = CommitmentTier100Price + max_of(billableGB - 100, 0.)* CommitmentTier100Price/100.
| extend CommitmentTier200DailyCost = CommitmentTier200Price + max_of(billableGB - 200, 0.)* CommitmentTier200Price/200.
| extend CommitmentTier300DailyCost = CommitmentTier300Price + max_of(billableGB - 300, 0.)* CommitmentTier300Price/300.
| extend CommitmentTier400DailyCost = CommitmentTier400Price + max_of(billableGB - 400, 0.)* CommitmentTier400Price/400.
| extend CommitmentTier500DailyCost = CommitmentTier500Price + max_of(billableGB - 500, 0.)* CommitmentTier500Price/500.
| extend CommitmentTier1000DailyCost = CommitmentTier1000Price + max_of(billableGB - 1000, 0.)* CommitmentTier1000Price/1000.
| extend CommitmentTier2000DailyCost = CommitmentTier2000Price + max_of(billableGB - 2000, 0.)* CommitmentTier2000Price/2000.
| extend CommitmentTier5000DailyCost = CommitmentTier5000Price + max_of(billableGB - 5000, 0.)* CommitmentTier5000Price/5000.
| extend MinCost = min_of(
    PerNodeDailyCost,PerGBDailyCost,CommitmentTier100DailyCost,CommitmentTier200DailyCost,
    CommitmentTier300DailyCost, CommitmentTier400DailyCost, CommitmentTier500DailyCost, CommitmentTier1000DailyCost, CommitmentTier2000DailyCost, CommitmentTier5000DailyCost)
| extend Recommendation = case(
    MinCost == PerNodeDailyCost, "Per node tier",
    MinCost == PerGBDailyCost, "Pay-as-you-go tier",
    MinCost == CommitmentTier100DailyCost, "Commitment tier (100 GB/day)",
    MinCost == CommitmentTier200DailyCost, "Commitment tier (200 GB/day)",
    MinCost == CommitmentTier300DailyCost, "Commitment tier (300 GB/day)",
    MinCost == CommitmentTier400DailyCost, "Commitment tier (400 GB/day)",
    MinCost == CommitmentTier500DailyCost, "Commitment tier (500 GB/day)",
    MinCost == CommitmentTier1000DailyCost, "Commitment tier (1000 GB/day)",
    MinCost == CommitmentTier2000DailyCost, "Commitment tier (2000 GB/day)",
    MinCost == CommitmentTier5000DailyCost, "Commitment tier (5000 GB/day)",
    "Error"
)
| project day, nodesPerDay, ASCnodesPerDay, NonSecurityDataGB, SecurityDataGB, OverageGB, AvgGbPerNode, PerGBDailyCost, PerNodeDailyCost, 
    CommitmentTier100DailyCost, CommitmentTier200DailyCost, CommitmentTier300DailyCost, CommitmentTier400DailyCost, CommitmentTier500DailyCost, CommitmentTier1000DailyCost, CommitmentTier2000DailyCost, CommitmentTier5000DailyCost, Recommendation 
| sort by day asc
//| project day, Recommendation // Comment this line to see details
| sort by day asc

此查询不是对如何计算使用情况的精确复制,而是在大多数情况下用于提供定价层建议。

注意

若要使用通过购买用于 System Center 的 OMS E1 套件、OMS E2 套件或 OMS 附加产品所获得的权利,请选择 Log Analytics 的“按节点”定价层。

后续步骤