探索Azure Monitor和Kusto查询的奥秘

在现代云计算环境中,数据的实时监控和分析变得尤为重要。Azure Monitor 提供了一套强大的工具,能够帮助从无状态的链接缩短器应用中自动收集信息,并通过 Application Insights 提供深入的分析和洞察。本文将带了解如何利用这些工具,以及如何通过 Kusto 查询语言来挖掘数据的潜在价值。

Azure Monitor 和 Application Insights

Azure Monitor 自动从服务器无状态链接缩短器应用中收集信息,并通过 Application Insights 展示分析和洞察。日志通过 Log Analytics 自动捕获,可以使用 Azure Data Explorer 来调查数据。存储和处理交互式分析的服务叫做 Kusto,它具有独特的查询语法,类似于 SQL。Kusto 有大量的深入文档,但在开始 .NET 数据产品经理新角色并开始研究 .NET 用户如何在他们的应用程序中管理数据的遥测数据之前,一直对它感到困惑。想分享一些经历。

发现 Kusto

使用 Application Insights 增强无服务器函数就像在创建主机时勾选一个框一样简单。这会在不触碰代码的情况下生成大量的指标。可以使用额外的功能来扩展开箱即用的功能。自定义了代码,以发出一个列出点击事件媒介的事件。例如,如果在 Twitter 上分享了链接,就会发出一个 "twitter" 事件。代码如下: public static TelemetryClient telemetry = new TelemetryClient() { #if !DEBUG InstrumentationKey = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY") #endif }; // other code telemetry.TrackEvent(medium); // other code 非常简单,对吧?现在让找到结果。首先,导航到 Application Insights 实例在门户中。滚动到 Monitoring 并选择 Logs。这将带到数据浏览器。得到了一个方便的数据源列表,可以工作,并有一个文本框输入查询。已经突出显示了两个有趣的数据源。

Kusto 基础

真正理解 Kusto 的 "啊哈" 时刻来自于它是如何工作的。如果把它想象成一个管道,会做得很好。让先检查 customEvents 数据源。仅仅声明数据源名称就将其注入到管道中,并返回其行。 customEvents 注意在浏览器中得到了完整的自动补全。这对于表格和属性都有效。

首先,想确保不要加载太多的数据。五行应该足以塑造数据。所以,在管道中插入一个命令来限制行数: customEvents | take 5 这给了五行:

让对 pageViews 做同样的事情。 pageViews | take 5 太好了!现在可以开始做一些更有趣的事情了。

数据汇总

目标是:在过去的24小时内,向展示点击次数最多的前五个页面,并按媒介进行细分。 首先,需要过滤过去一天的数据,并按页面(URL存储在 name 属性中)进行汇总。 pageViews | where timestamp >= ago(24h) | summarize totalclicks=count() by name 这是结果。注意总共有50条记录。

接下来,想要按点击次数排序,并获取前五名。这里 Kusto 与 SQL 在如何编写查询方面有所不同:在 SQL 中,需要考虑集合,并可能使用表表达式或诉诸于临时表。在 Kusto 中,只是在遍历一个管道。所以像这样添加顺序和总结: pageViews | where timestamp >= ago(24h) | summarize totalclicks=count() by name | order by totalclicks desc | take 5 结果是在过去24小时内点击次数最多的页面。

为 "视图" 创建别名

想在稍后的管道中使用点击次数最多的前五个页面,而不是尝试加入到完整的查询中,可以简单地为其创建别名,并在稍后的管道中像视图一样引用它。以下是如何为查询创建别名: let top5pages=pageViews | where timestamp >= ago(24h) | summarize totalclicks=count() by name | order by totalclicks desc | take 5; 这不会自己运行,因为 Kusto 期望每个查询都以表格数据结束。已经为查询创建了别名,但还没有使用它。要使其 "可运行",只需在管道中表达视图: let top5pages=pageViews | where timestamp >= ago(24h) | summarize totalclicks=count() by name | order by totalclicks desc | take 5; top5pages; 提示:很容易将查询想象成有多个步骤。然而,一切都被认为是一个单一的工作批次,Kusto 将检查整个语句集,以优化并产生结果。

塑造数据

现在想看看自定义事件。遇到的第一个问题是事件属性 name 与页面属性 name 相同。因此,想将属性名称更改为 type。customEvents 数据源有很多属性。只对两个感兴趣:type 或 medium,以及 operation_Id。这是一个可以回联到 pageViews 数据源的唯一标识符。

extend 语句允许注入新的列。可以分配一个文字,或者像在这里做的那样,将其从一个属性移动到另一个属性。要将 name 转移到 type,简单地添加: | extend type=name project 语句允许指定想要的属性,就像 SQL 中的 select。这是完整的查询: customEvents | where timestamp >= ago(24h) | extend type=name | project type, operation_Id; 结果是类型和操作标识符的列表。

将最后一个视图别名为 custom。意识到有两个过滤器看起来像是回溯24小时。确保它们是一致的很有意义,所以也为那个表达式创建了一个别名。这是进展(这个查询还不能运行,因为它还没有返回任何数据)。 let cutoff = ago(24h); let top5pages = pageViews | where timestamp >= cutoff | summarize totalclicks=count() by name | order by totalclicks desc | take 5; let custom = customEvents | where timestamp >= cutoff | extend type=name | project type, operation_Id; 现在让得到一些结果!

加入结果

想包括自定义事件的确切匹配,所以第一个连接需要是一个 inner join。只想包括点击次数最多的前五个页面,所以也将与那个表进行 inner join。最后,想按页面点击次数最多的顺序排列。这是管道中的最后一个查询。注意是如何像连接普通表格或数据源一样连接到创建的别名的。 pageViews | join kind=inner custom on operation_Id | join kind=inner top5pages on name | summarize clicks=count(), total=max(totalclicks) by name, type | extend page=name | project page, type, clicks, total | order by total desc, page asc, clicks desc; 注意连接语法(如果属性被命名为不同的东西,比如 id,语法将是 custom on $left.id == $right.operation_Id)。创建了两个标量列:一个包含媒介内的点击次数,另一个包含页面的总点击次数。最后,塑造并排序了数据。

别名帮助构建了查询,并使其更容易阅读和更易于维护。这是没有使用别名的确切相同查询,它产生了相同的结果: pageViews | join kind=inner (customEvents | where timestamp >= ago(24h) | extend type=name | project type, operation_Id) on operation_Id | join kind=inner (pageViews | where timestamp >= ago(24h) | summarize totalclicks=count() by name | order by totalclicks desc | take 5) on name | summarize clicks=count(), total=max(totalclicks) by name, type | extend page=name | project page, type, clicks, total | order by total desc, page asc, clicks desc; "展开" 方法并不像维护起来那么容易。别名在需要多次连接到同一个查询时也更有用。查询代码重用,胜利!

数据可视化

这是文章中最短的部分,因为要可视化数据,只需点击 Chart 选项。它立即渲染出基于数据的最有意义的图表,同时允许根据需要调整类型和内容。在这里,Kusto 足够聪明,能够确定想按页面分组,并查看媒介或类型对点击的相对影响。

立即明显,Twitter 是参与度的明显领导者,其次是 LinkedIn,位居第二。现在已经有一个工作的查询,可以保存它,并在毫秒内看到一个实时视图,显示过去24小时内点击次数最多的前五个页面。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485