发表于: 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


返回列表 返回列表
评论

    分享到