如何在Azure VM停止状态下记录网络流量以触发入站请求自动开机
Azure VM空闲检测+关机状态入站请求唤醒方案
你之前调研的结论是正确的:NSG流日志、VM层面数据包捕获仅会对运行状态的VM生成记录,VM进入停止(解除分配)状态后,网卡未关联运行的计算资源,上述能力无法采集流量。你可以通过在VM入站链路前增加前置流量代理/转发资源实现需求,具体可行方案如下:
方案1:Application Gateway(适合同区域公网/私网访问场景)
- 把目标VM加入Application Gateway(AGW)后端池,所有RDP、Web入站流量统一通过AGW转发
- AGW的访问日志不受后端VM运行状态影响,只要有请求到达AGW就会生成全量记录
- 空闲检测逻辑:将AGW日志导出到Log Analytics,配置查询规则统计连续1小时内无匹配RDP、自定义Web端口的请求时,触发自动化Runbook调用Azure API关停VM,对应的Log Analytics查询示例如下:
AzureDiagnostics | where ResourceType == "APPLICATIONGATEWAYS" | where DestinationPort_d in (3389, 80, 443) // 替换为你需要统计的业务端口 | where TimeGenerated > ago(1h) | where backendServerIp_s == "<你的VM私网IP>"
如果查询返回结果为空,即可判定为符合空闲关机条件。
- 开机触发逻辑:配置定时Runbook(最短1分钟间隔)或实时日志警报,检测到AGW日志中存在对应VM的入站请求、且VM当前为停止状态时,调用API启动VM
方案2:Azure Front Door(适合跨区域公网访问场景)
- 所有公网入站流量先接入Azure Front Door,后端源指向VM的公网访问入口
- Front Door的访问日志全量记录所有入站请求,不受后端VM状态影响
- 空闲检测逻辑:基于Front Door日志的时间窗口查询,连续1小时无有效请求时触发VM关机
- 开机触发逻辑:配置Log Analytics警报规则,匹配到入站请求后触发Azure Function执行VM开机操作,延迟可控制在1分钟以内
方案3:标准SKU负载均衡(适合纯私网访问场景)
- 如果VM仅需私网访问,可使用标准SKU的Azure负载均衡器做流量转发
- 标准SKU LB的流日志无需后端VM处于运行状态即可生成,导出到Log Analytics后可按前述逻辑实现空闲检测、入站请求唤醒能力
成本优化提示
如果不需要极低的唤醒延迟,可将定时Runbook的执行间隔设置为5~10分钟,大幅降低自动化任务的运行成本。
内容的提问来源于stack exchange,提问作者Ashutosh Gandhi
相关产品推荐
相关产品推荐

