《Windows Azure Platform 系列文章目录》
记录一下今天遇到的一个问题:
问题描述:
- 客户在Azure有若干台虚拟机,客户想知道这些虚拟机是否还有公网的访问,具体访问外网的IP和具体的流量分别是多少。
- 客户在Azure上部署了虚拟机和Azure防火墙
- 从Internet访问到Azure环境,具体的流量是:Internet -> Azure防火墙公网IP -> Azure负载均衡器内网IP -> Azure虚拟机
- 从Azure环境访问到Internet,是设置了路由表,把0.0.0.0/0的流量,下一条指向到Azure Firewall的内网IP。具体的流量是:Azure虚拟机 -> 路由表 -> Azure 防火墙内网IP -> Internet
配置过程:
- 直接使用Azure Network Watcher里的NSG Flow Log,针对这些虚拟网络子网所在的网络安全组,设置NSG Flow Log,并推送到Log Analytics里
发现问题:
- 客户在使用NSG Flow Log的时候,发现过去1小时内,所有虚拟机的入站流量和出站流量,分别是21MB和42MB。如下图:
- 但是客户使用Azure Firewall防火墙的网卡信息,发现防火墙的网卡信息,入站流量和出站流量总和,一共是184MB。和所有虚拟机网卡上的流量出入很大。
排错过程:
1.检查发现,Azure Firewall开启了DNS Proxy,因此除了正常的数据交互流量之外,Firewall IP的流量应该还包括DNS 解析的流量。
2.我们开启了Firewall的诊断日志,并将诊断日志发送到Log Analytic
3.检查Firewall的Log Analytics信息,具体的Kusto语法
AzureDiagnostics | where Category == "AzureFirewallDnsProxy" | project msg_s, UDPSize=split(msg_s, " ")[9],Response=split(msg_s, " ")[-2] | summarize request=sum(toint(UDPSize)),response=sum(toint(Response))
4.执行结果:
4.我们再次检查Azure防火墙的出站流量,发现出站流量约50MB。截图略。
5.NSG和DNS 的字节总数为21412509 Byte + 364568 Byte 约等于 33MB ,根据NSG流日志的定义,这些字节数为TCP/UDP层的字节数,NSG 的流日志记录简介 - Azure Network Watcher | Azure Docs,不包括IP报头。
https://docs.azure.cn/zh-cn/network-watcher/network-watcher-nsg-flow-logging-overview
6.所以NSG和Firewall DNS 统计出来的数据,实际确实会小于IP 指标的Byte Count统计的字节数。
IP 指标的Byte Count说明,参见:Azure Monitor supported metrics by resource type - Azure Monitor | Microsoft Docs