Linux 下 apache 日志分析与状态查看

2017年1月22日
ps -ef |grep httpd|wc -l

ps -aux |grep httpd |wc -l

2.查看当前Apache并发连接数和TCP连接状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

 

其中的SYN_RECV表示正在等待处理的请求数;

ESTABLISHED表示正常数据传输状态;
TIME_WAIT表示处理完毕, 等待超时结束的请求数。
关于TCP状态的变迁,可以从下图形象地看出:

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常 数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等 待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等 待所有分组死掉

 

2.查看当前Apache并发连接数和TCP连接状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

3.通过日志查看当天ip连接数,过滤重复

cat access.log | grep "15/Mar/2013" | awk '{print $2}' | sort | uniq -c | sort -nr

4.查看日志中访问次数最多的前10个IP

cat access.log |cut -d ' ' -f 1 |sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 |less

5.当天ip连接数最高的ip都在干些什么

cat access.log | grep "15/mar/2013" | grep "199.21.99.80" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

6.当天访问页面排前10的url:

cat access.log | grep "15/Mar/2013" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

7.用tcpdump嗅探80端口的访问看看谁最高

 
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr
 
返回如下类似内容:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
1000 packets captured
1077 packets received by filter
0 packets dropped by kernel
932 IP 64.120.194.152
35 IP 83.222.126.3
26 IP 212.124.114.16
7 IP 50.115.161.181

 

8.接着从日志里查看该ip在干嘛:

cat access.log | grep 199.21.99.80| awk '{print $1"/t"$8}' | sort | uniq -c | sort -nr | less

9.当前WEB服务器中联接次数最多的20条ip地址:

netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -n -r | head -n 20

10.查看最近访问量最高的文件

cat access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less

11.查看日志中访问超过100次的页面

cat access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

12,列出传输时间超过 30 秒的文件

cat access.log|awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20

 

问题1: 在apachelog中找出访问次数最多的10个IP。

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

问题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个字符

没有评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注