我需要每分钟收集某些监控数据并将其发送到监控服务器。该数据源必须能够使用标准 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}'`