培训
模块
引导式项目 - 使用 KQL 分析 Azure Monitor 中的日志 - Training
编写日志查询,深入了解你的业务、IT 运营和性能。 使用 Kusto 查询语言 (KQL) 提取 Azure Monitor Log Analytics 中的日志数据。
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
大多数 Azure Monitor 实现的最大费用通常是在 Log Analytics 工作区中引入和保留数据。 Azure Monitor 中的一些功能没有直接成本,但会将成本附加到收集的工作区数据上。 本文介绍如何计算 Log Analytics 工作区的数据费用,以及影响成本的各种配置选项。
提示
有关降低 Azure Monitor 成本的策略,请参阅成本优化和 Azure Monitor。
Log Analytics 的默认定价采用即用即付模型,该模型基于数据引入量和数据保留。 每个 Log Analytics 工作区作为独立服务计费,并在 Azure 订阅的账单中产生相应费用。 Azure Monitor 日志的定价是按区域设置的。 根据以下因素,数据引入量有时会很大:
此处提供了 Azure Monitor 计费计量名称的列表。
Azure Monitor 日志以 GB(10^9 字节)为单位对发送到 Log Analytics 工作区的数据量计费。
Azure Monitor 日志基于以下形式计算单个记录的计费大小:
Azure Monitor 日志需要在该记录的 Log Analytics 工作区中添加的列条目的字符串表示形式。
如果发送与目标表架构不匹配的列条目,则即使目标表无法存储数据,Azure Monitor 日志也会向你收取这些列条目的费用。 请确保数据收集规则与目标表架构匹配,以避免对目标表无法存储的数据收费。
备注
该可计费的数据量计算通常远小于整个传入 JSON 打包事件的大小。 在所有事件类型中,计费大小比传入数据大小平均小 25% 左右。 对于小型事件,最多可以达到 50%。 百分比包括从计费中排除的标准列的影响。 在估算成本并与其他定价模型进行比较时,必须了解计费数据大小的这种计算方式。
记录中的所有数据,无论数据是从数据源收集的还是在引入过程中添加的。 此计算包括由日志引入 API、转换和自定义字段添加的任何自定义列。
所有表都有以下标准列,计算记录大小时不包括这些列。 计算记录大小时包含 Log Analytics 中存储的所有其他列。 标准列包括:
_ResourceId
_SubscriptionId
_ItemId
_IsBillable
_BilledSize
Type
有些表完全不收取数据引入费用,其中包括 AzureActivity、Heartbeat、Usage 和 Operation。 此信息始终由 _IsBillable 列指示,该列会显示记录是否已从数据引入和保留计费中排除。
某些解决方案具有更多关于免费数据引入的特定策略。 例如,Azure Migrate 在服务器评估的前 180 天免费提供依赖项可视化数据。 Microsoft Defender for Cloud、Microsoft Sentinel 和配置管理等服务有其自己的定价模型。
有关任何独特的计费计算,请参阅不同服务和解决方案的文档。
除了即用即付模型外,Log Analytics 还具有承诺层级,与即用即付价格相比,使你能够节省最高 30% 的成本。 采用承诺层级定价时,你能够以低于即用即付定价的价格,为工作区购买起始量为 100 GB/天的数据引入量。 对于超出承诺级别的任何使用量(超额),将按当前承诺层级提供的每 GB 价格计费。 (超额使用同一承诺层计费计量进行计费。例如,如果工作区位于 200 GB/天的承诺层中,并且每天引入 300 GB,则使用量将按 200 GB/天承诺层的 1.5 单位计费。从选择或更改承诺层起,承诺层有 31 天的承诺期。
承诺层级每日按工作区进行计费。 如果工作区包含在专用群集中,则对该群集计费。 请参阅以下“专用群集”部分。 有关承诺层级及其价格的列表,请参阅 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 工作区中的数据保留都会产生费用。 你可以为整个工作区或每个表设置保留期。 在此期限过后,数据将被删除或长期保留。 在长期保留期内,支付的保留费较低,但使用搜索作业检索数据需要付费。 使用长期保留可降低出于合规性或偶尔调查的目的而必须存储的数据的成本。
删除自定义表不会删除与该表关联的数据,因此你仍要支付交互式保留费和长期保留费。
有关数据保留的详细信息(包括如何配置这些设置以及如何访问长期保留的数据),请参阅管理 Log Analytics 工作区中的数据保留。
备注
使用 Log Analytics 清除功能从 Log Analytics 工作区中删除数据不会影响保留成本。 若要降低保留成本,请缩短工作区或特定表的保留期。
通过运行搜索作业检索长期保留的数据。 搜索作业是异步查询,用于将记录提取到工作区内的新搜索表中,以便进一步分析。 搜索作业按每天为执行搜索而访问的扫描数据 GB 数计费。
当你需要使用完整分析查询功能来密集查询大量数据或长期保留的数据时,数据还原功能是一个强大的工具。 还原操作使表中数据的特定时间范围在热缓存中可用于高性能查询。 完成后,可以稍后关闭数据。 日志数据还原按还原的数据量和还原保持活动状态的时间计费。 任何数据还原的最小计费值为 2 TB 和 12 小时。 还原超过 2 TB 和/或持续时间超过 12 小时的数据按比例计费。
使用 Log Analytics 工作区中的数据导出功能,可以在数据到达 Azure Monitor 管道时,将工作区中每个选定表中的数据持续导出到 Azure 存储帐户或 Azure 事件中心。 使用数据导出的费用取决于导出的数据量。 导出的数据大小是导出的 JSON 格式数据中的字节数。
由于基于工作区的 Application Insights 资源将其数据存储在 Log Analytics 工作区中,因此数据引入和保留的计费由 Application Insights 数据所在的工作区完成。 因此,可使用 Log Analytics 定价模型的所有选项,包括承诺层级以及即用即付。
提示
想要调整 Application Insights 表的保留设置? 基于工作区的组件的表名称已更改,请参阅 Application Insights 表结构
经典 Application Insights 资源的数据引入和数据保留遵循与基于工作区的资源相同的即用即付定价,但它们无法使用承诺层级。
进行 ping 测试和多步测试时发送的遥测数据的数据用量计费方式与应用发送的其他遥测数据相同。 使用 Web 测试以及启用自定义指标维度警报时,仍通过 Application Insights 来报告。 使用实时指标流时,不会根据数据量收费。
有关 Application Insights 早期采用者可用的旧层的详细信息,请参阅 Application Insights 旧版企业(按节点)定价层。
在 Log Analytics 工作区中启用 Microsoft Sentinel 后,在该工作区中收集的所有数据都需要支付 Microsoft Sentinel 费用以及 Log Analytics 费用。 因此,通常会将安全数据和操作数据分开放在不同的工作区,这样操作数据就不会产生 Microsoft Sentinel 费用。
在某些情况下,合并这些数据可以节省成本。 通常,当你没有收集足够多的安全数据和操作数据,导致其均无法达到承诺层级,但合并后的数据足以达到承诺层级时,会出现这种情况。 有关详细信息,请参阅:
Microsoft Defender for Servers(Defender for Cloud 的一部分)按受监视服务数计费。 它提供 500 MB/服务器/天的数据分配,该分配适用于以下安全数据类型子集:
如果工作区位于旧的每节点定价层,则将合并 Defender for Cloud 和 Log Analytics 分配,并合用于所有可计费的引入数据。 如果工作区已启用 Microsoft Sentinel,并且如果 Sentinel 使用的是经典定价层,则 Defender 数据分配仅适用于 Log Analytics 数据引入计费,但不适用于经典 Sentinel 计费。 如果 Sentinel 使用的是简化的定价层,则 Defender 数据分配适用于统一 Sentinel 计费。 若要详细了解 Microsoft Sentinel 客户如何受益,请参阅 Microsoft Sentinel 定价页。
受监视服务器的数目按小时粒度计算。 每个受监视服务器的每日数据分配贡献在工作区级别聚合。 如果工作区位于旧的每节点定价层,则将合并 Microsoft Defender for Cloud 和 Log Analytics 分配,并共用于所有可计费的引入数据。
在 2018 年 4 月 2 日之前已包含 Log Analytics 工作区或 Application Insights 资源的订阅,或者与 2019 年 2 月 1 日之前开始并仍处于活动状态的企业协议关联的订阅,将继续有权使用以下旧版定价层:
自 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 天的保留期。 “按节点”定价层中的工作区不支持使用基本和辅助表计划。 使用情况按三个计量进行报告:
提示
如果工作区可访问“按节点”定价层,但你想知道在即用即付层中是否成本更低,请使用以下查询来获取建议。
自 2016 年 10 月 1 日起,无法在“标准”或“高级”定价层中创建工作区或将工作区移动到这些层。 这些定价层中已有的工作区可以继续使用,但如果工作区已移出这些层,则无法将其移回。 标准和高级定价层具有固定的数据保留期,分别为 30 天和 365 天。 这些定价层级的工作区不支持使用基本和辅助表计划以及长期数据保留。 Azure 账单上针对这些旧层的数据引入计量称为“分析的数据”。
下面是 Log Analytics 旧层和 Microsoft Defender for Cloud 的使用量计费方式的相关注意事项:
有关定价层限制的详细信息,请参阅 Azure 订阅和服务限制、配额和约束。
旧版定价层均没有基于区域的定价。
备注
若要使用通过购买用于 System Center 的 OMS E1 套件、OMS E2 套件或 OMS 附加产品所获得的权利,请选择 Log Analytics 的“按节点”定价层。
对于可访问旧版“按节点”定价层的工作区,通常很难确定是留在该层还是当前的即用即付或承诺层级更好。 需要了解“按节点”定价层中每个受监视节点的固定成本与其包含的数据分配(500 MB/节点/天)以及即用即付(每 GB)层中引入数据的成本之间的权衡。
使用以下查询根据工作区的使用情况模式提出最佳定价层建议。 此查询将查看过去 7 天内受监视的节点和引入到工作区的数据。 每一天都会评估哪个定价层是最佳的。 要使用查询,必须指定以下内容:
workspaceHasSecurityCenter
设置为 true
或 false
来指定工作区是否使用 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 的“按节点”定价层。
培训
模块
引导式项目 - 使用 KQL 分析 Azure Monitor 中的日志 - Training
编写日志查询,深入了解你的业务、IT 运营和性能。 使用 Kusto 查询语言 (KQL) 提取 Azure Monitor Log Analytics 中的日志数据。