AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 753053
Accepted
aufziehvogel
aufziehvogel
Asked: 2016-02-01 12:01:20 +0800 CST2016-02-01 12:01:20 +0800 CST 2016-02-01 12:01:20 +0800 CST

AWS 区域流量:追踪其来源

  • 772

我开始在 AWS EC2 上的集群中使用多台机器。自从我开始这个项目以来,我在结算信息中看到了区域流量的成本:

区域数据传输 - 输入/输出/在 EC2 AZ 之间或使用弹性 IP 或 ELB

顾名思义,有三种可能:

  • 不同的可用区
  • 使用弹性 IP 进行通信
  • 使用 Elastic Loud Balancer

我的机器有不同的可用区,这是个问题。所以我解决了这个问题,现在所有机器都在同一个 AZ 中,但是现在成本已经增加了 24 小时(那段时间有 3 次更新)。看来,将所有机器设置到同一个 AZ 并没有解决它。

但是,我不使用弹性 IP 或 ELB。当我在我的门户网站上访问这些页面时,它只会向我显示一个空列表,其中包含一条消息,即我目前没有任何组件。

在另一个serverfault 问题中,我们还了解到,当使用公共 IP 地址进行通信时,会发生这种情况,但在一些 github 讨论中,我们可以读到即使公共 DNS 名称也会在内部解析为内部 IP(不过,公共 IP 将始终通过外部网络,因此实际上会触发成本)。

如果我使用集群中的主服务器和从服务器之一跟踪我的网络通信

sudo tcpdump -i eth0 | grep -v $MY_HOSTNAME

我只能看到这样的内部流量:

IP ip-172-31-48-176.ec2.internal.56372 > ip-172-31-51-15.ec2.internal.54768

所以我的问题是:如何找出导致此区域流量的组件?

amazon-ec2
  • 1 1 个回答
  • 1951 Views

1 个回答

  • Voted
  1. Best Answer
    aufziehvogel
    2016-02-01T13:54:08+08:002016-02-01T13:54:08+08:00

    tl;博士

    大量的区域流量是由apt-get update机器启动引起的。

    起初我怀疑我在集群上运行的软件,因为这会发送大量的 DNS 请求——可能它没有使用任何 DNS 缓存。并且 DNS 服务器位于另一个可用区中。

    调试这些东西的完整方法

    我和朋友一起调试了这个,这是我们如何得出解决方案的,所以遇到这个问题的每个人都可以关注:

    首先,从计费管理中可以看出,成本为每 GB 0.01 美元。因此,它反映了定价网页中的以下几点(更详细一点):

    • 同一可用区中的 Amazon EC2、Amazon RDS、Amazon Redshift 和 Amazon ElastiCache 实例或弹性网络接口
      • 使用公共或弹性 IP 地址
    • Amazon EC2、Amazon RDS、Amazon Redshift 和 Amazon ElastiCache 实例或另一个可用区中的弹性网络接口或同一 AWS 区域中的对等 VPC

    接下来,我查看了 AWS 上关于可用区和区域的说明。我必须支付的绝对是来自同一地区的流量(us-east-1在我的情况下)。它可以是从一个 AZ 到另一个 AZ 的流量(我们之前知道),也可以是使用同一 AZ 内的公共 IP 地址或弹性 IP 地址的流量(我们也从另一个服务器故障问题中知道)。然而,现在看来,这份清单确实是详尽无遗的。

    我知道我有:

    • 6 台 EC2 机器在一个集群中
    • 没有 RDS
    • 没有红移
    • 没有 ElastiCache
    • 没有弹性IP地址

    对等 VPC

    VPC 是自己的产品,所以去VPC。从那里您可以看到您拥有多少个 VPC。就我而言,它只有一个,因此根本不可能进行对等。但是你仍然可以去Peering Connections看看那里是否有任何设置。

    子网

    从 VPC 中的子网部分,我们还发现了一些重要的线索,可以进一步调试。中不同可用区的 IP 范围us-east-1:

    • 172.31.0.0/20为了us-east-1a
    • 172.31.16.0/20为了us-east-1b
    • 172.31.32.0/20为了us-east-1e
    • 172.31.48.0/20为了us-east-1d

    由于我所有的机器都应该在us-east-1d,我验证了这一点。事实上,他们都有以和开头172.31.48的IP 。到目前为止,一切都很好。172.31.51172.31.54

    tcpdump

    这最终帮助我们为 tcpdump 设置了正确的过滤器。现在知道我应该与哪些 IP 通信以避免成本(172.31.48.0/20仅限网络),我们为tcpdump. 这有助于消除所有让我看不到外部交流的噪音。另外,在我什至不知道与之通信[something].ec2.internal可能是问题之前,因为我对区域、可用区及其各自的 IP 范围了解不够。

    首先我们想出了这个 tcpdump 过滤器:

    tcpdump "not src net 172.31.48.0 mask 255.255.240.0" -i eth0
    

    这应该显示来自任何地方的所有流量,但是us-east-1d。它显示了来自我的 SSH 连接的大量流量,但我看到一些奇怪的东西飞过——一个ec2.internal地址。它们不应该全部被过滤掉,因为我们不再显示 AZ 内部流量吗?

    IP ip-172-31-0-2.ec2.internal.domain > ip-172-31-51-15.ec2.internal.60851
    

    但这不是内部的!它来自另一个 AZ,即us-east-1a. 这是来自 DNS 系统。

    我扩展了过滤器以检查这些消息中有多少发生:

    sudo tcpdump "not src net 172.31.48.0 mask 255.255.240.0 and not src host $MY_HOSTNAME" -i eth0
    

    我等了 10 秒,停止了记录,这是来自 DNS 的 16 个响应!

    后天还是一样的问题

    然而,在安装 dnsmasq 之后,一切都没有改变。使用集群时仍有几 GB 的流量。

    日复一日,我从集群中删除了更多任务,最后一天没有任何启动脚本(很好!),一天只尝试了启动脚本+即时关闭(流量!)。

    对启动脚本的分析表明,它apt-get update是apt-get install ...唯一一个拉取大文件的组件。通过 Google 研究,我了解到 Ubuntu 确实在 AWS 中有一个包存储库。这也可以从以下方面看出sources.list:

    http://us-east-1.ec2.archive.ubuntu.com/ubuntu/
    

    解析主机名会导致以下 IP 地址:

    us-east-1.ec2.archive.ubuntu.com.   30  IN  A   54.87.136.115
    us-east-1.ec2.archive.ubuntu.com.   30  IN  A   54.205.195.154
    us-east-1.ec2.archive.ubuntu.com.   30  IN  A   54.198.110.211
    us-east-1.ec2.archive.ubuntu.com.   30  IN  A   54.144.108.75
    

    所以我设置了一个日志流服务并在启动时记录了集群。然后,我下载了日志文件并通过 python 脚本运行它们,以总结所有传输到这 4 个 IP 地址中的任何一个的字节。结果与我的流量相匹配。在上次测试期间,我有 1.5 GB 的流量,有 3 个集群,每个集群有 5 台机器,根据我的 Log Flow 日志,每台机器从 Ubuntu 存储库查询大约 100 MB。

    • 2

相关问题

  • 权限被拒绝(公钥)。从本地 Ubuntu 到 Amazon EC2 服务器的 SSH

  • 管理员如何管理他们的 EC2 EBS 和快照?

  • 云有多大?[关闭]

  • EC2 映像启动

  • 如何将安全组添加到正在运行的 EC2 实例?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve