澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站企业Shell脚本分析及切割Ap

2019-11-04 作者:服务器运维   |   浏览(157)

1、利用网络处理量计算。

1.利用网络处理量计算

企业shell脚本分析apache日志实战

假设apache日志格式为: 118.78.199.98 – - [09/Jan/2010:00:59:59 0800] “GET /Public/Css/index.css HTTP/1.1″ 304 – “ “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6.3)”

log日志分析,Nginx 0.8.5版本access.log日志分析shell命令  大 | 中 | 小  [ 2011-6-4 16:48 | by jed ]

计算参考公式:

并发=connection established/min(server keepalive,server timeout)

一,分析apache日志
1,有一个文件shell.sh,内容如下:
[root@test3root]#catshell.sh






现要求将该文件中的域名截取出来,统计重复域名出现的次数,然后按次数进行降序排列,统计后的结果如下:
3www.linuxidc.com
2www.google.com
1www.yahoo.com.

问题1:在apachelog中找出访问次数最多的10个IP。 awk '{print $1}' apache_log |sort |uniq -c|sort -nr|head -n 10

Nginx 版本信息:

并发 = connection established / min(server keepalive, server timeout)

并发=服务器传输连接数 除以 服务器软件的keepalive设置和服务器软件的超市设置之前的最小值;

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出,uniq是去除紧挨着的相同的行只保留一行
1234 [root@test3 ~]# awk -F "/"'{print $3}' shell.sh |sort |uniq  -c
3 www.linuxidc.com
2 www.google.com
1 www.yahoo.com.cn

awk 首先将每条日志中的IP抓出来,如日志格式被自定义过,可以 -F 定义分隔符和 print指定列;
sort进行初次排序,为的使相同的记录排列到一起;
upiq -c 合并重复的行,并记录重复次数。
head进行前十名筛选;
sort -nr按照数字进行倒叙排序。

nginx version: nginx/0.8.53Nginx日志配置项:

翻译一下:

connection established计算方式:

 

我参考的命令是: 显示10条最常用的命令
sed -e "s/| //n/g" ~/.bash_history | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | head

access_log /data0/logs/access.log combined;Nginx日志格式:

并发 = 服务器传输链接数 除以 服务器软件的keepalive设置和服务器软件的超时设置之间的最小值

netstat -est|grep “connections established” | cut -d “c” -f 1

2,在apachelog中找出访问次数最多的10个IP
/usr/local/apache2/logs/access_log的格式如下
192.168.46.1-chen[21/Sep/2013:14:04:48 0800]"GET/phpmyadmin/themes/pmahomme/img/tab_hover_bg.pngHTTP/1.1"200502

