节省AWS的网络流量花费
-
如何节省AWS的网络流量花费
随着服务上线到AWS,虽然预计到会有网络使用费用,但是查看账单时发现如此高的流量还是吓了一跳。
使用AWS自带的CloudWatch仅仅能查看到EC2单机的网络流量,里面不光包含了对外的流量,还包含了到内部其他EC2的流量。对于调查问题基本没有帮助。
由于对外提供服务,对于调查是哪个服务耗用的网络流量就不再啰嗦,想要调查的问题在于明确是服务的哪一项功能消耗这么多的网络流量,是否用户误用了某项功能导致的?
在调查前,首先明确一下AWS只对发送数据收费,对于接收数据是不收费的。所以我们只需要调查发送数据。那么自然想到使用iftop查看数据量即可。但立即就发现了问题,当前的服务采用微服务架构,各服务间的访问量直接掩盖了对外的访问。另外,iftop启动后才会累加网络流量,你需要观察一段时间才能找到目标。
不光如此,由于服务器众多,AWS账单也没告诉你具体是哪台EC2消耗的流量,你不能在每台机器上都运行iftop然后人工去猜到底是谁消耗的网络流量。还由于你不知道这个流量是平稳消耗的还是突发性消耗,如果是突发性消耗,在你查看的那段时间中很可能根本就看不到消耗的数据。
那么我们此时就需要一个既能区分公网还是内网的流量,又能持续记录的工具。刚好我们本身就是做监控的(www.zervice.cn),于是立马自己监控自己,把网络详情也加进来,再分区一下内网VPC的地址和公网地址,立马上线查看服务运行情况。
不光能看到单机的网络流量,还能分组聚合查看,不管在哪台EC2上调用数据,都能汇总起来。查看聚合结果发现这流量居然是指向的我们内部数据中心AI服务器的地址。由于带显卡的EC2较贵,而我们自身有一个机房里面有专门的AI服务器,于是上线时将AI的任务调度到我们自己的机器上执行,自己把自己坑了,给AWS交了不少流量费。
想着不少同学可能踩到类似的坑,我们已将该功能开放出来,供需要的同学使用。