发表于: 2017-10-18 21:26:32
1 795
今日完成:
学习什么是shell
shell是一种介于系统内核和用户之间的一种解释程序
什么是脚本
脚本是用户按照特定语言设计的可执行文件
创建shell脚本
①理清任务过程
②整理执行语句
③完善文件结构
执行shell
①chomd +x 文件名
对文件授权成可执行文件,后直接执行使用
②sh 文件名
③source 文件名
这里shell,照我的个人理解,当作一个普通的java程序,有固定的格式,然后参照Linux的基本操作指令写入执行语句,但是因为是脚本追求的是自动执行,因再注意减少非必要的交互.
先做一个demo进行测试,先创建名称为myfirstdemo.sh的脚本文件
进入编辑按照规范格式,这里就是对linux指令好是不够熟悉,这里搞了半天进不了编辑页面,mkdir创建的是文件夹!!!!!!!!!
touchu正解是更新文件时间戳,可以新建文件,mkdir 是新建目录,也就是文件夹,mkdir 使用 -p 选项可以解决写目录创建问题,重新来
进入编辑页面,编辑hello world! 测试
输出时按照上述的3中方法,执行脚本文件
虽然不推荐看视频进行学习,但是0基础下学一门新的技术难度很高,放一个最最最基础的入门,在这之后再查阅资料进行知识拓展
http://study.163.com/course/courseMain.htm?courseId=306001
学会查看Nginx日志
nginx的log日志分为access log 和 error log其中access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息error log 则是记录服务器错误日志
首先打开nginx.conf日志文件:vim /usr/local/nginx/logs/access.log
例如这一排
1.183.192.35.5 :
$remote_addr : 客户端(用户)IP地址 也就我自己本地访问服务器时记录下来我的ip地址
2.[17/Oct/2017:23:33:19 +0800]:
$time_local :访问时间
3."GET /mydemo/login.jsp HTTP/1.1" :
"$request"get请求的url地址(目标url地址)的host
4.200:
'$status请求状态(状态码,200表示成功,404表示页面不存在,301表示永久重定向等,具体状态码可以在网上找相关文章,不再赘述)
5. 711:
$body_bytes_sent :请求页面大小,默认为B(byte
6."-" :
"$http_referer" : 来源页面,即从哪个页面转到本页,专业名称叫做“referer”这里没有跳转所以是"-"代替的
7."Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
$http_user_agent:用户浏览器其他信息,浏览器版本、浏览器类型
但是这里的格式并不符合我们的要强求,我想配置自己的日志格式,注意了这里是进入Nginx的配置文件中去修改
vim /usr/local/nginx/conf/nginx.conf 打开后注意标记内容,该内容内为log的默认配置,我们将这里的注释取消,并手动重新设置格式
修改成如下格式
保存关闭,重启nginx后访问,再查看日志记录,依然无效果,将access.log删除再重新创建后再对nginx进行reload,测试成功,日志格式已改如下
贴上代码及如下解释
log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" '
'$status $upstream_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
' $upstream_addr $request_time $upstream_response_time';
$server_name:虚拟主机名称。
$remote_addr:远程客户端的IP地址。
-:空白,用一个“-”占位符替代,历史原因导致还存在。
$remote_user:远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。
[$time_local]:访问的时间与时区,比如18/Jul/2012:17:00:01 +0800,时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。
$request:请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求
$status:记录请求返回的http状态码,比如成功是200。
$uptream_status:upstream状态,比如成功是200.
$body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。
$http_referer:记录从哪个页面链接访问过来的。
$http_user_agent:客户端浏览器信息
$http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
$upstream_addr:upstream的地址,即真正提供服务的主机地址。
$request_time:整个请求的总时间。
$upstream_response_time:请求过程中,upstream的响应时间。
根据步骤六要求,使用脚本统计访问次数,以及响应延时,也就是上面 $upstream_response_time
按照shell脚本编写步骤先进行分析
任务过程:统计log日志内,独立ip的个数,再统计响应时间大于20ms和小于20m的个数.
单独统计一下访问IP和响应时间,这里得说一句$2 和 $26 完全是按照我自己access.log配置的格式后字符位置来取的,自己请根据自己的日志来取值!
awk '{print $2}' /usr/local/nginx/logs/access.log
awk '{print $26}' /usr/local/nginx/logs/access.log
整理执行语句:
统计网站访问量,及单个ip的数量
awk '{print $2}' /usr/local/nginx/logs/access.log | sort | uniq | wc -l
(解释
| 代表管道命令将|符号左边的输出值传给右边
'{print $2}' :代表要统计的字段位置
/usr/local/nginx/logs/access.log 代表文件路径
sort 代表排序,这里没有加后缀让系统按照默认排序方式进行排序
uniq 代表去除重复的行,将唯一的ip筛选出来
wc -l 代表统计出的结果的行数)
统计响应时间,小于20ms的 这里要用2次awk筛选
awk '{print $26}' /usr/local/nginx/logs/access.log | awk '{if($1<0.020&&$1>0)print $1}' | wc -l
统计响应时间,大于20ms的 这里要用2次awk筛选
awk '{print $26}' /usr/local/nginx/logs/access.log | awk '{if($1>0.020)print $1}' | wc -l
完善文件结构:
进入之前创建好的demo.sh脚本文件
写入
#!/bin/sh
echo "网站访问用户数量查询中"
echo "访问用户数量为"
awk '{print $2}' /usr/local/nginx/logs/access.log | sort | uniq | wc -l
echo "响应时间大于20ms的个数为"
awk '{print $26}' /usr/local/nginx/logs/access.log | awk '{if($1>0.020)print $1}' | wc -l
echo "响应时间小于20ms的个数为"
awk '{print $26}' /usr/local/nginx/logs/access.log | awk '{if($1<0.020&&$1>0)print $1}' | wc -l
执行测试
OK!
这里关于awk和linux的追加,软连接,再配合shell语句的使用只能做到个勉勉强强,没有深入.之前甘乐师兄的上品文章写的非常棒参考地址如下
http://www.jnshu.com/daily/34171?dailyType=favouriteDaily&total=1&page=1&uid=10393&sort=0&orderBy=3
来到步骤七,先安装Resin,上传压缩包解压后进入
/usr/resin/bin/ 这里会看到resin.sh脚本 运行脚本会看见说明哦
再往下翻就会看见start指令输入 /usr/resin/bin/resin.sh start 启动resin,这里要注意了resin的默认端口也是8080,把tomcat关掉先,nginx的直接代理进入8080端口了,进行测试
一次成功.
将web项目上传到resin/webapps 目录下,重启resin 测试成功!
明日计划:提交task3
问题:今天在自己做aop的demo时,发现一个问题,当我方法为静态方法时,无法实现aop代理,明天思考后向某大佬汇报!
收获:shell脚本简单编写,awk语法,及新的服务器resin
评论