发表于: 2017-09-16 23:27:31

1 816


一、今日完成

1.学习nginx日志统计分析用的命令:

1cat命令,  格式:cat [OPTION]... [FILE]...

cat filename             一次显示整个文件

cat > filename          创建新文件

cat file1 file2 > file   将几个文件合并为一个文件

使用$ man cat可以查看Unix联机参考手册

2awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。

语法形式:

awk [options] 'script' var=value file(s)

awk [options] -f scriptfile var=value file(s)

-F fs          fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:

-v var=value     赋值一个用户定义变量,将外部变量传递给awk 

-f scripfile     从脚本文件中读取awk命令

-m[fr] val      val值设置内在限制

3grep命令Global Regular Expression Print,它能使用正则表达式搜索文本,并把匹 配的行打印出来,它的使用权限是所有用户。

格式:  grep [options]

$ man grep可以查看Unix联机参考手册


2.了解nginx日志相关

包括access.log error.log,一般对日志进行统计分析都是抽取access.log中的记录:

一条记录一般包括客户端(用户)IP地址、访问时间、访问端口、响应时间、请求时间、用户地理位置代码(国家代码)、请求的url地址(目标url地址)的host、请求方式(GET或者POST等)、请求url地址(去除host部分)、请求状态(状态码)、请求页面大小、来源页面、用户浏览器语言、用户浏览器其他信息,浏览器版本、浏览器类型等信息。

具体如何自定义日志内容参见http://www.ttlsa.com/linux/the-nginx-log-configuration/


3. 日志统计分析的常用命令总结

1IP相关统计

1)统计IP访问量  awk '{print $1}' access.log | sort -n | uniq | wc –l

2)查看昨天时间段的IP访问量(4-15)

grep "15/Sep/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc –l

可以稍作改动,查询具体某一天里的访问流量

3)查看访问最频繁的前10IP

awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 10

4)查看访问10次以上的IP

awk '{print $1}' access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort –rn

5)查询某个IP的详细访问情况,按访问频率排序

grep '39.108.61.3' access.log |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 100

2)页面访问统计

1)查看访问最频的页面(TOP10)

2)查看访问最频的页面(排除特定页面)(TOP100)

grep -v ".php" access.log | awk '{print $7}' | sort |uniq -c | sort -rn | head -n 100

3)查看页面访问次数超过20次的页面

4)查看最近1000条记录,访问量降序排列

5)统计每秒的请求数,top100的时间点(精确到秒)

awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100

6)统计每分钟的请求数,top100的时间点(精确到分钟)

awk '{print $4}' access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100

7)统计每小时的请求数,top20的时间点(精确到小时)

3)性能分析

列出传输时间超过0.1秒的页面,显示前20

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

4)查看当前TCP连接数


4.编写脚本,对nginx的access.log进行分析

#!/bin/bash

#Program: This script is used to filter nginx's log 

#History 2017/09/16  ganle   1st realse


echo "------>过滤得到当前项目的日志"

cat access.log | grep "task2_ssm" > /home/data/task2_ssm/task2_ssm.txt

 

echo  "------>访问接口的次数:" 

num= cat access.log |grep person |wc -l

 

echo "其中20ms内的有:$num20" 

num20= cat access.log |grep person |awk '{print $1,$19}' |awk '{print substr($2,4)}' |awk '{if($1<0.020)print $1}'  |wc -l

 

echo "其中10ms内的有:$num10" 

num10= cat access.log |grep person |awk '{print $1,$19}' |awk '{print substr($2,4)}' |awk '{if($1<0.010)print $1}' |wc –l

 

echo "------>过滤得到当前项目的数据库连接时间"

cd /home/data/task2_ssm

cat task2_ssm.qtxt  | awk '{print $12}' > LinkTime.txt

cat LinkTime.txt |less

 

echo "------>过滤得到连接时间小于20ms的日志"

cat LinkTime.txt | awk  'BEGIN{sum=0}{if($1<20) sum++;}END{print sum}'

 

echo "------>过滤得到连接时间大于20ms小于50ms的日志"

cat LinkTime.txt | awk 'BEGIN{sum=0}{if(($1>20)&&($1<50)) sum++;}END{print sum}'

 

echo "------>过滤得到连接时间大于50ms小于100ms的日志"

cat LinkTime.txt | awk 'BEGIN{sum=0}{if(($1>50)&&($1<100)) sum++;}END{print sum}'

 

echo "------>过滤得到连接时间大于100ms日志"

cat LinkTime.txt | awk 'BEGIN{sum=0}{if($1>100)sum++;}END{print sum}'

 

echo "------>过滤得到访问延迟时间"

cat task2_ssm.txt | awk '{print $9}' > DelayTime.txt

 

echo "------>nginx延迟时间小于20ms"

cat DelayTime.txt | awk  'BEGIN{sum=0}{if($1<20/1000) sum++;}END{print sum}'

 

echo "----->数据库连接时间大于20ms小于50ms"

cat DelayTime.txt | awk 'BEGIN{sum=0}{if(($1>20/1000)&&($1<50/1000)) sum++;}END{print sum}'

 

echo "----->数据库连接时间大于50ms小于100ms"

cat DelayTime.txt | awk 'BEGIN{sum=0}{if(($1>50/1000)&&($1<100/1000)) sum++;}END{print sum}'

 

echo "----->数据库连接时间大于100ms"

cat DelayTime.txt | awk 'BEGIN{sum=0}{if($1>100/1000)sum++;}END{print sum}'


5.部署应用程序到servlet container

#! /bin/bash

# Program: This program deploys a project  to tomcat ,and makes it  running.

#History:  2017/09/16   ganle  2ed release

 

echo 删除webapps下所有文件

cd  /usr/local/tomcat

rm -rf  webapps/*

 

echo 停止tomcat服务

cd  /usr/local/tomcat/bin

./shutdown.sh

 

echo  删除源目录下已有项目

cd /home/data/war-home

rm -rf  /home/data/war-home/*

 

echo svn版本库下载项目至本地

svn co  svn://120.92.4.210/student/task/trunk/ganle/task2/target

 

echo war包复制到webapps目录下

cp /home/data/war-home/target/task2_ssm.war  /usr/local/tomcat/webapps

 

echo 启动tomcat服务

cd  /usr/local/tomcat/bin

./startup.sh

 

exit 0


二、明日计划

开始学习做task4。


三、遇到的问题

据师兄讲,统计访问DB时间与Controller处理时间的脚本需要在Java代码用到Spring AOP相关知识,但是自己对它不是很熟悉,所以分析nginx日志里,没有做访问时间的统计;计划在后期任务过程中补充学习Spring AOP,再把任务三重构。


四、收获

以上。


禅道:http://task.ptteng.com/zentao/task-view-10361.html

今天提交任务3.



返回列表 返回列表
评论

    分享到