測試機房質量之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腳本

這樣就可以讓它自動運行啦,第二天咱們就可以一早來收數據啦~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章