Linux:可以用grep监控网络流量和连接数

Linux:可以用grep监控网络流量和连接数

我需要每分钟收集某些监控数据并将其发送到监控服务器。该数据源必须能够使用标准 Linux 工具进行解析。例如,要每分钟监控当前连接数,我使用netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n,然后再次使用 awk 提取必要的数字。

现在我还需要监控:

  • 网络流量(每分钟发送/接收的数据)
  • 数量在最后一刻建立连接

grep请给我一些可以产生-able 和-able 输出的工具的提示awk

注意:测量是在专用机器上完成的,因此我获取一个接口(eth0)或整个主机的数据都没有关系。

注意:我只需要 TCP 连接。

答案1

设置为接受所有流量和所有 SYN 数据包(新连接)的 iptables 规则可用作计数器

iptables -A INPUT -j ACCEPT 
iptables -A INPUT --protocol tcp --syn -j ACCEPT

然后运行

iptables --list -v -n -Z

并根据需要通过管道传递尽可能多的 cut cat sort grep awk sed perl ruby​​ 和类似命令来获取您的数字。每次运行此命令时,-Z 都会自动将计数器清零,因此不会出现您在计数过程中丢失一些数据包的竞争条件。

答案2

对于网络流量:netstat -in或者深入了解提供的统计计数器ethtool -S IFACE

在两种情况下,您都必须建立两次测量之间的增量。

新建立......似乎与“当前连接”增量或与之前值的差异有关。

顺便说一句 - 您提到了监控服务器。监控服务器可能只需查看 SNMP 数据就能自行完成所有这些工作。激活snmpd并享受...

答案3

在其他人的帮助下,结合自己的想法,我现在做以下工作来监控当前的定期检查连接数和流量。(遗憾的是,仍然没有实现新建立的连接数量。)

连接(当前)

OUTPUT=`netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n`

ESTABLISHED=`echo "${OUTPUT}" | grep ESTABLISHED | awk '{print $1}'`                                                      
LISTEN=`echo "${OUTPUT}" | grep LISTEN | awk '{print $1}'`

流量(每分钟)

OUTPUT=`(LANG='' && ifstat -i eth0 60 1 | sed '3!d')`

IN=`echo "${OUTPUT}" | awk '{print $1}'`
OUT=`echo "${OUTPUT}" | awk '{print $2}'`

相关内容