移动服务器之前loggingnetworking连接?

我们正在升级一个旧的数据库服务器,但要确保我们更新连接到它的所有其他服务器上的代码。 我正在考虑镜像networking端口并logging连接到服务器的IP地址。 我想开启服务器本身的日志logging,但是我不想影响它的性能,因为它还在生产中。

有没有关于我可以用来loggingIP地址的软件的build议? 它可以是Windows,Linux,FreeBSD,VM,LiveCD或其他。 只要它在兼容x86的机器上运行,我应该可以运行它。

数据库服务器本身运行什么操作系统? 如果是Linux,则可以将日志logging规则添加到本地防火墙configuration,而对服务器的影响最小。 有些东西是:

iptables -A INPUT -m state --state NEW -p tcp --dport <yourdbport> -j LOG --log-prefix "[database] " 

你可以添加-m limit --limit 4/s来限制这个规则,只logging4次/秒(等等),如果连接速率很高,将防止它占用所有的IO。 这会将行logging到系统日志,如下所示:

 [database] IN=eth0 OUT= MAC=00:16:3c:21:7c:f1:00:d0:00:6f:8c:00:08:00 SRC=abcd DST=wxyz LEN=48 TOS=0x00 PREC=0x00 TTL=114 ID=16448 DF PROTO=TCP SPT=59871 DPT=5900 WINDOW=8192 RES=0x00 SYN URGP=0 

你想要的信息是SRC=字段。

如果你设置一个独立的Linux(或FreeBSD)系统来接收来自镜像端口的stream量,你可以使用tcpdumplogging这个IP地址。 就像是:

 tcpdump -w record_of_connections -i eth0 \ dst port <yourdbport> and 'tcp[tcpflags] & tcp-syn != 0' 

这将匹配所有数据包端口您的dbport有SYN标志设置(例如,他们是一个新的连接尝试)。 运行这个文件后,你可以像这样提取IP地址:

 tcpdump -r record_of_connections -n 

这将产生这样的行:

 15:07:40.808035 IP 10.243.16.190.53967 > 10.243.18.22.http: Flags [S], seq 1235802021, win 5840, options [mss 1380,sackOK,TS val 3739192250 ecr 0,nop,wscale 7], length 0 

那里的领域是:

 <time> <protocol> <src_addr>.<src_port> > <dest_addr>.<dest_port>: ... 

这意味着你可以得到像这样的源IP地址:

 tcpdump -r record_of_connections -n | awk '{print $3}' | sed 's/\.[^.]*$//' | sort -u 

sort -u给你一个唯一的地址列表。