2013-07-09 40 views
1
#!/usr/bin/perl 

if (! eval "require LWP::UserAgent;") 
{ 
     $ret = "LWP::UserAgent not found"; 
} 

if (exists $ARGV[0]) { 
     if ($ret) 
     { 
       print "no ($ret)\n"; 
       exit 1; 
     } 

     my $ua = LWP::UserAgent->new(timeout => 5); 

     my $response = $ua->request(HTTP::Request->new('GET',$ARGV[0])); 
     my @content = split (/\n/, $response->content); 

     my $active_connections = -1; 
     if ($content[0] =~ /^Active connections:\s+(\d+)\s*$/i) { 
       $active_connections = $1; 
     } 

     my $accepts = -1; 
     my $handled = -1; 
     my $requests = -1; 
     if ($content[2] =~ /^\s+(\d+)\s+(\d+)\s+(\d+)\s*$/) { 
       $accepts = $1; 
       $handled = $2; 
       $requests = $3; 
     } 

     my $reading = -1; 
     my $writing = -1; 
     my $waiting = -1; 
     if ($content[3] =~ /Reading: (\d+) Writing: (\d+) Waiting: (\d+)\s*$/) { 
       $reading = $1; 
       $writing = $2; 
       $waiting = $3; 
     } 

     print "nginx_active:$active_connections nginx_reading:$reading nginx_writing:$writing nginx_waiting:$waiting "; 
     print "\n"; 
} 

我nginx的狀態頁:腳本不獲取正確

Active connections: 2 
server accepts handled requests 
2 2 2 
Reading: 0 Writing: 1 Waiting: 1 

運行:

./get_nginx_clients_status.pl http://IP/nginx_status 
nginx_active:-1 nginx_reading:-1 nginx_writing:-1 nginx_waiting:-1 

我應該得到:

nginx_accepts:113869 nginx_handled:113869 nginx_requests:122594 

任何想法可能是錯誤的?

回答

0

您的代碼狀態:

my $accepts = -1; 
my $handled = -1; 
my $requests = -1; 

而且你的輸出是:

nginx_active:-1 nginx_reading:-1 nginx_writing:-1 nginx_waiting:-1 

因此,由於要測試:

$content[2] =~ /^\s+(\d+)\s+(\d+)\s+(\d+)\s*$/ 

...它遵循$content[2]不含您的正則表達式所要求的信息。您是否嘗試添加print $content[2] . "\n";來幫助調試腳本?

調試器

請考慮使用Perl調試的。它會很快爲您解答明顯的問題非常

使用-d標誌啓動腳本。然後使用n一次一行地遍歷您的代碼,然後使用n轉到下一行,l列出當前點的代碼,並用x @content(例如)列出每個步驟的變量內容。