发表于: 2018-05-20 22:21:04
1 1553
今日完成:
1.查看Nginx日志,编写脚本统计访问次数,统计响应延时。
1.1首先Nginx默认是不记录响应时间的,需要在nginx log 里面加上$request_time,如下
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent $request_body "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time"';
access_log logs/access.log main;
1.2编写shell脚本文件用来统计nginx日志的访问次数及状态码,创建文件名是nginx_mylog.sh,放置在目录/usr/local/nginx/下
参考博文:https://blog.csdn.net/heshan307/article/details/52357411
思路:先将access.log日志中的http状态码取出来,在我的nginx.conf配置下,access.log中一般awk ‘{print $9}’即为http状态码,但为了确保不会出现问题,首先采用grep精确匹配到格式为:HTTP/1.0或HTTP:/1.1 状态码,并用awk去除$2即为http状态码,最后通过wc命令统计。
#!/bin/bash
reset_terminal=$(tput sgr0)
nginx_log_path='/usr/local/nginx/logs/access1.log'
#the log of nginx after filter
nginx_log_awkpath='/usr/local/nginx/logs/mynginx.log'
#filter log only with http code
cat ${nginx_log_path} | grep -ioE "HTTP\/1\.[1|0]\"[[:blank:]][0-9]{3}"| awk '{print $2}' > ${nginx_log_awkpath}
echoFun(){
echo -e '\E[32m' "$1" $reset_terminal $2
}
check_http_status(){
http_code_100=$(grep -o '1[0-9][0-9]' ${nginx_log_awkpath} | wc -l)
http_code_200=$(grep -o '2[0-9][0-9]' ${nginx_log_awkpath} | wc -l)
http_code_300=$(grep -o '3[0-9][0-9]' ${nginx_log_awkpath} | wc -l)
http_code_400=$(grep -o '4[0-9][0-9]' ${nginx_log_awkpath} | wc -l)
http_code_500=$(grep -o '5[0-9][0-9]' ${nginx_log_awkpath} | wc -l)
http_code_total=$(grep -o '[1-5][0-9][0-9]' ${nginx_log_awkpath} | wc -l)
echoFun "http status[100+]" "${http_code_100}"
echoFun "http status[200+]" "${http_code_200}"
echoFun "http status[300+]" "${http_code_300}"
echoFun "http status[400+]" "${http_code_400}"
echoFun "http status[500+]" "${http_code_500}"
echoFun "http status total" "${http_code_total}"
}
check_http_code(){
http_code_403=$(grep -o '403' ${nginx_log_awkpath} | wc -l)
http_code_404=$(grep -o '404' ${nginx_log_awkpath} | wc -l)
echoFun "http status[403]" "${http_code_403}"
echoFun "http status[404]" "${http_code_404}"
}
check_http_status
check_http_code
1.3 执行编写的文件:bash /usr/local/nginx/nginx_mylog.sh,查看状态码及响应次数,如下可以看到各状态码的响应次数
1.4 获取最耗时的请求时间、url、耗时,前10名, 可以修改后面的数字获取更多,不加则获取全部
cat /usr/local/nginx/logs/access.log | awk '{print $4,$7,$NF}' | awk -F '"' '{print $1,$2,$3}' | sort -k3 -rn | head -10
可以看到,获取总数据列表时耗时最多,因为需要加载全部数据:
获取http/1.1 协议耗时0.710
获取总数据耗时 0.536
模糊查询耗时 0.232
精确查询耗时 0.210
参考博文:https://www.cnblogs.com/mantianguohai/p/7238877.html
1.5 执行以下几个命令可以获取不同的数据
#获取最频繁IP数(Top20)
awk '{print $1}' /usr/local/nginx/logs/access.log | sort -n |uniq -c | sort -rn | head -n 20
#根据URL获取pv数(Page View)即页面浏览量或点击量,用户每1次对网站中的每个网页访问均被记录1个PV
awk '{print $7}' /usr/local/nginx/logs/access.log|wc -l
#根据访问IP统计UV(Unique Visitor)访问您网站的一台电脑客户端为一个访客。
awk '{print $1}' /usr/local/nginx/logs/access.log|sort | uniq -c |wc -l
cat /usr/local/nginx/logs/access.log | awk '{print $1}' | sort -k1 -r | uniq | wc -l
#在nginx log中最后一个字段加入$request_time.列出传输时间超过 3 秒的页面,显示前20条
cat /usr/local/nginx/logs/access.log|awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20
#获取某一时刻的请求数量,可以把秒去掉得到分钟的数据,把分钟去掉得到小时的数据,以此类推
cat /usr/local/nginx/logs/access.log | grep 2018:20:11:49 | wc -l
#获取每分钟的请求数量,输出成csv文件(/root目录下),然后用excel打开,可以生成柱状图
cat /usr/local/nginx/logs/access.log | awk '{print substr($4,14,5)}' | uniq -c | awk '{print $2","$1}' > access.csv
1.6 将命令全部写入shell脚本里面使用bash运行,可一并输出状态码及响应次数,独立IP、UV、PV及获取最耗时的请求时间、url、耗时的前20名,得到数据如下:
2.编写deploy.sh用来部署项目
部署过程为先将ROOT文件夹清空,再将部署项目放进去,之后重启tomcat完成部署
deploy.sh脚本内容如下:
#!/bin/sh
war=$1
bin=$(cd `dirname $0`; pwd)
if [ ! -n "${war}" ]; then
echo "***Usage: $0 [project.war]"
exit 0
fi
if [ ! -f "${war}" ]; then
echo "***Error: ${war} does not exist."
exit 0
fi
if [ ! "${war##*.}" = "war" ]; then
echo "***Error: ${war} is not a war file."
exit 0
fi
echo "Deploy ${war##*/}..."
rm -rf ${bin}/../webapps/ROOT/ && unzip -qo ${war} -d ${bin}/../webapps/ROOT/
rm -rf ${bin}/../work/Catalina/localhost/
echo "Restart tomcat..."
exec ${bin}/restart.sh
restart.sh脚本内容如下:
#!/bin/sh
bin=$(cd `dirname $0`; pwd)
pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
if [ -n "${pid}" ]; then
echo "Shutdown..."
sh ${bin}/shutdown.sh
sleep 3
pid=$(ps aux | grep tomcat | grep -v grep | grep -v restart | grep ${bin} | awk '{print $2}')
if [ -n "${pid}" ]; then
kill -9 ${pid}
sleep 1
fi
fi
echo "Startup..."
sh ${bin}/startup.sh
if [ "$1" = "-v" ]; then
tail -f ${bin}/../logs/catalina.out
fi
直接运行会提示无权限请求,需要使用命令来授权:
chmod 755 deploy.sh/chmod 755 restart.sh
使用命令为 bash /usr/local/tomcat9/bin/deploy.sh /data/web-home/tasktwo.war进行部署项目,显示部署成功。脚本可以使用,下次直接将war包放入/data/web-home/目录下,统一部署
3.使用Top命令查看WEB服务占用内存和CPU。
3.1直接使用top命令查看全部进程的情况
top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。
3.2在确认进程信息之后我们就可以使用top命令来进程跟踪了。以下top命令的参数:
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。
3.3 通过ps命令获取web服务器tomcat的PID
ps -ef | grep tomcat
top -d 1 -p 15612,18650,18339,通过此命令查看tomcat的CPU和内存占用情况,刷新时间间隔为1s
由此就可以查看各个进程的CPU和内存占用情况。由于访问量太小,一直刷的话才能看到CPU有变化。
明日计划:
查看Tomcat日志,统计访问DB时间,Controller处理时间。
遇到的问题:
tomcat日志配置server.xml的日志输出响应时间,但日志输出还是按照默认输出,没有响应时间
今日收获:
使用脚本查看Nginx日志以统计访问次数和响应延时
使用脚本deploy.sh来部署tomcat项目
使用Top命令查看WEB服务占用内存和CPU
评论