日志分析和 KQL 基础
将诊断日志引入 Log Analytics 工作区,并编写 Kusto 查询语言查询来筛选、聚合和可视化运行数据。
日志分析和 KQL 基础 是 CoddyKit 上的免费 Azure Fundamentals 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Azure Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Azure Fundamentals 课程共包含 4 节课。
什么是 Log Analytics 工作区
Log Analytics 工作区是 Azure Monitor 中用于存储日志和遥测数据的中央数据存储区。当您在 Azure 资源上配置诊断设置后,结构化日志和指标会流入该工作区。然后,您可以使用Kusto 查询语言 (KQL)查询这些数据。工作区拥有自己的保留策略(默认 30 天,最长 730 天)和访问控制。
# Create a Log Analytics workspace
az monitor log-analytics workspace create \
--resource-group myRG \
--workspace-name myWorkspace \
--location eastus \
--retention-time 90将诊断日志发送到工作区
每个 Azure 资源都可以生成诊断日志,其中包含 API 调用、身份验证事件和查询执行等操作的详细记录。您可以通过资源上的诊断设置启用这些日志,并将目标指定为 Log Analytics 工作区。常见的日志类别包括 Key Vault 的 AuditEvent、App Service 的 AppServiceHTTPLogs,以及 NSG 的 NetworkSecurityGroupFlowEvent。
# Enable diagnostic settings to send Key Vault logs to Log Analytics
az monitor diagnostic-settings create \
--name 'KVLogs' \
--resource /subscriptions/<sub>/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myKV \
--workspace myWorkspace \
--logs '[{"category":"AuditEvent","enabled":true}]'KQL 语法简介
Kusto 查询语言 (KQL)是一种用于分析日志数据的只读查询语言。KQL 查询按从左到右的流水线方式读取:先从表名开始,然后通过管道符(|)连接各个运算符。常见运算符包括用于筛选的 where、用于选择列的 project、用于聚合的 summarize,以及用于排序的 order by。KQL 对列名区分大小写,但对关键字不区分大小写。
// Basic KQL query structure
AzureActivity
| where TimeGenerated > ago(24h)
| where OperationNameValue == 'MICROSOFT.COMPUTE/VIRTUALMACHINES/DELETE'
| project TimeGenerated, Caller, ResourceGroup, Resource
| order by TimeGenerated desc使用 Where 运算符进行筛选
where 运算符使用布尔表达式筛选行。您可以使用 and、or 和 not 组合条件。has 运算符会在字符串中执行不区分大小写的单词边界搜索,而 contains 会执行子字符串搜索。in 运算符用于测试某个值是否属于列表。使用 ago() 可以表示相对时间范围,例如 ago(1h) 或 ago(7d)。
// Filter for failed HTTP requests in the last hour
AppRequests
| where TimeGenerated > ago(1h)
| where Success == false
| where ResultCode in (500, 502, 503)
| project TimeGenerated, Name, ResultCode, DurationMs
| order by DurationMs desc使用 Summarize 聚合数据
summarize 运算符跨行计算聚合结果。常见的聚合函数包括 count()、sum()、avg()、max()、min(),以及用于计算去重数量的 dcount()。您可以使用 by 子句按一个或多个列进行分组。bin() 函数会将时间戳舍入到指定时间间隔,以便进行时间序列聚合。
// Count failed requests per hour per endpoint
AppRequests
| where TimeGenerated > ago(24h)
| where Success == false
| summarize FailureCount = count() by bin(TimeGenerated, 1h), Name
| order by TimeGenerated desc, FailureCount desc在 KQL 中连接表
KQL 支持使用 join 关联多个表中的数据。默认连接类型是 innerunique,但您也可以指定 inner、leftouter、rightouter 或 fullouter。一种常见模式是将 AzureActivity 与 AzureMetrics 连接起来,从而将管理变更与性能下降关联起来。lookup 运算符则是一种更轻量的替代方案,可以从较小的参考表中补充行数据。
// Correlate VM restarts with CPU spike events
AzureActivity
| where OperationNameValue has 'restart'
| join kind=leftouter (
AzureMetrics
| where MetricName == 'Percentage CPU'
| where Average > 90
) on ResourceId
| project TimeGenerated, Resource, Average可视化 KQL 结果
在 Log Analytics 门户中编写查询后,您可以使用 render 运算符将结果呈现为时间图表、条形图、饼图或表格。您还可以将任何查询结果固定到 Azure Dashboard,或将其保存为工作簿。render timechart 命令会将时间序列汇总查询转换为即时折线图,以便分析趋势。
// Render a time chart of request counts per 5-minute interval
AppRequests
| where TimeGenerated > ago(4h)
| summarize RequestCount = count() by bin(TimeGenerated, 5m)
| render timechart日志搜索警报
日志搜索警报按计划运行 KQL 查询,并在结果满足某项条件时触发,例如结果数量大于零,或数值列超过某个阈值。它们比指标警报更加灵活,因为您可以跨多个表查询任意日志数据。评估频率和时间窗口可以分别配置,例如每 5 分钟运行一次,查询最近 15 分钟的数据。
// Example log search alert condition: more than 5 exceptions in 15 min
AppExceptions
| where TimeGenerated > ago(15m)
| summarize ExceptionCount = count()
// Alert when ExceptionCount > 5常见日志表参考
Azure Monitor 会将日志存储在已知表中。AzureActivity 记录订阅级别的操作。SecurityEvent 包含安装了 Log Analytics 代理的 VM 生成的 Windows 安全日志。Heartbeat 显示代理连接状态(每台已连接 VM 每分钟一行)。AppRequests、AppExceptions 和 AppDependencies 来自 Application Insights。了解这些表名对于编写有效的运维查询至关重要。
工作区保留和成本
Log Analytics 定价包含两个部分:数据引入(按引入的数据量 GB 计费)和数据保留(前 30 天免费,超过默认期限后按每 GB 每月计费)。您可以通过在引入前筛选噪声较大的日志类别、以较低价格使用Basic Logs存储高容量低价值数据,以及将较旧数据归档到Azure Data Explorer或冷存储中进行长期合规保留来降低成本。
工作区访问控制模型
Log Analytics 工作区支持两种访问控制模型。在工作区上下文模式下,拥有工作区读取权限的用户可以查询所有表。在资源上下文模式下,用户只能查询其具有 RBAC 读取权限的资源所生成的日志,即使没有明确的工作区访问权限也是如此。对于不同团队负责不同资源的大型组织,建议使用资源上下文模式。
快速检查
测试您对本课中 Microsoft Azure Fundamentals (AZ-900) 概念的理解。
课程回顾
本课中您学习了以下内容:Log Analytics 工作区集中存储来自 Azure 资源的诊断日志数据;KQL 运算符(如 where、summarize 和 render)可以筛选、聚合和可视化日志;日志搜索警报会在 KQL 查询结果满足定义的条件时触发自动响应。接下来,我们将学习 Application Insights,了解应用程序级遥测。
常见问题解答
「日志分析和 KQL 基础」课时是免费的吗?
是的 — 「日志分析和 KQL 基础」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Azure Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Azure Fundamentals 课程共包含 4 节课。
「日志分析和 KQL 基础」这节课中我会学到什么?
将诊断日志引入 Log Analytics 工作区,并编写 Kusto 查询语言查询来筛选、聚合和可视化运行数据。 你通过在浏览器中直接运行的动手代码来练习 Azure Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Azure Fundamentals 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Azure Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「日志分析和 KQL 基础」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Azure Fundamentals 课中编写并运行代码吗?
能。每节 Azure Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。