Posted at

PythonでWebサーバのログから一日分の毎秒ヒット数を集計

More than 1 year has passed since last update.


作った理由

とある日の一日分の毎秒アクセス数を知りたいが「uniq -c」などではアクセスがない秒は、抜けてしまっていたのでナントカしようと思った。


hits.py

#!/usr/bin/env python

import sys

def main():

dict = {}

#init dict
for hour in range(24):
for min in range(60):
for sec in range(60):
hhmmdd = '%02d:%02d:%02d' % (hour, min, sec,)
dict[hhmmdd] = 0

#read stdin
for line in sys.stdin:
text = line.rstrip('\n')
dict[text] = dict[text] + 1

#print hit/s
for hour in range(24):
for min in range(60):
for sec in range(60):
hhmmdd = '%02d:%02d:%02d' % (hour, min, sec,)
print '%s %d' % (hhmmdd, dict[hhmmdd])

if __name__ == '__main__':
main()



使い方

Webサーバのログの時分秒の部分を渡す

$ cat /var/log/httpd/access_log | cut -d" " -f4 | cut -d":" -f2- | python hits.py


雑談

SSDの整理をしていたら、その昔ちょこちょこと作ったインチキスクリプトが出てきたのでQiitaに乗せてみました。

Apacheのログから秒間アクセス数を知りたいので「uniq -c」コマンドで集計をしたいたが、よくよく考えるとアクセスがない秒は"0"ではなく抜けてしまっていた。凄く当たり前の事だ・・・

(一日分の秒間アクセス数を集計したのに「あれ?86400行ないぞ」って気が付いたのが始まり)

というわけで、適当に作ったのが以下のスクリプトです。

なかなか雑だけど、スグできたのを思い出した。