加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

如何监测linux服务器端口,用什么命令

发布时间:2023-08-19 12:35:48 所属栏目:Linux 来源:互联网
导读:   今天这篇我们来学习和了解“如何监控linux服务器端口,用什么命令”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“如何监控linux服务器端口,用什么命令&r
  今天这篇我们来学习和了解“如何监控linux服务器端口,用什么命令”,下文的讲解详细,步骤过程清晰,对大家进一步学习和理解“如何监控linux服务器端口,用什么命令”有一定的帮助。有这方面学习需要的朋友就继续往下看吧!
 
  一般企业用的服务器上面都会跑各种服务,比如nginx、php、mysql、redis、MongoDB等等。一般系统的运行可能会需要多个服务的配合,比如我司的系统需要php、mysql、redis、apache、MongoDB服务。这些服务缺一不可。
 
  所以我们要实时监控这些服务,如果发现有服务出现异常,需要立即告警。这里我们不打算通过进程名来判断服务的状态。我们打算通过端口的监听来判断服务的运行状态。
 
  linux服务器上有一个命令可以用来查看端口状态:netstat。但是在centOS7上,需要先安装net-tools工具,才有这个命令。已经安装这个工具包后,我们来使用netstat命令,看看它会显示哪些信息
 
  # netstat -tlnp
 
  Active Internet connections (only servers)
 
  Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
 
  tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      11213/redis-server  
 
  tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1556/nginx: master  
 
  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      984/sshd            
 
  tcp        0      0 127.0.0.1:88            0.0.0.0:*               LISTEN      17446/httpd         
 
  tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1556/nginx: master  
 
  tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      25859/mongod        
 
  tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      7138/mysqld
 
  上面显示的信息,不管是端口6379的redis,还是3306的mysql等等,都是运行我司系统必须的服务。然后,我们通过grep命令,过滤掉第一行以及第二行
 
  # netstat -tlnp | grep tcp
 
  tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      11213/redis-server  
 
  tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1556/nginx: master  
 
  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      984/sshd            
 
  tcp        0      0 127.0.0.1:88            0.0.0.0:*               LISTEN      17446/httpd         
 
  tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1556/nginx: master  
 
  tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      25859/mongod        
 
  tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      7138/mysqld
 
  然后再通过awk命令获取第四列的信息。
 
  # netstat -tlnp | grep tcp | awk '{print $4}'
 
  127.0.0.1:6379
 
  0.0.0.0:80
 
  0.0.0.0:22
 
  127.0.0.1:88
 
  0.0.0.0:443
 
  127.0.0.1:27017
 
  0.0.0.0:3306
 
  最后再通过cut命令获取到端口号。
 
  # netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2
 
  6379
 
  80
 
  22
 
  88
 
  443
 
  27017
 
  3306
 
  通过上面的操作,我们能获取目前服务器端口的情况,然后我们将需要运行服务的端口存放在数组中,然后遍历该数组和拿到的这些信息做对比。
 
  ports="80 88 443 3306 6379 27017"
 
  for port in $ports
 
  do
 
      echo $port
 
  done
 
  遍历这些需要监听的端口后,我们来将端口与netstat获取到的信息作对比。我们这里用grep命令来做判断。下面我们给出完整的代码:
 
  #!/bin/bash
 
  # 监控服务器端口情况
 
  export LANG=en
 
  ports="80 88 443 3306 6379 27017"
 
  netstat_info=$(netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2)
 
  for port in $ports
 
  do
 
      flag=$(echo $netstat_info | grep  $port)
 
      if [ -z "$flag" ];then
 
          echo "$port is dead"
 
      fi
 
  done
 
  对于端口监控的脚本编写还是很容易的。下面我们来测试下该脚本是否能正常监控端口。所有服务都正常的情况下,执行该脚本不会输出任何信息。如果关闭了nginx服务,则应该出现信息。
 
  首先,所有服务都正常的情况下,执行脚本
 
  # ./port.sh
 
  # #不会有任何信息出现
 
  现在我们来主动关闭nginx服务,然后再来运行该脚本,查看会出现什么信息
 
  # /etc/init.d/nginx stop
 
  Stoping nginx...  done
 
  # ./port.sh
 
  80 is dead
 
  443 is dead
 
  由此得知,该脚本能正常监控服务器端口情况。日常工作中,经常将上述脚本和定时任务以及告警程序一起使用。将此脚本发到定人任务去,没分钟执行一次,当发现指定端口没有被监听,则触发告警程序。
 

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章