Application Insights 支持三种不同类型的指标:标准(预聚合)指标、基于日志的指标和自定义指标。 每种指标在监视应用程序运行状况、诊断和分析方面都发挥了独特的作用。 检测应用程序的开发人员可以确定哪种类型的指标最适合特定的方案。 决策基于应用程序的大小、预期遥测量以及指标精度和警报方面的业务要求。 本文介绍所有支持的指标类型之间的差异。
Application Insights 中的标准指标是预定义指标,由服务自动收集和监视。 这些指标涵盖各种性能和使用指标,例如 CPU 使用率、内存消耗、请求速率和响应时间。 标准指标提供应用程序运行状况和性能的全面概述,无需任何额外配置。 标准指标在收集期间进行预聚合,并作为时间序列存储在仅具有关键维度的专用存储库中,这使它们在查询时具有更好的性能。 因此,标准指标最适合用于准实时指标维度警报和响应速度更快的仪表板。
Application Insights 中的基于日志的度量是一个查询时概念,以时序形式呈现在应用程序日志数据之上。 基础日志不会在集合或存储时预聚合,并保留每个日志条目的所有属性。 这种保留使得在查询时可以将日志属性作为维度应用于基于日志的指标,从而进行指标图表筛选和指标拆分,从而为基于日志的指标提供卓越的分析和诊断价值。 然而,遥测量减少技术(例如采样和遥测筛选)通常用于生成大量遥测数据的监视应用程序,会影响收集的日志条目的数量,从而降低基于日志的指标的准确性。
Application Insights 中的自定义指标使你可以定义和跟踪应用程序特有的特定度量值。 要创建这些指标,可以通过在代码中添加仪表来将自定义遥测数据发送到 Application Insights。 自定义指标可以灵活地监视标准指标未涵盖的应用程序的任何方面,使你能够更深入地了解应用程序的行为和性能。
有关详细信息,请参阅 Azure Monitor 中的自定义指标(预览版)。
注意
Application Insights 还提供一项称为实时指标流的功能,该功能允许对 Web 应用程序进行准实时监视,并且不存储任何遥测数据。
功能 / 特点 | 标准指标 | 基于日志的指标 | 自定义指标 |
---|---|---|---|
数据源 | 在运行时收集的预聚合时序数据。 | 使用 Kusto 查询从日志数据派生。 | 通过 Application Insights SDK 或 API 收集的用户定义的指标。 |
粒度 | 固定间隔(1 分钟)。 | 取决于日志数据本身的粒度。 | 基于用户定义的指标的灵活粒度。 |
准确性 | 高,不受日志采样的影响。 | 可能会受到采样和筛选的影响。 | 高准确性,尤其是在使用诸如 GetMetric 之类的预聚合方法时。 |
成本 | 包括在 Application Insights 定价中。 | 基于日志数据引入和查询成本。 | 请参阅定价模型和保留期。 |
配置 | 可以通过最小配置自动使用。 | 需要配置日志查询,以便从日志数据中提取所需的指标。 | 需要代码中的自定义实现和配置。 |
查询性能 | 由于预聚合,速度很快。 | 速度较慢,因为它涉及查询日志数据。 | 取决于数据量和查询复杂性。 |
存储 | 以时序数据的形式存储在 Azure Monitor 指标存储中。 | 作为日志存储在 Log Analytics 工作区中。 | 存储在 Log Analytics 和 Azure Monitor 指标存储中。 |
警报 | 支持实时警报。 | 允许基于详细日志数据的复杂警报场景。 | 基于用户定义的指标的灵活警报。 |
服务限制 | 受限于 Application Insights 限制。 | 受限于 Log Analytics 工作区限制。 | 受限于免费指标配额和其他维度的成本。 |
用例 | 实时监视、性能仪表板和快速见解。 | 详细的诊断、故障排除和深入分析。 | 定制的性能指标和业务特定的指标。 |
示例 | CPU 使用率、内存使用率、请求持续时间。 | 请求计数、异常跟踪、依赖项调用。 | 自定义特定于应用程序的指标,例如用户参与度、功能使用情况。 |
OpenTelemetry SDK 和较新的 Application Insights SDK (Classic API) 在收集过程中会对指标进行预聚合,以减少从 SDK 发送到遥测通道终结点的数据量。 此过程适用于默认发送的标准指标,因此准确度不受采样或筛选的影响。 它也适用于使用 OpenTelemetry API 或 GetMetric 和 TrackValue 发送的自定义指标,因此可减少数据引入并降低成本。 如果 Application Insights SDK 版本支持 GetMetric 和 TrackValue,则它是发送自定义指标的首选方法。
对于未实现预聚合的 SDK(如用于浏览器检测的 SDK 或早期版本的 Application Insights SDK),Application Insights 后端仍将通过聚合从 Application Insights 遥测通道终结点收到的事件来生成新指标。 对于自定义指标,可以使用 trackMetric 方法。 尽管不能从减少的网络传输数据量中获益,但你仍然可以使用预先聚合的指标并体验到改善的性能,同时可以在收集期间使用不预先聚合指标的 SDK 进行准实时维度预警。
遥测通道终结点在引入采样之前预先聚合事件。 因此,无论你在应用程序中使用哪个 SDK 版本,引入采样都不会影响预先聚合的指标的准确性。
下表列出了预聚合的位置。
当前生产 SDK | 标准指标预聚合 | 自定义指标预聚合 |
---|---|---|
ASP.NET Core | SDK | SDK(通过 OpenTelemetry API) |
.NET(通过导出程序) | SDK | SDK(通过 OpenTelemetry API) |
Java (3.x) | SDK | SDK(通过 OpenTelemetry API) |
Java 本机 | SDK | SDK(通过 OpenTelemetry API) |
Node.js | SDK | SDK(通过 OpenTelemetry API) |
Python语言 | SDK | SDK(通过 OpenTelemetry API) |
当前生产 SDK | 标准指标预聚合 | 自定义指标预聚合 |
---|---|---|
.NET Core 和 .NET Framework | SDK (V2.13.1+) | SDK (V2.7.2+)(通过 GetMetric) 遥测通道终结点(通过 TrackMetric) |
Java (2.x) | 遥测通道终结点 | 遥测通道终结点(通过 TrackMetric) |
JavaScript(浏览器) | 遥测通道终结点 | 遥测通道终结点(通过 TrackMetric) |
Node.js | 遥测通道终结点 | 遥测通道终结点(通过 TrackMetric) |
Python语言 | 遥测通道终结点 | SDK(通过已停用的 OpenCensus.stats) 遥测通道终结点(通过 TrackMetric) |
警告
不再建议使用 Application Insights Java 2.x SDK。 请改用基于 OpenTelemetry 的 Java 产品/服务。
OpenCensus Python SDK 已停用。 我们建议使用基于 OpenTelemetry 的 Python 产品/服务并提供迁移指南。
使用自动检测时,SDK 会自动添加到应用程序代码中,并且无法自定义。 对于自定义指标,需要手动检测。
当前生产 SDK | 标准指标预聚合 | 自定义指标预聚合 |
---|---|---|
ASP.NET Core | SDK 1 | 不支持 |
ASP.NET | SDK 2 | 不支持 |
爪哇岛 | SDK | 支持 3 |
Node.js | SDK | 不支持 |
Python语言 | SDK | 不支持 |
脚注
-
1应用服务上的 ASP.NET Core 自动检测会发出不带维度的标准指标。 所有维度都需要手动检测。
- 2虚拟机/虚拟机规模集上的 ASP.NET 自动检测和本地会发出不带维度的标准指标。 Azure 应用服务也是如此,但集合级别必须设置为“推荐”。 所有维度都需要手动检测。
- 3 与自动检测一起使用的 Java 代理会捕获热门库发出的指标,并将其作为自定义指标发送到 Application Insights。
使用 OpenTelemetry、trackMetric 或 GetMetric 和 TrackValue API 调用发送的所有指标将自动存储在指标存储和日志中。 这些指标可以在 Application Insights 中的 customMetrics 表和指标资源管理器中名为“azure.applicationinsights”的自定义指标命名空间下找到。 虽然自定义指标基于日志的版本始终保留所有维度,但指标的预先聚合版本在存储时默认不包含任何维度。 在“使用情况和估计成本”选项卡中,通过在“将自定义指标发送到 Azure 指标存储”下选择“包含维度”,可以启用保留自定义指标维度的预览功能。
预先聚合的指标作为时序存储在 Azure Monitor 中。 将应用自定义指标的 Azure Monitor 配额。
注意
超出配额可能会产生意外后果。 Azure Monitor 在你的订阅或区域中可能变得不可靠。 若要了解如何避免超出配额,请参阅设计限制和注意事项。
之所以默认禁用自定义指标维度的收集,是因为存储包含维度的自定义指标将来会在 Application Insights 中单独计费。 存储无维度自定义指标的操作仍然免费(但不能超过配额限制)。 可以在官方定价页中了解我们即将做出的定价模式变化。
使用 Azure Monitor 指标资源管理器可以根据预聚合的指标、基于日志的指标和自定义指标来绘制图表,以及创作包含图表的仪表板。 选择所需的 Application Insights 资源后,请使用命名空间选取器在指标之间进行切换。
将指标摄取到 Application Insights 中,无论是预先聚合的指标还是基于日志的指标,都会产生根据摄取数据大小计算的费用。 有关详细信息,请参阅 Azure Monitor 日志定价详细信息。 自定义指标(包括其所有维度)始终存储在 Application Insights 日志存储中。 此外,默认情况下,会将自定义指标(不包含维度)的预先聚合版本转发到指标存储。
如果为了在指标存储中存储预先聚合指标的所有维度而选择“在自定义指标维度上启用警报”选项,则可能会产生基于自定义指标定价的额外成本。
以下部分列出了指标以及支持的聚合与维度。 基于日志的指标的详细信息包括底层 Kusto 查询语句。
重要
时序限制:每个指标在 24 小时内最多只能有 5,000 个时序。 达到此限制后,该指标点的所有维度值将替换为常量
Maximum values reached
。基数限制: 每个维度在 7 天内只能有一定数量的唯一值。 达到此限制后,维度值将替换为常量
Other values
。 下表中列出了每个维度的基数限制。
通过“可用性”类别中的指标,您可以查看从全球各地观察到的 Web 应用程序的运行状况。 配置可用性测试,以开始使用此类别中的任何指标。
“可用性”指标显示未检测到任何问题的 Web 测试运行的百分比。 可能的最小值为 0,表示所有 Web 测试运行均失败。 值 100 表示所有 Web 测试运行都符合验证条件。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
百分比 | 平均值 | Run location |
availabilityResult/location |
50 |
Test name |
availabilityResult/name |
100 |
“可用性测试持续时间”指标显示运行 Web 测试所花费的时间。 对于多步骤 Web 测试,该指标反映所有步骤的总执行时间。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
毫秒 | Avg、Max、Min | Run location |
availabilityResult/location |
50 |
Test name |
availabilityResult/name |
100 | ||
Test result |
availabilityResult/success |
2 |
“可用性测试”指标反映 Azure Monitor 执行的 Web 测试运行计数。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Run location |
availabilityResult/location |
50 |
Test name |
availabilityResult/name |
100 | ||
Test result |
availabilityResult/success |
2 |
浏览器指标由 Application Insights JavaScript SDK 从实际的最终用户浏览器收集。 这些工具可对您 Web 应用的用户体验提供重要的见解。 通常不会对浏览器指标采样,这意味着,在用量数字方面,与服务器端指标相比,它们提供的精度更高,而后者的采样可能会导致结果有偏差。
注意
若要收集浏览器指标,必须使用 Application Insights JavaScript SDK 来检测应用程序。
度量单位 | 支持的聚合 | 支持的维度 |
---|---|---|
毫秒 | Avg、Max、Min | 没有 |
度量单位 | 支持的聚合 | 支持的维度 |
---|---|---|
毫秒 | Avg、Max、Min | 没有 |
度量单位 | 支持的聚合 | 支持的维度 |
---|---|---|
毫秒 | Avg、Max、Min | 没有 |
度量单位 | 支持的聚合 | 支持的维度 |
---|---|---|
毫秒 | Avg、Max、Min | 没有 |
度量单位 | 支持的聚合 | 支持的维度 |
---|---|---|
毫秒 | Avg、Max、Min | 没有 |
“失败”中的指标显示处理请求、依赖项调用的问题,以及引发的异常。
此指标反映浏览器中运行的应用代码抛出的异常数量。 该指标仅包含使用 trackException()
Application Insights API 调用跟踪的异常。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Cloud role name |
cloud/roleName |
100 |
失败的依赖项调用数。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 | ||
Dependency performance |
dependency/performanceBucket |
20 | ||
Dependency type |
dependency/type |
100 | ||
Is traffic synthetic |
operation/synthetic |
10 | ||
Result code |
dependency/resultCode |
100 | ||
Target of dependency call |
dependency/target |
100 |
每当你将异常记录到 Application Insights 时,都会调用 SDK 的 trackException() 方法。 “异常数”指标显示记录的异常数。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 | ||
Device type |
client/type |
2 |
标记为失败的受跟踪服务器请求计数。 默认情况下,Application Insights SDK 会自动将返回 HTTP 响应代码 5xx 或 4xx(401 除外)的每个服务器请求标记为失败的请求。 可以通过在自定义遥测初始化器中修改请求遥测项的success属性来自定义此逻辑。 有关各种响应代码的详细信息,请参阅 Application Insights 遥测数据模型。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 | ||
Is synthetic traffic |
operation/synthetic |
10 | ||
Request performance |
request/performanceBucket |
20 | ||
Result code |
request/resultCode |
100 |
此指标显示服务器异常数。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 |
使用“性能计数器”类别中的指标可以访问 Application Insights 收集的系统性能计数器。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
兆字节/千兆字节(依赖于数据) | Avg、Max、Min | Cloud role instance |
cloud/roleInstance |
100 |
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | Avg、Max、Min | Cloud role instance |
cloud/roleInstance |
100 |
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
毫秒 | Avg、Max、Min | Cloud role instance |
cloud/roleInstance |
100 |
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
每秒请求数 | Avg、Max、Min | Cloud role instance |
cloud/roleInstance |
100 |
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | Avg、Max、Min | Cloud role instance |
cloud/roleInstance |
100 |
该指标显示托管受监视应用的进程消耗的处理器总容量。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
百分比 | Avg、Max、Min | Cloud role instance |
cloud/roleInstance |
100 |
注意
指标的范围介于 0 到 100 * n 之间,其中 n 是可用的 CPU 核心数。 例如,200% 的指标值可以表示两个 CPU 核心的全部利用率,或者 4 个 CPU 核心的一半利用率,以此类推。 规范化的进程 CPU 是由许多 SDK 收集的另一种指标,它表示相同的值,但要除以可用的 CPU 核心数。 因此,规范化的进程 CPU 指标的范围为 0 到 100。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
每秒字节数 | 平均、最小值、最大值 | Cloud role instance |
cloud/roleInstance |
100 |
受监视进程为其数据分配的非共享内存量。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
字节 | 平均、最小值、最大值 | Cloud role instance |
cloud/roleInstance |
100 |
受监视服务器实例上运行的所有进程的 CPU 消耗量。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
百分比 | 平均、最小值、最大值 | Cloud role instance |
cloud/roleInstance |
100 |
注意
处理器时间指标不适用于 Azure 应用服务中托管的应用程序。 使用进程 CPU 指标可以跟踪应用服务中托管的 Web 应用程序的 CPU 利用率。
此指标与依赖项调用数相关。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 | ||
Dependency performance |
dependency/performanceBucket |
20 | ||
Dependency type |
dependency/type |
100 | ||
Is traffic synthetic |
operation/synthetic |
10 | ||
Result code |
request/resultCode |
2 | ||
Successful call |
dependency/success |
100 | ||
Target of a dependency call |
dependency/target |
100 |
此指标是指依赖项调用的持续时间。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
毫秒 | Avg、Max、Min | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 | ||
Dependency performance |
dependency/performanceBucket |
20 | ||
Dependency type |
dependency/type |
100 | ||
Is traffic synthetic |
operation/synthetic |
10 | ||
Result code |
request/resultCode |
100 | ||
Successful call |
dependency/success |
2 | ||
Target of a dependency call |
dependency/target |
100 |
此指标反映 Web 应用程序收到的传入服务器请求数。
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
每秒计数 | 平均值 | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 | ||
Is traffic synthetic |
operation/synthetic |
10 | ||
Request performance |
request/performanceBucket |
20 | ||
Result code |
request/resultCode |
100 | ||
Successful call |
dependency/success |
2 |
度量单位 | 聚合 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 | ||
Is traffic synthetic |
operation/synthetic |
10 | ||
Request performance |
request/performanceBucket |
20 | ||
Result code |
request/resultCode |
100 | ||
Successful call |
dependency/success |
2 |
此指标反映服务器处理传入请求所花费的时间。
毫秒 | Avg、Max、Min | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 | ||
Is traffic synthetic |
operation/synthetic |
10 | ||
Request performance |
request/performanceBucket |
20 | ||
Result code |
request/resultCode |
100 | ||
Successful call |
dependency/success |
2 |
此指标是指加载 PageView 事件所花费的时间。
毫秒 | Avg、Max、Min | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
毫秒 | Avg、Max、Min | Cloud role name |
cloud/roleName |
100 |
Is traffic synthetic |
operation/synthetic |
10 |
使用 TrackPageView () Application Insights API 记录的 PageView 事件计数。
计数 | 计数 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
毫秒 | Avg、Max、Min | Cloud role name |
cloud/roleName |
100 |
Is traffic synthetic |
operation/synthetic |
10 |
使用 TrackTrace () Application Insights API 调用记录的跟踪语句计数。
计数 | 计数 | 维度名称 (指标资源管理器) |
维度名称 (日志分析) |
基数限制 |
---|---|---|---|---|
计数 | 计数 | Cloud role instance |
cloud/roleInstance |
100 |
Cloud role name |
cloud/roleName |
100 | ||
Is traffic synthetic |
operation/synthetic |
10 | ||
Severity level |
trace/severityLevel |
100 |
Application Insights REST API 支持以编程方式检索基于日志的指标。 它还有一个可选参数 ai.include-query-payload
,将该参数添加到查询字符串时,它会提示 API 不但返回时序数据,而且返回用于提取它的 Kusto 查询语言 (KQL) 语句。 对于想要理解 Log Analytics 中的原始事件与由此产生的基于日志的指标之间的联系的用户来说,此参数特别有用。
要直接访问数据,请使用 KQL 将参数 ai.include-query-payload
传递给查询中的 Application Insights API。
注意
若要检索基础日志查询,DEMO_APP
DEMO_KEY
和无需替换。 如果只想检索 KQL 语句而不是你自己的应用程序的时序数据,则可以将其直接复制并粘贴到浏览器搜索栏中。
api.applicationinsights.io/v1/apps/DEMO_APP/metrics/users/authenticated?api_key=DEMO_KEY&prefer=ai.include-query-payload
下面是指标 Authenticated Users
的返回 KQL 语句的示例。 (在本例中,"users/authenticated"
为指标 ID。)
output
{
"value": {
"start": "2024-06-21T09:14:25.450Z",
"end": "2024-06-21T21:14:25.450Z",
"users/authenticated": {
"unique": 0
}
},
"@ai.query": "union (traces | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (requests | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (pageViews | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (dependencies | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (customEvents | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (availabilityResults | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (exceptions | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (customMetrics | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)), (browserTimings | where timestamp >= datetime(2024-06-21T09:14:25.450Z) and timestamp < datetime(2024-06-21T21:14:25.450Z)) | where notempty(user_AuthenticatedId) | summarize ['users/authenticated_unique'] = dcount(user_AuthenticatedId)"
}