测试机房质量之Ping值测试

 测试机房质量之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脚本

这样就可以让它自动运行啦,第二天咱们就可以一早来收数据啦~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章