自动化巡检核心是快速识别网卡UP状态、有效IP、网关连通性及DNS解析能力;通过nmcli轻量采集状态,过滤物理网卡,验证地址、网关与DNS,并封装为带日志和告警的定时脚本。

明确巡检目标与关键指标
自动化巡检的核心是快速识别异常:网卡是否处于 UP 状态、是否有有效 IP(IPv4/IPv6)、能否连通默认网关、DNS 是否可解析。Nmcli 提供了轻量、无依赖的接口,适合嵌入 Shell 脚本中批量采集这些状态,无需安装额外工具或启用 NetworkManager 以外的服务。
用 nmcli 获取网卡基础状态
通过 nmcli -t -f DEVICE,STATE,CONNECTION device 可以获取简洁的冒号分隔输出,便于脚本解析。重点关注 STATE 字段是否为 connected,忽略 unmanaged 或 unavailable 设备。建议过滤掉 loopback(lo)和虚拟设备(如 docker0、virbr0),只检查物理或业务相关网卡:
- 用
nmcli -t device | grep -E '^(eth|enp|ens|eno|ib)' | cut -d: -f1提取常见有线网卡名 - 对每个设备执行
nmcli -t -f IP4.ADDRESS,IP6.ADDRESS device show $DEV判断地址是否非空 - 若 IP4.ADDRESS 显示 192.168.x.x/24 或 10.x.x.x/8 等私有网段,说明已获取地址;若为 169.254.x.x/16(link-local),则 DHCP 失败需告警
验证连通性与 DNS 解析能力
仅看 IP 不代表网络可用。应在获取网卡信息后立即测试:
- 查默认网关:
ip route | awk '/default/ {print $3; exit}',再用ping -c 2 -W 1 $GATEWAY &>/dev/null测试可达性 - 测 DNS:
nmcli -t -f IP4.DNS device show $DEV | cut -d: -f2 | head -n1提取首个 DNS,然后timeout 2 nslookup google.com $DNS &>/dev/null - 失败时记录时间戳、设备名、错误类型(如“gateway timeout”、“dns resolve failed”),便于定位是路由问题还是上层服务故障
封装为可定时运行的巡检脚本
将上述逻辑写成带日志、退出码和简单汇总的 Shell 脚本,例如 net-check.sh:
- 开头设置
set -e和set -u避免未定义变量或命令失败被忽略 - 用
logger -t net-check "INFO: start check"记录系统日志,同时输出到/var/log/net-check.log - 最后统计“正常设备数 / 总检查设备数”,若不相等则返回非零退出码,方便配合 cron + 邮件或 Zabbix 告警
- 加入
sleep 0.1防止高频调用 nmcli 导致 dbus 响应延迟累积
添加到 crontab 每 5 分钟执行一次:*/5 * * * * /opt/scripts/net-check.sh >> /dev/null 2>&1


















