发表于: 2017-09-16 23:27:31
1 816
一、今日完成
1.学习nginx日志统计分析用的命令:
1)cat命令, 格式:cat [OPTION]... [FILE]...
cat filename 一次显示整个文件
cat > filename 创建新文件
cat file1 file2 > file 将几个文件合并为一个文件
使用$ man cat可以查看Unix联机参考手册
2)awk是一种编程语言,用于在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值设置内在限制
3)grep命令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. 日志统计分析的常用命令总结
(1)IP相关统计
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)查看访问最频繁的前10个IP
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.
评论