测试机房质量之Ping值测试

咱们经常会遇到这种问题,业务须要全国布点来知足用户的访问需求。可是全国那么多的机房要如何选择呢?固然咱们确定事先基本经过各个渠道了解并初步筛选了十几二十家机房,可是真的是要决定选择那几家做为第一批去布点的机房仍是须要一番测试的,其中上传、下载速率以及Ping值的测试是必不可少的环节。今天先来介绍Ping值测试。
Ping值测试咱们能够用一个perl脚原本实现,同时网通机房和电信的机房是要分开来测的,下面就是ping值测试的perl脚本,你们能够根据本身的状况进行修改须要测试的服务器。并把ping值脚本轮流放在每个节点上,最后综合统计它们相互测试的结果。
#!/usr/bin/perl
 
# 果的文件名
$result_filename='./ping_result.log';
 
$argv=@ARGV;
if (($argv != 2) && ($argv != 3)) {
   print "Useage: ./ping.pl ctc|cnc|edu minutes [-s]\n";
   print "\n";
   print "For Example: \n";
   print "\t ./ping.pl ctc 10\n";
   print "\n";
   print "Please report bug <mumonitor\@gmail.com>, Thank you!\n";
   print "\n";
   exit;
}
 
 
$idc=$ARGV[0];
 
# 转换为
$time=$ARGV[1]*60;
 
# 测试
#网通的
if ( $idc eq 'cnc' ) {
    %ping_list=(
    '219.158.28.121'=>'中国网通骨干网',
    '202.108.100.166'=>'中国网通北京网通',
    '218.69.33.1'=>'天津网通',
         #下面可依次添加网通的机房
 
);
} elsif ( $idc eq 'ctc' ) {
    %ping_list=(
    '61.152.188.1'=>'上海电1',
    '61.129.51.254'=>'上海电2',
    '218.1.64.33'=>'上海热线',
    '61.145.125.229'=>'广东星空_广州电',
        #下面可依次添加电信的机房
);
} elsif ($idc eq 'edu' ) {
    %ping_list=(
    '202.112.128.1'=>'北京航空航天大学',
    '166.111.8.28' =>'北京清华大学',
    '202.114.0.242' =>'湖北武汉华中科技大学',
        #下面可依次添加教育网的机房
);
}
 
# 数器,用来区分第一次记录ping包率
$count = 1;
 
chomp ($now_time=`/bin/date +%s`);
 
# 测试结时间
$end_time=$now_time+$time;
 
# 判断现时间是否小于时间
while ($now_time <= $end_time) {
  foreach $i (keys %ping_list) {
    if ($count == 1) {
         $server_count{$ping_list{$i}}=1;
    }
 
    # 测试ping数据
    open(PROCESS, "/bin/ping -c 1 $i | grep icmp_seq |");
    $ping = <PROCESS>;
    close(PROCESS);
   
    # 判断计msusec
    if ( $ping =~ m/(.*time=)(.*) (ms|usec)/ ) {
        # 若是很是很是很是快,到了微妙级别...
        if ($3 eq "usec") {
            # 若是是第一次的数值直接记录
            if ($count==1) {
                $average_num=($2/1000+$result{$ping_list{$i}});
                $rate=($rate_tmp+$result_rate{$ping_list{$i}});
            } else {
                # 两次的结果相加而后除以2
                $average_num=($2/1000+$result{$ping_list{$i}})/2;
                $rate_tmp=0;
                $rate=($rate_tmp+$result_rate{$ping_list{$i}})/2;
            }
            $result{$ping_list{$i}}=$average_num;
            $result_rate{$ping_list{$i}}=$rate;
        }else {
            # 若是是第一次的数值直接记录
            if ($count==1) {
                $average_num=($2+$result{$ping_list{$i}});
                $rate=($rate_tmp+$result_rate{$ping_list{$i}});
            } else {
                # 两次的结果相加而后除以2
                $average_num=($2+$result{$ping_list{$i}})/2;
                $rate_tmp=0;
                $rate=($rate_tmp+$result_rate{$ping_list{$i}})/2;
            }
            $result{$ping_list{$i}}=$average_num;
            $result_rate{$ping_list{$i}}=$rate;
        }
    }else{
        # ping没有输果,或者是timeout
        # 第一次则直接记录
         if ($count==1) {
             $result{$ping_list{$i}}=0;
             $rate=100;
         } else {
             # 包率须要两次果相加,平均值则不做记录
             $rate_tmp=100;
             $rate=($rate_tmp+$result_rate{$ping_list{$i}})/2;
         }
         $result_rate{$ping_list{$i}}=$rate;
    }
  }
 
  $count += 1;
  chomp ($now_time=`/bin/date +%s`);
 
  # 出一次的果到文件
  open LOG, ">$result_filename";
  if ($ARGV[2] eq '-s') {
      foreach $i (sort (sort_values (keys %result))) {
          printf LOG "%s % .2f % .2f %\n" , $i,$result{$i},$result_rate{$i};
      }
  } else {
      foreach $i (sort (keys %result)) {
          printf LOG "%s % .2f % .2f %\n" , $i,$result{$i},$result_rate{$i};
      }
  }
 
  close LOG;
}
 
sub sort_values {
    $result{$a} <=> $result{$b}
}
固然为了同时间测试网通和电信,咱们能够写一个Shell脚本,让系统在同一个时间执行它,使网通和电信的ping值测试能够同时进行。
下面是这个Shell脚本idc.sh
#!/bin/sh
date=$(date +%Y%m%d_%T)
echo $date
cd /root  #进入ping.pl的目录,能够根据本身的需求更改
perl ping.pl cnc 10
mv ping_result.log ping_cnc_$date.log
perl ping.pl ctc 10
mv ping_result.log ping_ctc_$date.log
测试的结果中有平均速度和丢包率这两项,能够把每一个节点的结果统计成excel表格以便于观察。
把需运行的脚本放入crontab中自用运行。
vi /etc/crontab
编辑crontab,加入
30 */1 * * * root sh /root/idc.sh # 表示每隔一小时,在半点时运行idc.sh脚本
这样就可让它自动运行啦,次日我们就能够一早来收数据啦~
相关文章
相关标签/搜索