翼度科技»论坛 编程开发 .net 查看内容

运维脚本:网络连通性测试

10

主题

10

帖子

30

积分

新手上路

Rank: 1

积分
30
1. 背景介绍

在日常运维工作中,网络连通性是确保系统稳定性和高可用性的关键因素之一。通过测试网络连通性,运维人员可以快速诊断网络问题,判断系统与其他设备或服务的连接状态。这对于预防和处理网络故障至关重要。
本文将介绍如何编写和使用一个简单的运维脚本,来自动化测试服务器的网络连通性。
2. 目标描述

本文的目标是创建一个运维脚本,用于测试服务器之间的网络连接是否正常。该脚本能够:

  • 检查与目标IP或域名的连通性。
  • 提供网络连通性测试的结果(如是否连接成功,响应时间等)。
  • 对不同的网络故障类型进行简单的错误提示,帮助快速定位问题。
3. 脚本设计思路

在测试网络连通性时,我们通常会使用以下工具:

  • Nc 命令:用来测试网络连接性,检查目标主机是否可达。
  • Traceroute 命令(可选):用于分析网络路由,帮助定位中断的节点。
脚本设计应简洁明了,能够通过参数传递目标IP或域名,并且输出直观的测试结果。
4. 脚本示例

[code]#!/bin/bash# checkConnectStatus.sh# 批量测试网络连通性脚本log_err() {    printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033[31mERROR: \033[0m$@\n"}log_info() {    printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033[32mINFO: \033[0m$@\n"}log_warning() {    printf "[$(date +'%Y-%m-%dT%H:%M:%S')]: \033[33mWARNING: \033[0m$@\n"}THREADS=5# 等待队列初始化queue_init() {    tmp="/tmp/$$.fifo"    mkfifo $tmp    exec 6$tmp    rm -f $tmp     for ((i = 1; i &6}init() {        connectConfigDirPath="conf"    if [ ! -d "$connectConfigDirPath" ];then        mkdir $connectConfigDirPath    fi    connectFileName="${connectConfigDirPath}/connect.csv"    if [ ! -f "$connectFileName" ];then        echo "测试地址|测试结果|状态" > $connectFileName    fi    # 检查是否存在nc命令    if [ -n "$(rpm -qa | grep 'ncat')" ];then        yum -y install nc > /dev/null 2>&1        if [ $? -ne 0 ];then            log_err "[init] yum install nc failed! 请手动安装nc命令"        fi    fi    # 参数为空,打印使用方式    if [ $# -eq 0 ]; then        usage    fi    while [[ $# -gt 0 ]]; do        case $1 in        --fileName)            connectIpPortFileName=$2            shift            shift            ;;          * | --help)            usage            ;;        esac    done    }usage() {    echo "Usage: $0         --fileName  填写测试连通性文件        "    exit 1}checkConnectToFile() {    local url=$1    local ip=$(echo $url | awk -F":" '{print $1}')    local port=$(echo $url | awk -F":" '{print $2}')    local data=$(nc -zv -w 5 $ip $port 2>&1 | tr "\n" " ")    local message="网络连通性正常"    if [ -n "$(echo $data | grep 'Ncat: 0 bytes sent, 0 bytes received')" ];then        log_info "[connect] url: $url data:[$data] msg: $message"    else        local message="网络连通性异常"        log_err "[connect] url: $url data:[$data] msg: $message"    fi        # 将测试结果记录到文件中,因使用多线程文件操作加锁     {        # 文件执行过程加锁,等待直到可以锁定文件        flock 002           # 结果记录到文件中        echo "$url|$data|$message" >> $connectFileName    } 002>"${connectFileName}.lock" # 002是文件描述符,此处用于解锁}readFileToConnect() {    while read -r line;do        local IPList=$(echo $line | awk -F"|" '{print $1}')        local PortList=$(echo $line | awk -F"|" '{print $2}')        local conncetHostPortArray=()        # 配置数据处理        {            # 多IP情况下            if [ -n "$(echo $IPList | grep ',')" ];then                # 进行遍历                IFS=',' read -r -a ipArray

举报 回复 使用道具