问题2:在apache日志中找出访问次数最多的几个分钟。 awk '{print  $4}' access_log |cut -c 14-18|sort|uniq -c|sort -nr|head
awk 用空格分出来的第四列是[09/Jan/2010:00:59:59;
cut -c 提取14到18个字符
剩下的内容和问题1类似。

$remote_addr – $remote_user [$time_local] $request $status $apache_bytes_sent $http_referer $http_user_agent127.0.0.1 - - [24/Mar/2011:12:45:07 0800] "GET /fcgi_bin/xxx.fcgi?id=xxx HTTP/1.0" 200 160 "-" "Mozilla/4.0"通过日志查看当天访问页面排前10的url:

这个公式算出来的数字是keepalive时间段内的平均值,比真实平均值要小一点,如果想找最大值就要设定keepalive为0或1,然后多探测几次。

2.利用服务器日志计算

123 [root@test3 ~]# awk '{print $1}' /usr/local/apache2/logs/access_log |sort|uniq -c|head -n 10
7 127.0.0.1
228 192.168.46.1

问题3:在apache日志中找到访问最多的页面: awk '{print $11}' apache_log |sed 's/^.*cn/(.*/)/"//1/g'|sort |uniq -c|sort -rn|head

#>cat access.log | grep "24/Mar/2011" | awk '{print $7}' | sort | uniq -c | sort -nr | head -n 10

connection established是服务器当前正在传输的链接,但是keepalive打开时,新建立的传输链接会一直存在直到keepalive/timeout关闭链接;客户端主动关闭链接的话connection established也会关闭,不过这种链接一般比较少,多数浏览器都是支持keepalive并遵守服务器配置的。

首先要有日志,日志可以是nginx日志,也可以是具体功能模块的业务日志;日志的时间以秒,当然单位也可以是其他,不同时间单位最后算法的分母基数不一样;

3.在apache日志中找出访问次数最多的几个分钟
/usr/local/apache2/logs/access_log的格式如下
192.168.46.1-chen[21/Sep/2013:14:04:48 0800]"GET/phpmyadmin/themes/pmahomme/img/tab_hover_bg.pngHTTP/1.1"200502

类似问题1和2,唯一特殊是用sed的替换功能将”

通过日志查看当天ip连接数,统计ip地址的总连接数

在linux查看connection established数字的办法是在命令行执行:

可以得出输出:

1234567891011 [root@test3 ~]# awk '{print $4}' /usr/local/apache2/logs/access_log|cut -c 14-18 |sort|uniq -c|sort -nr|head
33 13:55
30 13:35
19 13:22
15 13:54
15 13:45
15 13:38
15 13:36
13 13:04
10 12:59
9 13:18

问题4:在apache日志中找出访问次数最多(负载最重)的几个时间段(以分钟为单位),然后在看看这些时间哪几个IP访问的最多? 1,查看apache进程:
ps aux | grep httpd | grep -v grep | wc -l

#>cat access.log | grep "24/Mar/2011" | awk '{print $1}' | sort | uniq -c | sort –nr

netstat -est|grep "connections established"|cut -d "c" -f 1

23 [09/sep/2008:20:26:02

4.在apache日志中找到访问最多的页面
/usr/local/apache2/logs/access_log的格式如下
192.168.46.1-chen[21/Sep/2013:14:04:48 0800]"GET/phpmyadmin/themes/pmahomme/img/tab_hover_bg.pngHTTP/1.1"200502

2,查看80端口的tcp连接:
netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

38 112.97.192.16

keepalive和timeout数字查看办法要查看web server软件的配置文件

26 [09/sep/2008:20:26:03

1234567891011 [root@test3 ~]# awk '{print $7}' /usr/local/apache2/logs/access_log |sort|uniq -c|sort -nr|head
46 /
44 /phpmyadmin/
10 /phpmyadmin/js/jquery/jquery-1.6.2.js?ts=1359376847
9 /phpmyadmin/js/update-location.js?ts=1359376847
9 /phpmyadmin/js/jquery/jquery-ui-1.8.16.custom.js?ts=1359376847
9 /phpmyadmin/js/jquery/jquery.qtip-1.0.0-rc3.js?ts=1359376847
9 /phpmyadmin/js/functions.js?ts=1359376847
8 /phpmyadmin/js/cross_framing_protection.js?ts=1359376847
7 /phpmyadmin/themes/pmahomme/jquery/jquery-ui-1.8.16.custom.css
7 /phpmyadmin/themes/pmahomme/img/sprites.png

3,通过日志查看当天ip连接数,过滤重复:
cat access_log | grep "19/May/2011" | awk '{print $2}' | sort | uniq -c | sort -nr

20 117.136.31.145

注意:这个方法只能用于最前端的服务器或7层交换机,前端之后的服务器因为缓存或链接方式的原因往往是不准确的。

17 [09/sep/2008:20:26:04

5,在apache日志中找出访问次数最多(负载最重)的几个时间段(以分钟为单位),然后在看看这些时间哪几个IP访问的最多?

4,当天ip连接数最高的ip都在干些什么(原来是蜘蛛):
cat access_log | grep "19/May/2011:00" | grep "61.135.166.230" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

19 112.97.192.31

2、利用服务器日志计算

......

/usr/local/apache2/logs/access_log的格式如下
192.168.46.1-chen[21/Sep/2013:14:04:48 0800]"GET/phpmyadmin/themes/pmahomme/img/tab_hover_bg.pngHTTP/1.1"200502

5,当天访问页面排前10的url:
cat access_log | grep "19/May/2010:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

3 61.156.31.20

因为服务器每处理一个请求,都会在日志里留下一条信息,所以利用服务器软件的日志来计算是最准确的,但是是这种计算方式浮动也可能会比较大,需要取最大值计算。

tail -100 nginx.log|awk "{print $3;}" | sort | uniq -c

123456789101112 如下是时间段的访问量情况
[root@test3 ~]# awk '{print $4}' /usr/local/apache2/logs/access_log |cut -c  9-18 |uniq -c|sort -nr|head
33 2013:13:55
30 2013:13:35
19 2013:13:22
15 2013:13:54
15 2013:13:45
15 2013:13:38
15 2013:13:36
10 2013:12:59
9 2013:13:18
9 2013:13:16

6,用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr

2 209.213.40.6

首先在确定服务器软件有将所有请求写入一个日志文件里,并确保该日志文件正在不停记录。

命令的意思是取log文件的最后100条记录,然后用awk取得日志文件中表示时间的一列($4),接着再对该列进行一次排序,最后是用uniq把这一列相邻的重复行合并,并计算合并的条数;其中先sort在uniq是一种安全的做法,以确保同一秒的日志先被归到一起,然后再合并,这样就不会有同一秒的日志被切成几段这样的现象;

6,apache相关的系统操作

接着从日志里查看该ip在干嘛:
cat access_log | grep 220.181.38.183| awk '{print $1"/t"$8}' | sort | uniq -c | sort -nr | less

1 222.76.85.28

为节省时间和服务器资源,把log文件的最后一万条记录拿出来统计,我就用nginx默认的main格式作个例子:

123456789101112131415161718192021222324252627282930 1,查看apache进程:
ps aux | grep httpd | grep -v grep | wc -l
2,查看80端口的tcp连接:
netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l
3,通过日志查看当天ip连接数,过滤重复:
cat access_log | grep "19/May/2011" | awk '{print $2}' | sort | uniq -c | sort -nr
澳门新萄京官方网站企业Shell脚本分析及切割Apache日志实战,linux服务器每秒并发处理数的计算方法。4,当天ip连接数最高的ip都在干些什么(原来是蜘蛛):
cat access_log | grep "19/May/2011:00" | grep "61.135.166.230" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10
5,当天访问页面排前10的url:
cat access_log | grep "19/May/2010:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10
6,用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr
接着从日志里查看该ip在干嘛:
cat access_log | grep 220.181.38.183| awk '{print $1"/t"$8}' | sort | uniq -c | sort -nr | less
7,查看某一时间段的ip连接数:
grep "2006:0[7-8]" www20110519.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l
8,当前WEB服务器中联接次数最多的20条ip地址:
netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -n -r | head -n 20
9,查看日志中访问次数最多的前10个IP
cat access_log |cut -d ' ' -f 1 |sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 |less
10,查看日志中出现100次以上的IP
cat access_log |cut -d ' ' -f 1 |sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr |less
11,查看最近访问量最高的文件
cat access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less
12,查看日志中访问超过100次的页面
cat access_log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less
13,列出传输时间超过 30 秒的文件
cat access_log|awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
14,列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
cat access_log |awk '($NF > 60 && $7~//.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

7,查看某一时间段的ip连接数:
grep "2006:0[7-8]" www20110519.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l

通过日志查看当天访问次数最多的10个IP ,只需要在上一个命令后加上head命令

执行命令:

推荐阅读:

8,当前WEB服务器中联接次数最多的20条ip地址:
netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -n -r | head -n 20

#>cat access.log | grep "24/Mar/2011" |awk '{print $3}'|sort |uniq -c|sort -nr|head –n 10

tail -10000 nginx.log | awk '{print $4;}' | sort | uniq -c

Apache页面压缩配置问题导致JSON数据传输时间延长 http://www.linuxidc.com/Linux/2013-08/88637.htm

9,查看日志中访问次数最多的前10个IP
cat access_log |cut -d ' ' -f 1 |sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 |less

38 112.97.192.16

命令的意思是取log文件的最后一万条记录,然后用awk取得日志文件中表示时间的一列($4),接着再对该列进行一次排序,最后是用uniq把这一列相邻的重复行合并,并计算合并的条数。

使用Apachetop来分析Apache实时日志 http://www.linuxidc.com/Linux/2013-08/88836.htm

10,查看日志中出现100次以上的IP
cat access_log |cut -d ' ' -f 1 |sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr |less

20 117.136.31.145

其中先sort再uniq是一种安全的做法,以确保同一秒的日志先被归到一起,然后再合并,这样就不会有同一秒种的日志会被切成几段这样的现象。

 

11,查看最近访问量最高的文件
cat access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less

19 112.97.192.31

可以得到输出:

接下来请看第2页精彩内容: http://www.linuxidc.com/Linux/2013-09/90627p2.htm

12,查看日志中访问超过100次的页面
cat access_log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

3 61.156.31.20

23 [09/Sep/2008:20:26:02

澳门新萄京官方网站 1

13,列出传输时间超过 30 秒的文件
cat access_log|awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20

2 209.213.40.6

26 [09/Sep/2008:20:26:03

14,列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
cat access_log |awk '($NF > 60 && $7~//.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

1 222.76.85.28

17 [09/Sep/2008:20:26:04

您可能感兴趣的文章:

  • python分析apache访问日志脚本分享
  • apache日志文件详解和实用分析命令
  • apache使用日志分割模块rotatelogs分割日志详解
  • 在Linux系统上查看Apache服务器的错误日志
  • 限制 Apache日志文件大小的方法
  • 使用apachetop实时监控日志、动态分析服务器运行状态
  • Apache访问日志的配置与使用

通过日志查看当天访问次数最多的10个IP

20 [09/Sep/2008:20:26:05

#>awk '{print $1}' access.log |sort |uniq -c|sort -nr|head

...

10680 10.0.21.17

70 [09/Sep/2008:20:29:43

1702 10.0.20.167

61 [09/Sep/2008:20:29:44

823 10.0.20.51

45 [09/Sep/2008:20:29:45

504 10.0.20.255

37 [09/Sep/2008:20:29:46

215 58.60.188.61

2 [09/Sep/2008:20:29:47

192 183.17.161.216

在这些输出中,第一条记录和最后一条记录因为时间有可能被切断,所以是完全不可靠之信息,可以忽略。

38 112.97.192.16

如果输出少于10行的话,要扩大一下范围,修改tail -10000为tail -100000取最后十万条数据统计。

20 117.136.31.145

如果只需要看最大值,可以再用sort命令进行排序,并用head命令取出前10行记录:

19 112.97.192.31

tail -10000 nginx.log | awk '{print $4;}' | sort | uniq -c | sort -nr | head

6 113.106.88.10

awk命令是一个功能比较强的命令,在这里只用到最简单的awk '{print $4;}',意思是将日志每行按空格切分开,然后切出来的结果依次从左到右就是$1 $2 $3 ...,nginx默认的main日志时间字段刚好是$4,所以在这里拿$4来计算。如果是别的格式的日志,依照这个办法去找到列数:

通过日志查看当天指定ip访问次数过的url和访问次数:

就拿apache默认的日志来看,首先:

#>cat access.log | grep "10.0.21.17" | awk '{print $7}' | sort | uniq -c | sort –nr

head -1 apache.log

224 /test/themes/default/img/logo_index.gif

得到类似以下的输出:

224 /test/themes/default/img/bg_index_head.jpg

60.8.207.86 - - [09/Sep/2008:21:03:58 0800] "GET / HTTP/1.0" 200 11141 "" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

224 /test/themes/default/img/bg_index.gif

用awk按空格来切分开之后,60.8.207.86就是$1,$2和$3都是-,[09/Sep/2008:21:03:58是$4,这就是需要拿出来统计的。嗯,怎么apache的日志和nginx的一样的?现在才发现。

219 /test/vc.php

那命令也基本没什么变化,执行一下:

219 /

tail -10000 apache.log | awk '{print $4;}' | sort | uniq -c | sort -nr | head

213 /misc/js/global.js

注意,如果是在squid服务器后面的apache,则日志会变成这样:

211 /misc/jsext/popup.ext.js

60.8.207.86, 127.0.0.1 - - [09/Sep/2008:21:03:58 0800] "GET / HTTP/1.0" 200 11141 "" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

211 /misc/js/common.js

因为日志的第一个段:x_forwarded_for中含有空格,所以时间的段会在$3、$4或$5之间变化,从而不能确定,可以先用一次awk或cut以[这个符号切分一下:

210 /sladmin/home

tail -10000 apache.log | awk -F"[" '{print $2;}' | awk '{print $1;}' | sort | uniq -c | sort -nr | head

197 /misc/js/flib.js

通过日志查看当天访问次数最多的时间段

tail -10000 apache.log | cut -d"[" -f 2 | awk '{print $1;}' | sort | uniq -c | sort -nr | head

#>awk '{print $4}' access.log | grep "24/Mar/2011" |cut -c 14-18|sort|uniq -c|sort -nr|head

这样统计就准确了。

24 16:49

计算参考公式: 并发 = connection established / min(server keepalive, server timeout) 翻译一下: 并发 = 服务器传输链接数 除...

19 16:17

16 16:51

11 16:48

4 16:50

3 16:52

1 20:09

1 20:05

1 20:03

1 19:55

还有什么其他的,大家继续补充啦

通过日志查看某时间段访问次数最多的url

[qidian@qd16-176 www]$ cat www_access_log.2016-01-28 | grep '2016:10:46' | awk '{print $7}'|sort |uniq -c|sort -nr|head

查询某个时间段的请求量

cat www_access_log.2016-02-02 | grep "02/Feb/2016:21:0"|wc -l

查询301最多的url排行

cat www_access_log.2016-02-18 | awk '{if($9 == 301) print $7}'|sort |uniq -c|sort -nr|head

apache访问日志分析

当前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 '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

本文由澳门新萄京官方网站发布于服务器运维,转载请注明出处:澳门新萄京官方网站企业Shell脚本分析及切割Ap

关键词: