linux分析XXXX/XXXX日志,如访问次数最多的前10个IP、访问超过100次的页面
apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数。
既然是统计,那么awk是必不可少的,好用而高效。
命令如下:
awk '{a[$1] += 1;} END {for (i in a) printf("%d %s\n", a[i], i);}' 日志文件 | sort -n | tail
首先用awk统计出来一个列表,然后用sort进行排序,最后用tail取最后的10个。
以上参数可以略作修改显示更多的数据,比如将tail加上-n参数等,另外日志格式不同命令也可能需要稍作修改。
当前WEB服务器中联接次数最多的ip地址
#netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -nr
查看日志中访问次数最多的前10个IP
#cat access_log |cut -d ' ' -f 1 |sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 |less
查看日志中出现100次以上的IP
#cat access_log |cut -d ' ' -f 1 |sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr |less
查看最近访问量最高的文件
#cat access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less
查看日志中访问超过100次的页面
#cat access_log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less
统计某url,一天的访问次数
#cat access_log|grep '12/Aug/2009'|grep '/images/index/e1.gif'|wc|awk '{print $1}'
前五天的访问次数最多的网页
#cat access_log|awk '{print $7}'|uniq -c |sort -n -r|head -20
从日志里查看该ip在干嘛
#cat access_log | grep 218.66.36.119| awk '{print $1"\t"$7}' | sort | uniq -c | sort -nr | less
列出传输时间超过 30 秒的文件
#cat access_log|awk '($NF > 30){print $7}' |sort -n|uniq -c|sort -nr|head -20
列出最最耗时的页面(超过60秒的)
#cat access_log |awk '($NF > 60 && $7~/\.php/){print $7}' |sort -n|uniq -c|sort -nr|head -100
python思路
python中的字典是无序的,但是有时候会根据value值来取得字典中前n个值,本文思想是将字典转化成list,经过排序,取得前n个值,再将list转化回字典,代码如下
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import time,re
point = 0
ips = {}
#读取日志内容
with open('access.log') as f :
date_min = f.readlines()
for i in date_min:
ip = i.split(' - - ')[0]
# print("请求的IP地址:",ip)
if ip in ips.keys():
value = ips[ip] +1
ips[ip] = value
else:
ips[ip] = 1
print(ips)
# 处理列表,拿出10个访问次数最多。
n = 10
L = sorted(ips.items(), key=lambda item: item[1], reverse=True)
L = L[:n]
print(L)
dictdata = {}
for l in L:
dictdata[l[0]] = l[1]
print("频繁访问次数",dictdata)

浙公网安备 33010602011771号