日志格式:
‘$remote_addr -
r
e
m
o
t
e
u
s
e
r
[
remote_user [
remoteuser[time_local] “$request” $status
b
o
d
y
b
y
t
e
s
s
e
n
t
"
body_bytes_sent "
bodybytessent"http_referer" “
h
t
t
p
u
s
e
r
a
g
e
n
t
"
"
http_user_agent" "
httpuseragent""http_x_forwarded_for”’
日志记录:
27.189.231.39 - - [09/Apr/2018:17:21:23 +0800] “GET /Public/index/images/icon_pre.png HTTP/1.1” 200 44668 “http://www.test.com/Public/index/css/global.css” “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/44.0.2403.157 Safari/537.36” “-”
1.统计日志中访问最多的10个IP.
思路:对第一列进行去重,并输出出现的次数
方法1:$ awk '{a[KaTeX parse error: Expected 'EOF', got '}' at position 5: 1]++}̲END{for(i in a)… awk ‘{print $1}’ access.log |sort |uniq -c |sort -k1 -nr |head -n10
说明:a[
1
]
+
+
创
建
数
组
a
,
以
第
一
列
作
为
下
标
,
使
用
运
算
符
+
+
作
为
数
组
元
素
,
元
素
初
始
值
为
0
。
处
理
一
个
I
P
时
,
下
标
是
I
P
,
元
素
加
1
,
处
理
第
二
个
I
P
时
,
下
标
是
I
P
,
元
素
加
1
,
如
果
这
个
I
P
已
经
存
在
,
则
元
素
再
加
1
,
也
就
是
这
个
I
P
出
现
了
两
次
,
元
素
结
果
是
2
,
以
此
类
推
。
因
此
可
以
实
现
去
重
,
统
计
出
现
次
数
。
2.
统
计
日
志
中
访
问
大
于
100
次
的
I
P
.
方
法
1
:
1]++ 创建数组a,以第一列作为下标,使用运算符++作为数组元素,元素初始值为0。处理一个IP时,下标是IP,元素加1,处理第二个IP时,下标是IP,元素加1,如果这个IP已经存在,则元素再加1,也就是这个IP出现了两次,元素结果是2,以此类推。因此可以实现去重,统计出现次数。 2. 统计日志中访问大于100次的IP. 方法1:
1]++创建数组a,以第一列作为下标,使用运算符++作为数组元素,元素初始值为0。处理一个IP时,下标是IP,元素加1,处理第二个IP时,下标是IP,元素加1,如果这个IP已经存在,则元素再加1,也就是这个IP出现了两次,元素结果是2,以此类推。因此可以实现去重,统计出现次数。2.统计日志中访问大于100次的IP.方法1: awk '{a[KaTeX parse error: Expected 'EOF', got '}' at position 5: 1]++}̲END{for(i in a)… awk '{a[$1]++;if(a[$1]>100){b[KaTeX parse error: Expected 'EOF', got '}' at position 5: 1]++}̲}END{for(i in b… awk '$4>="[9/Apr/2018:00:00:01" && $4<="[9/Apr/2018:23:59:59" {a[KaTeX parse error: Expected 'EOF', got '}' at position 5: 1]++}̲END{for(i in a)… sed -n ‘/[9/Apr/2016:00:00:01/,/[9/Apr/2016:23:59:59/p’ access.log |sort |uniq -c |sort -k1 -nr |head -n10 #前提开始时间与结束时间日志中必须存在
4. 统计当前时间前一分钟的访问数
思路:先获取当前时间前一分钟对应日志格式的时间,再匹配统计
$ date=
(
d
a
t
e
−
d
′
−
1
m
i
n
u
t
e
′
+
(date -d '-1 minute' +%d/%b/%Y:%H:%M);awk -vdate=
(date−d′−1minute′+date '
0
d
a
t
e
c
+
+
E
N
D
p
r
i
n
t
c
′
a
c
c
e
s
s
.
l
o
g
说
明
:
d
a
t
e
+
5.
统
计
访
问
最
多
的
前
10
个
页
面
(
0~date{c++}END{print c}' access.log 说明:date +%d/%b/%Y:%H:%M-->09/Apr/2018:01:55,定义参数给AWK 5. 统计访问最多的前10个页面(
0 datec++ENDprintc′access.log说明:date+5.统计访问最多的前10个页面(request)
$ awk '{a[KaTeX parse error: Expected 'EOF', got '}' at position 5: 7]++}̲END{for(i in a)…body_bytes_sent)
$ awk '{a[$7]++;size[$7]+=KaTeX parse error: Expected 'EOF', got '}' at position 3: 10}̲END{for(i in a)…status)
$ awk ‘{a[$1" "$9]++}END{for(i in a)print i,a[i]}’ access.log
8. 统计访问状态码为404的IP及出现次数
$ awk ‘{if($9~/404/)a[$1" "$9]++}END{for(i in a)print i,a[i]}’ access.log
Nginx web日志分析。
最新推荐文章于 2019-12-13 16:44:31 发布