在咱们进行系统运维的时候,常常须要对服务器上的网络链接状况进行查看和监控,好比在进行系统的部署过程当中某个组件部署失败,而错误提示则指向了网络链接问题,此时咱们须要对网络链接进行检查:进程的服务端口是否在侦听?进程的服务端口是否有链接?有哪些IP链接到了这台服务器上?有哪些IP链接到了特定的端口上?……等等等等。
mysql
一般咱们都是在进行跟网络相关的问题排查时会须要查看服务器上的网络及端口的链接状况,本文就经过最经常使用的netstat命令来介绍网络链接状况的查看和监控。下面咱们以按部就班的方式来对几个不一样的场景进行介绍。sql
先从最简单也是最经常使用的命令参数组合开始:netstat -lntup,经过这个命令能够查看到当前服务器是正在进行侦听的服务端口。一般咱们会经过这个命令来确认某个端口是否在侦听,以判断绑定这个端口的服务进程是否在正常运行中。数组
参数解释:服务器
-l或--listening:显示监听中的服务器的链接状况微信
-n或--numeric:用数字直接显示IP地址和端口,而不将其解析成域名或进程名网络
-t或--tcp:显示TCP传输协议的链接状况运维
-u或--udp:显示UDP传输协议的链接状况tcp
-p或--programs:显示正在使用链接的进程ID和进程名称ide
示例图以下:spa
从图中能够看到,TCP 58725端口正在IP 10.100.104.4上侦听(LISTEN)中,有PID为17173的gse_ops进程提供服务
进一步,咱们能够经过telnet 10.100.104.4 58725来验证此端口是否能正常接受链接。
使用第一步的命令获得的列表多是很是长的,不便于咱们定位到咱们想要查看的某个特定端口的状态,因此咱们能够在上述命令的基础上,再使用grep命令来定位咱们须要查看的端口:netstat -lntup | grep “:3306 ”。
其中示例命令中的3306是端口后,注意3306前加了个英文冒号:,在后面加了个空格,这样作的缘由是避免相似如33061,13306这样的包含了3306的其余端口号的干扰。经过这样的筛选后,咱们就将只会看到有关于3306端口的链接状况了。示例图以下:
从图中咱们能够看出,TCP 3306的端口正在由mysqld进程在侦听中,可是并无显示出已链接了3306端口的其余链接状况,因此咱们能够改一下netstat的参数,将-l改为-a就能够看到其余状态了,以下图所示:
除了能够经过筛选端口方式来定位排查外,咱们还能够经过筛选进程名称或者进程ID来反查这个进程的端口及其链接状态:netstat -lntup | grep “mysql”
实例图以下:
从图中能够看出,经过mysql这个进程名称来筛选,能够查到其侦听的是3306这个端口。同理能够经过筛选1040这个进程ID来进行定位。
利用排序sort和重复计数uniq命令的配合,咱们还能够对链接状态的数量进行统计:netstat -ant | awk '{print $6}' | sort | uniq –c | sort -n 示例图以下:
从图中咱们能够大体看到这台服务器的链接数量,以此大体评估这台服务器的繁忙程度。其中前面两个数量为1的established和Foreign是从文字描述中截取的内容,能够忽略。
参数解释:
netstat -ant:以数字方式列出全部的TCP链接状况;
awk '{print $6}':以空格为分隔符,将每行的第6个字符串显示出来;以下图所示:
sort或sort -n:进行排序,其中-n是根据字符串的数值进行排序
uniq –c:检查重复出现的行,并将其重复次数显示出来
基于第四步的链接状态数统计的实现,咱们能够进一步对链接到这台服务器的IP进行统计:netstat -ant | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq –c | sort -n示例图以下:
经过链接IP数的统计,咱们能够比较明确地看到有哪些IP跟这台服务器进行这网络链接通信,以此判断链接是否正常,是否有额外的异常链接存在。
参数解释:
awk -F: '{print $1}':以冒号:为分隔符,将第1个字符串显示出来;
awk '{print $5}' | awk -F: '{print $1}':先把结果用空格分隔后的第5个字符串取出,再用冒号分隔后的第1个字符串取出;以下图所示:
以上就经过使用netstat命令来进行平常系统运维较常见的场景来介绍其使用方法,供你们参考。更多的语法命令可经过查询帮助或百度获取。
做者:何立