监控并收集与源主机或目标主机的 TCP 连接的统计信息

监控并收集与源主机或目标主机的 TCP 连接的统计信息

我想收集两台主机(A 和 B)之间发送的 TCP/UDP 数据包的统计信息。我正在寻找一个可安装在 A 和 B 上的工具来获取以下信息:

  • 千字节/秒
  • 包/秒
  • 迄今为止已发送的(累计)字节数
  • 迄今为止发送的(累计)数据包
  • 滑动窗口内的平均值

网络流量监控,但我很难从命令行配置它。 tcptrack 不聚合数据...我有点迷茫.. :DI 可以编写脚本 tcpdump :/

可能,我错过了一些很明显的东西......

更新:两台服务器都运行 ubuntu 14.04。

更新 2:我现在尝试使用 tcpflow(日志增长非常快),我将检查 collectId

更新 3:跟踪给定 IP 或网络流量的最简单方法是使用 IPTABLES 和IPTABLES 收集插入。

答案1

这是一个非常有趣的问题。
答案取决于您的网络设置,但我会尝试介绍一些案例。
我非常相信 CollectD 是答案的一部分。

首先,由于您希望“每秒”收集指标,因此您需要配置 CollectD间隔值

解决方案 N°1 - 服务器 A 是否在特定接口上专门与服务器 B 对话?(反之亦然)
使用以下方式安装 CollectD接口插件它将“收集”您所需的部分:

  • 千字节/秒
  • 包/秒
  • 迄今为止已发送的(累计)字节数
  • 迄今为止发送的(累计)数据包

将 CollectD 指标转发到时间序列数据库(例如 Graphite)。
您将能够可视化这些指标并应用移动平均函数.它将满足您的需求:

  • 滑动窗口内的平均值


解决方案 2 - 服务器 A 是否仅通过 TCP 和特定端口与服务器 B 通信?(反之亦然)
非常相似。使用 CollectD 并仅使用以下方式监控特定 TCP 端口上的流量:CollectD 及其 TCPConns 插件。此外,使用 Graphie 进行“滑动窗口内的平均值

答案2

一种方法是使用tshark

请执行下列操作 :

  1. 使用 tshark/tcpdump/whatever 在两侧通过相关过滤器捕获流量并生成 pcap 格式的文件。
  2. 一旦完成后,运行捕获文件上的tshark选项。-z

然后 :

  • 获取每秒的数据包和字节速率:

    tshark -q -r myfile.cap -z io,stat,1

这将产生如下结果:

=============================
| IO Statistics             |
|                           |
| Interval size: 1 secs     |
| Col 1: Frames and bytes   |
|---------------------------|
|          |1               |
| Interval | Frames | Bytes |
|---------------------------|
| 0 <> 1   |     29 |  2026 |
| 1 <> 2   |     35 |  2440 |
| 2 <> 3   |     35 |  2440 |
| 3 <> 4   |     43 |  2920 |
| 4 <> 5   |     93 |  5776 |
| 5 <> 5   |     77 | 25758 |
=============================
  • 获取数据包和字节聚合以及平均 TCP 窗口:

    tshark -q -r myfile.cap -z io,stat,0,"AVG(tcp.window_size)tcp.window_size"

结果将是这样的:

==============================================
| IO Statistics                              |
|                                            |
| Interval size: 5.109 secs (dur)            |
| Col 1: Frames and bytes                    |
|     2: AVG(tcp.window_size)tcp.window_size |
|--------------------------------------------|
|                |1               |2      |  |
| Interval       | Frames | Bytes |  AVG  |  |
|-----------------------------------------|  |
| 0.000 <> 5.109 |    312 | 41360 | 41363 |  |
==============================================


现在,如果你从公式中得到 TCP 的窗口平均大小(如果没有流量检查工具,你将无法获得此指标),你可以使用标准监控工具绘制任何协议上的数据包速率/聚合的图表,例如仙人掌

编辑 :鉴于其他答案(已投票),我不确定您所说的滑动窗口是什么意思。如果您指的是从某个日期开始的给定时间段内的指标平均值(而不是 TCP 窗口大小),那么您可以通过使用 tshark 命令添加日期过滤器来完成整个操作。

但看起来您只是在寻求一种全球监控解决方案。Cacti、collectd、zabbix、shinken、nagios(带有 icinga 或类似程序)应该可以满足您的需求,并且可自定义到足以在需要时过滤特定流量。

答案3

为两台服务器创建端口镜像,并从两台计算机运行 wireshark 来收集数据。这样就不会影响您的服务器的生产。

答案4

我运行 1-2 小时测试的解决方案:

  • tcpflow 用于收集 TCP 流量,我使用tcpflow -i eth0 -FT结果文件名中包含时间戳
  • 解析 report.xml (DFXML) 以创建有关关闭连接的报告
  • 解析捕获流量的文件名 + 记录其大小,以报告测量期间的持续连接
  • 使用 matplotlib 绘制图形

优势:

  • 详细了解正在发生的事情

坏处:

  • 带有捕获的文件流量增长非常快

相关内容