• 締切済み

ログデータが3行1セットで必ず出力される

お世話になります。 logsurferというログ監視ソフトを使ってログデータファイルから使用したい分だけデータを切り出したいです、最初は一つだけのPCのログを監視して、トラブルがありませんでした。 今から二つPCのログを監視しますので、元のソースがデータを判断してから切り出しところがトラブルが発生する事をありました。 トラブルは前のログデータを来てからソースの判断の時間はログの時間により遅くて間に合わないから、判断しずにのまま、次のログデータを上書かされました。 前のソース: #!/usr/bin/perl ###################read testlog################################# open(LOGFILE,'/var/log/testlog'); @logarray=(0,<LOGFILE>); close(LOGFILE); while (defined($logarray[$i])){ if((index($logarray[$i],"sshd") ne -1) and (index($logarray[$i],"Failed") ne -1)){ #print $i," "; $tty=0; $lastfail=$i; }elsif((index($logarray[$i],"failure") ne -1) and (index($logarray[$i],"tty=tty") ne -1)){ $tty=1; $lastfail=$i; } #print index($logarray[$i],sshd)," "; #print index($logarray[$i],Failed),"\n"; $i++; } #print "1 ",$lastfail,"\n"; open OUT,">rensyu4.txt"; print OUT $logarray[$lastfail]; close OUT; 今の発想はログデータがそのまま別のファイルの書き込んで、そして、そのファイルから三行ずつ切り出して判断してから別のファイルに書き込みたいです。 今のソース: #!/usr/bin/perl ###################read testlog################################# open(LOGFILE,"/var/log/testlog"); open(OUT,">testlog.txt"); my $last_data; while (<LOGFILE>){ print OUT $_ if ($last_data ne $_); $last_data=$_; } close OUT; close(LOGFILE); open(TESTLOG,"testlog.txt"); @logarray=(0,<TESTLOG>); close(TESTLOG); while (defined($logarray[$i])){ if((index($logarray[$i],"sshd") ne -1) and (index($logarray[$i],"Failed") ne -1)){ #print $i," "; $tty=0; $lastfail=$i; }elsif((index($logarray[$i],"failure") ne -1) and (index($logarray[$i],"tty=tty") ne -1)){ $tty=1; $lastfail=$i; } #print index($logarray[$i],sshd)," "; #print index($logarray[$i],Failed),"\n"; $i++; } #print "1 ",$lastfail,"\n"; open OUT,">rensyu4.txt"; print OUT $logarray[$lastfail]; close OUT; ログデータ: May 13 17:55:57 fc4-03 sshd[1403]: error: Could not get shadow information for plan May 13 17:55:57 fc4-03 sshd[1403]: Failed password for plan from ::ffff:10.42.42.131 port 3040 ssh2 May 13 17:55:58 fc4-03 last message repeated 2 times May 13 17:56:03 fc4-03 sshd[1406]: error: Could not get shadow information for ougun May 13 17:56:03 fc4-03 sshd[1406]: Failed password for ougun from ::ffff:10.42.42.130 port 1398 ssh2 May 13 17:56:08 fc4-03 last message repeated 2 times May 13 17:56:09 fc4-03 sshd[1412]: error: Could not get shadow information for plan May 13 17:56:09 fc4-03 sshd[1412]: Failed password for plan from ::ffff:10.42.42.131 port 3041 ssh2 May 13 17:56:09 fc4-03 last message repeated 2 times May 13 17:56:19 fc4-03 sshd[1415]: error: Could not get shadow information for ougun May 13 17:56:19 fc4-03 sshd[1415]: Failed password for ougun from ::ffff:10.42.42.130 port 1399 ssh2 May 13 17:56:19 fc4-03 last message repeated 2 times ログデータファイルから三行1セットで切り出したいです。 どなたか教えて頂けると助かります、宜しくお願いします。

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

申し訳ないのですが、あなたの望んでいることが良くわかりません。 > ログデータファイルから三行1セットで切り出したいです。 たとえば貼り付けられているログデータを May 13 17:55:57 fc4-03 sshd[1403]: error: Could not get shadow information for plan May 13 17:55:57 fc4-03 sshd[1403]: Failed password for plan from ::ffff:10.42.42.131 port 3040 ssh2 May 13 17:55:58 fc4-03 last message repeated 2 times --ここで区切る-- May 13 17:56:03 fc4-03 sshd[1406]: error: Could not get shadow information for ougun May 13 17:56:03 fc4-03 sshd[1406]: Failed password for ougun from ::ffff:10.42.42.130 port 1398 ssh2 May 13 17:56:08 fc4-03 last message repeated 2 times --ここで区切る-- May 13 17:56:09 fc4-03 sshd[1412]: error: Could not get shadow information for plan May 13 17:56:09 fc4-03 sshd[1412]: Failed password for plan from ::ffff:10.42.42.131 port 3041 ssh2 May 13 17:56:09 fc4-03 last message repeated 2 times --ここで区切る-- May 13 17:56:19 fc4-03 sshd[1415]: error: Could not get shadow information for ougun May 13 17:56:19 fc4-03 sshd[1415]: Failed password for ougun from ::ffff:10.42.42.130 port 1399 ssh2 May 13 17:56:19 fc4-03 last message repeated 2 times と分けていって、それぞれの3行を別々のファイルに書けばいいのですか?

ch_rabbit
質問者

お礼

ご関心ありがとうございます。 申し上げございません、この問題は友達から教えて解けました。 今後ともご指導ください。