如何使用Node.js查询Azure App Insights日志以实现性能报告自动化
用Node.js自动化查询Azure App Insights日志生成性能报告
别担心,其实App Insights的日志查询和Log Analytics是打通的,用Azure官方的Node.js SDK就能轻松实现自动化查询,正好能满足你生成性能报告的需求——也就是查询requests表中特定URL请求的平均值和99百分位数。下面是具体步骤:
1. 安装必需的SDK依赖
首先要安装两个核心包:一个负责日志查询,一个负责Azure身份验证:
npm install @azure/monitor-query @azure/identity
2. 获取关键信息
你需要提前准备好两个参数:
- App Insights关联的Log Analytics工作区ID:在App Insights资源的「概览」面板里,找到「工作区资源ID」,提取其中的
workspaceId部分(或者直接在Log Analytics工作区的概览里复制ID) - 目标URL筛选条件:就是你手动查询时用的特定URL路径,比如
/api/checkout
3. 编写查询代码
下面是完整的示例代码,用DefaultAzureCredential做身份验证(本地开发可以用Azure CLI登录,生产环境可以用托管标识),然后执行Kusto查询获取你需要的性能数据:
const { LogsQueryClient, LogsQueryResult } = require("@azure/monitor-query"); const { DefaultAzureCredential } = require("@azure/identity"); async function getAppInsightsPerformanceData() { // 初始化客户端 const credential = new DefaultAzureCredential(); const client = new LogsQueryClient(credential); // 替换成你的工作区ID和目标URL const workspaceId = "YOUR_WORKSPACE_ID"; const targetUrl = "/your-specific-url-path"; // Kusto查询语句:筛选特定URL,按天聚合计算Avg和P99 const query = ` requests | where url contains "${targetUrl}" | summarize AvgDurationMs = avg(duration), P99DurationMs = percentiles(duration, 99) by bin(timestamp, 1d) | order by timestamp desc `; try { // 执行查询,这里可以指定时间范围,比如最近7天 const response = await client.queryLogs(workspaceId, query, { timeRange: { duration: "P7D" } // 最近7天,格式符合ISO 8601 }); // 处理查询结果 if (response.status === "Success") { const tables = response.tables; if (tables.length > 0) { const rows = tables[0].rows; console.log("性能报告数据(按天):"); rows.forEach(row => { console.log(`日期: ${row[0]}, 平均响应时间(ms): ${row[1].toFixed(2)}, 99百分位响应时间(ms): ${row[2].toFixed(2)}`); }); // 这里可以把结果导出为CSV、JSON,或者集成到你的报告系统里 } } else { console.error("查询失败:", response.error); } } catch (err) { console.error("执行查询时出错:", err); } } // 运行函数 getAppInsightsPerformanceData();
4. 说明和扩展
- 身份验证:
DefaultAzureCredential会自动适配不同环境:本地开发时用Azure CLI登录(执行az login),Azure虚拟机/函数APP等环境会自动用托管标识,无需手动配置密钥。 - 查询时间范围:你可以调整
timeRange参数,比如改成P30D(最近30天),或者指定具体的起始和结束时间。 - 查询语句定制:如果需要更精细的筛选(比如特定时间段、特定应用版本),可以修改Kusto查询,比如加上
| where timestamp between (datetime(2024-01-01) .. datetime(2024-01-31))或者| where cloud_RoleName == "your-app-service-name"。 - 报告自动化:你可以把这个脚本集成到定时任务(比如用
node-schedule),定期运行并把结果发送到邮件、Slack,或者写入数据库生成可视化报告。
这样就能完全替代手动在App Insights「性能」面板的操作,实现性能报告的自动化啦!
内容的提问来源于stack exchange,提问作者JoeBloggs
相关产品推荐
相关产品推荐

