私は以下のようなApacheログを持っています。perl内のGET/PUT/POST/DELETe要求の数で各IPアドレスを表示
192.168.10.20 - - [18/7月/ 2017:08:41:37 +0000] "PUT /検索/タグ/リストHTTP/1.0"
10.30.24.3 - - [18/7月/ 2017:08:45:15 +0000]「POST/search/tag/list HTTP/1.0」
192.168.10.20 - [18/7/2017:09:04:09 +0000]「GET/apps /cart.jsp?appID=4651 HTTP/1.0 "
192.168.10.20 - [18/Jul/2017:09:04:09 +0000]" GET /apps/cart.jsp?appID=4651 HTTP/1.0 "
10.30.24.3 - [18/7月/ 2017:08:45:15 +0000]" POST /検索/タグ/リストHTTP/1.0 "
これは、異なるreqeustタイプで複数回同じIPアドレスで構成されています。 すべてのIPアドレスを抽出するperlのソリューションを提供することができます。各IPアドレスに対してPOST/GET/DELETE要求をグループ化します。 出力フォーマットが
192.168.10.20のようにすべきである:= 1 = 4、POST = 3 PUT GET、DELETE:= 23、= 13 POSTを取得= 23を置く= 11
43.56.76.4 DELETE =私はこれを行ってきた今まで3
は、IPと要求タイプを抽出し、別のファイルに記録し、各のoccuranceのカウント:
my $file = "apache_log.log";
my $file2 = "apache_log1.log";
my %hrec;
open (FH, "$file");
open(DATA, ">$file2");
my $str;
while (my $line = <FH>) {
chomp $line;
if ($line =~ /^(\d{1,}\.\d{1,}\.\d{1,}\.\d{1,})\s+\-\s+\-\s+\[\d{1,}\/\w+\/\d{1,}\:\d{1,}\:\d{1,}\:\d{1,}\s+\+0000\]\s+\"(PUT|GET|POST|DELETE)/) {
print DATA "$1: $2\n";
}
close(DATA);
close(FH);
open(DATA, "$file2") or die "Couldn't open file $file2, $!";
while (my $str = <DATA>) {
my @requests = split ('\n',$str);
foreach my $req(@requests) {
$hrec{$req}++;
}
}
close(DATA);
foreach my $fam (sort keys %hrec) {
print "$fam =". ($hrec{$fam})."\n";
}
- しかし、私の出力は 192.168以下のように来ています。 10.20:GET = 23
192.168.10.20:POST = 16
43.56.76.4:GET = 4
43.56.76.4:
on.'' POST = 3
と私stackoverflowはコード作成サービスではないので、この質問を議論の対象外とする投票を行っています。 OPは問題を提供したばかりで、それを自分で解決しようとはしていませんでした。 –
Regexp :: Log :: Common – ysth
@SteffenUllrich..sorry ...私は試して、今私のプログラムを貼り付けました。あなたが手伝ってくれれば助けになるだろう。 –