Azure 日志实战:Azure Monitor、Log Analytics 与 KQL 查询
Azure 日志中文实战:Azure Monitor 日志体系(Activity Log / 资源日志 / 应用日志)、Log Analytics 工作区与 KQL 查询语言、Diagnostic Settings 诊断设置、Application Insights 应用日志、保留与成本治理,以及与观测云联动的落地方案。
Azure 的日志体系以 Azure Monitor 为中枢:平台日志(Activity Log)、资源日志、应用日志三路汇入 Log Analytics 工作区,用 KQL(Kusto Query Language)统一查询。本文讲清三路日志的区别、KQL 上手、诊断配置与观测云联动方案。
核心要点速览
- 三路日志先分清:Activity Log(订阅级控制面操作)、资源日志(资源内部运行)、Application Insights(应用代码级)。
- Log Analytics + KQL 是检索中枢:类 SQL 的管道式查询语言,功能强大。
- Diagnostic Settings 决定日志流向:Log Analytics / Storage Account / Event Hubs 三选一或组合。
- VM 应用日志接入:可通过 DataKit 采集主机上的日志文件,先验证字段和时间再扩大采集范围。
1. 三路日志的区别
| 日志 | 内容 | 默认开启 |
|---|---|---|
| Activity Log | 谁在什么时候对订阅里什么资源做了什么操作(控制面) | ✅ |
| 资源日志 | 资源内部运行事件(如 Key Vault 的访问记录、NSG 流日志) | ❌ 需 Diagnostic Settings |
| 应用日志 | App Service/容器应用的 stdout、异常、请求 | 需配置 |
最常见的盲区是资源日志——默认不收集,必须为每个资源创建 Diagnostic Setting 才会产生。
2. Diagnostic Settings:日志的开关与路由
每个资源的"诊断设置"里勾选日志类别,选目的地:
- Log Analytics 工作区:可查询、可告警(主用);
- Storage Account:廉价归档(合规留存);
- Event Hubs:用于流式外送;第三方接收方需要具备相应消费与转换流程。
3. KQL 快速上手
// 最近 1 小时的错误日志
AppTraces
| where TimeGenerated > ago(1h)
| where SeverityLevel >= 3
| project TimeGenerated, Message, Properties
| order by TimeGenerated desc
// 按分钟统计错误量趋势
AppTraces
| where SeverityLevel >= 3
| summarize count() by bin(TimeGenerated, 5m)
| render timechart
KQL 的管道式语法(| 串联操作符)读一次就上手:where 过滤、summarize 聚合、render 出图、join 关联。
4. Application Insights:应用代码级日志
给应用装上 Application Insights SDK(或无侵入代理),请求、依赖调用、异常、trace 自动采集,且天然带 operation_Id 把一次请求的遥测串成链。App Service 还可以同时开 Web Server 日志(IIS)与应用日志(文件系统/Blob)。
5. 保留与成本
Log Analytics 按摄入 GB 计费 + 保留期(31 天起,最长 12 年可调)。控费三招:Diagnostic Settings 只开需要的类别;表级保留期差异化;归档需求走 Storage Account(便宜一个数量级)。
6. 采集 Azure VM 上的应用日志
需要把 Azure VM 的应用日志汇入观测云时,可按 DataKit 日志采集配置文件路径和读取权限。这条路径采集的是 VM 上实际写出的日志,不是 Log Analytics 工作区中的全部数据。
先写入一条带时间、级别和请求标识的测试日志,确认采集端与查看器均可找到。JSON 日志可按文档配置字段解析;再核对时间格式、级别映射和敏感信息处理。保留请求标识方便检索,但与链路跳转关联还需要匹配的 Trace 数据和字段配置。
常见问题(FAQ)
为什么资源日志默认不收集?
设计取舍:资源日志量巨大且按量计费,全开会带来明显成本——所以 Azure 把开关交给用户。生产环境应为关键资源(Key Vault、NSG、负载均衡器、数据库)逐个配置 Diagnostic Settings。
KQL 难学吗?
不难。会 SQL 的过滤聚合概念即可上手;KQL 在时间序列与日志场景的表达力(ago()、bin()、render)甚至优于 SQL。先掌握 where/summarize/render 三板斧。
Application Insights 和 Log Analytics 是什么关系?
Application Insights 是应用性能管理(APM)功能,数据存在 Log Analytics 工作区里,用同一套 KQL 查询(AppTraces、AppRequests、AppExceptions 等表)。
多云环境日志统一的最佳路径?
先按日志来源分别确定导出与接收方式,再统一时间、服务名和环境字段。主机文件可走 DataKit 日志采集;云服务平台日志需单独验证导出通道、消费端、重试和权限,不能直接套用主机采集步骤。
系列阅读
- 上一篇:GCP 日志实战
- 下一篇:AWS 日志体系入门
- 相关阅读:什么是日志监控 | 日志聚合