ホームページ  >  記事  >  バックエンド開発  >  Pythonで書かれたSquidのアクセスログ解析用の小さなプログラム

Pythonで書かれたSquidのアクセスログ解析用の小さなプログラム

WBOY
WBOYオリジナル
2016-06-16 08:42:031227ブラウズ

過去 2 週間で、グループ内の何人かが Python を学びたいと考えていたため、全員が学べるような環境と雰囲気を作りました。

昨日、私は Squid アクセス ログの IP 訪問数と URL 訪問数をカウントして並べ替えるという要件を投稿しました。私の簡単な実装を投稿したところ、多くの学生が対応する機能を実装しました。レンガを購入する:

ログの形式は次のとおりです:

コードをコピー コードは次のとおりです:

%ts.%03tu %6tr %{X-Forwarded-For}>h %Ss/%03Hs %h " "%{User-Agent}>h" %{Cookie}>h

コードをコピー コードは次のとおりです:

1372776321.285 0 100.64.19.225 TCP_HIT/200 8560 get http://img1.jb51.net/games/0908/19/1549401_3_80x100.jpg -images/jpeg "http:// www .jb51.net/"Mozilla /4.0 (互換性あり) ; MSIE 8.0; トライデント/4.0; .NET CLR 2.0.50727)" pcsuv=0;%20pcuvdata=lastAccessTime=1372776317582;%20u4ad=14arynt;% 20uf=1372776310453

コードをコピー コードは次のとおりです:

#!/usr/bin/python
# -*- コーディング: utf-8 -*-
インポートシステム
from optparse import OptionParser
''
access.log
内の IP アドレスの数の統計に関するテストです。 ''
試してみてください:
f = open('/data/proclog/log/squid/access.log')
IOError を除く、e:
印刷 "ファイルを開けません:%s" %(e)

def log_report(フィールド):
''
アクセスログのフィールドを返します
''
フィールド == "ip" の場合:
f]
の行に対して [line.split()[2]] を返します。 フィールド == "url" の場合:
f]
の行に対して [line.split()[6] を返します] def log_count(フィールド):
''
{field:number}
のような辞書を返します ''
フィールド2 = {}
フィールド = log_report(フィールド)
フィールドの field_tmp の場合:
if field_tmp in field2:
フィールド2[field_tmp] += 1
その他:
フィールド2[field_tmp] = 1
フィールドを返す 2
def log_sort(field,number = 10,reverse = True):
''
ソートされたフィールドを出力して出力します
''
for v insorted(log_count(field).iteritems(),key = lambda x:x[1] , reverse = reverse )[0:int(number)]:
print v[1],v[0]
if __name__ == "__main__":
パーサー =OptionParser(usage="%prog [-i|-u] [-n num | -r]" ,version = "1.0")
Parser.add_option('-n','--number',dest="number",type=int,default=10,help="出力の先頭行を印刷")
Parser.add_option('-i','--ip',dest="ip",action = "store_true",help="アクセスログのIP情報を出力")
Parser.add_option('-u','--url',dest="url",action = "store_true",help="アクセスログのURL情報を出力")
Parser.add_option('-r','--reverse',action = "store_true",dest="reverse",help="出力を反転 ")
(オプション,引数) = parser.parse_args()

len(sys.argv) の場合 parser.print_help()
options.ip と options.url の場合:
parser.error(' -i と -u は同時に実行できません ')
options.ip の場合:
Log_sort("ip", options.number, True および options.reverse または False)
options.url の場合:
Log_sort("url", options.number, True および options.reverse または False)

f.close()

効果は次のとおりです:

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。