我想收集两台主机(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
。
请执行下列操作 :
- 使用 tshark/tcpdump/whatever 在两侧通过相关过滤器捕获流量并生成 pcap 格式的文件。
- 一旦完成后,运行捕获文件上的
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 绘制图形
优势:
- 详细了解正在发生的事情
坏处:
- 带有捕获的文件流量增长非常快