使用 ss 命令可高效统计指定端口连接数,如 ss -tn state established 'sport = :8080' | wc -l;配合可配置脚本、日志记录、阈值告警及 cron 定时任务,实现自动化端口连接监控。

要监测 Linux 系统中某个端口的当前连接数,核心是解析 netstat 或更现代的 ss 命令输出,并提取对应端口的 ESTABLISHED(或所有状态)连接行数。自动化脚本需具备可配置端口、定期执行、结果记录与简单告警能力。
用 ss 命令高效统计指定端口连接数
ss 比 netstat 更轻量、更快,且默认支持显示监听和已建立连接。统计某端口(如 8080)的 ESTABLISHED 连接数,可用:
-
ss -tn state established 'sport = :8080' | wc -l(统计服务端监听该端口且连接已建立的 socket) - 若需统计所有连接(含客户端主动连出),用
dport或组合过滤:ss -tn 'sport = :8080 or dport = :8080' | tail -n +2 | wc -l -
tail -n +2跳过表头,避免误计标题行
编写可配置的监测脚本
以下是一个带参数、日志记录和阈值判断的 Bash 脚本示例(保存为 check_port_conn.sh):
- 第一行加
#!/bin/bash,并赋予执行权限:chmod +x check_port_conn.sh - 支持传入端口(
$1)和警告阈值($2),如:./check_port_conn.sh 8080 100 - 使用
date '+%Y-%m-%d %H:%M:%S'打印时间戳,便于追踪 - 将结果追加到日志文件(如
/var/log/port_monitor_8080.log),同时标准输出供手动查看 - 当连接数超过阈值时,echo 一条告警提示(可后续扩展为发邮件或调用 webhook)
通过 cron 实现定时监测
将脚本加入系统定时任务,实现每分钟或每5分钟自动运行:
- 编辑用户 crontab:
crontab -e - 添加一行(以每2分钟检查 8080 端口为例):
*/2 * * * * /path/to/check_port_conn.sh 8080 150 >> /dev/null 2>&1 - 注意:脚本中若用绝对路径调用命令(如
/usr/bin/ss)更稳妥;cron 环境变量有限,必要时在 crontab 中显式设置 PATH
可选增强:生成简易趋势与告警
仅记录原始数值还不够直观,可进一步提升实用性:
- 用
awk或sed提取最近一小时连接数最大值/平均值,写入摘要日志 - 配合
mail或curl,当连续3次超阈值时触发邮件通知(避免瞬时抖动误报) - 将日志转为 CSV 格式,方便用 Python 或 gnuplot 绘制连接数趋势图
- 对关键端口(如数据库 3306、Redis 6379)单独建监控脚本,避免单点故障影响全部检测











