2011-06-28 25 views
1

私はPython(私はかなりatmに新しいです)と解析したいいくつかのIISログがあります。 ..私は、ログあたり数千人を持っているログデータの唯一の2行は、ここにありますPythonの方法でIISログ解析にアプローチするにはどうすればよいですか?

#Software: Microsoft Internet Information Server 6.0 
#Version: 1.0 
#Date: 1998-11-19 22:48:39 
#Fields: date time c-ip cs-username s-ip cs-method cs-uri-stem cs-uri-query sc-status sc-bytes cs-bytes time-taken cs-version cs(User-Agent) cs(Cookie) cs(Referrer) 

1998-11-19 22:48:39 206.175.82.5 - 208.201.133.173 GET /global/images/navlineboards.gif - 200 540 324 157 HTTP/1.0 Mozilla/4.0+(compatible;+MSIE+4.01;+Windows+95) USERID=CustomerA;+IMPID=http://www.loganalyzer.net 
1998-11-20 22:55:39 206.175.82.8 - 208.201.133.173 GET /global/something.pdf - 200 540 324 157 HTTP/1.0 Mozilla/4.0+(compatible;+MSIE+4.01;+Windows+95) USERID=CustomerA;+IMPID=http://www.loganalyzer.net 

だから、これはただの短い例です:IISログのサンプルは次のようになります。

このログから、最も多くの接続を行ったクライアントIPアドレス、最もダウンロードされたファイルの数、最も訪問されたURIの数などのデータを抽出したいと思います。私たいのは...例えば、結果として、私はこのようなものを見たいのですが、いくつかの統計情報を取得することです:

file download_count 
example1.pdf 9 
example2.pdf 6 
example3.doc 2 

または

IP file hits 
192.168.1.5 /sample/example1.gif 8 
192.168.1.9 /files/example2.gif 8 

私はわからないが、これをアプローチする方法ですPythonの方法で。最初は、ログの各行を分割してリストを作成し、それぞれのリストを大きなリストに追加すると思いました(2d配列として表示されます)。その後、私はその大きなリストから統計を抽出する段階に入りました。そして今、私は、そのデータから辞書を作り、dictキーとdict値で数えてみるのが良いかもしれないと思いますか?それはリストを使うよりも優れたアプローチですか?私がリストをうまく使うべきなら、どうやってそれに接近するべきですか?私は何をgoogle、私は何を探しますか?

だから私はこれが通常行われることになっているアイデアを探しています。ありがとう。仮定

+1

google "python IIS parser"とトップ2のマットを見てくださいチェス(3番目はあなたの質問です) –

答えて

3

そのskip_header(file)戻るのみファイルからログ行とそのparse(line)抽出線から(ip, path):第二のための最初の

print "path count" 
for path, count in first.iteritems(): 
    print "%s %d" % (path, count) 

ため

from collections import defaultdict 
first = defaultdict(int) 
second = defaultdict(lambda: defaultdict(int)) 
for line in skip_header(file): 
    ip, path = parse(line) 
    first[path] += 1 
    second[ip][path] += 1 

print "ip path count" 
for ip,d in second.iteritems(): 
    for path, count in d.iteritems(): 
     print "%s %s %d" % (ip, path, count) 
+0

おかげでダン。 btw、私はpython3を使いました。誰かがこれを試してみたら、iteritems()ともちろんprint()の代わりにitems()を使う必要があります。 – pootzko

関連する問題