码迷,mamicode.com
首页 > 编程语言 > 详细

R语言分析nginx日志

时间:2015-02-10 13:31:57      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:

nginx日志举例

172.16.1.1 - - [04/Feb/2015:23:40:01 +0800] "POST /api/message/query HTTP/1.1" 200 52 "-" "Apache-HttpClient/4.2    (java 1.5)" "-" "message.test.com" "172.16.3.159" "-" "0.116" "-" "0.116" "-" remote_addr_ac_logon

取出time、url、请求大小,sub(/\[/,"",$4)去掉时间中的中括号,sub(/Feb/,"2",$4) 把Fed替换为2

awksub函数用于替换字符串,语句单独使用,如果使用赋值语句,如a=sub(/Feb/,"2",$4)a=1,返回替换次数

cat message-access.log | awk ‘BEGIN {print "time,url,size"} {sub(/\[/,"",$4);sub(/Feb/,"2",$4);print $4","$7","$10}‘ > message-time.log

然后使用R语言导入这个文件,用ggplot2画图,在R语言中通过使用ddply函数做统计分组,ddply的使用参见:ddply使用

但R语言做统计分组效率较低,文件大小在1G以上的时候,内存压力很大,这时使用uniqawk做分组比较合适

sortuniq统计分组

统计每秒请求数,并使用sed去年最终结果中的每行开头的空格

cat message-time.log | awk -F‘,‘ ‘{print $1}‘| sort -rn | uniq -c | sed ‘s/^[][ ]*//g‘> message-time-count.log

uniq只能统计出现次数,不能统计累加的值

awk统计分组

每分钟请求数据包大小, group by time,sum(size),取time字段的前16个字符,去掉最后的秒:substr($1,0,16),在END语句中打印统计结果,把秒都置为0

cat message-time.log | awk -F"," ‘{a[substr($1,0,16)]+=$3}END{for(i in a) print i"0",a[i]}‘ > message-time-size.log

画图

加载包

library(ggplot2)
library(scales)

R语言读取文件,as.is=TRUE 字符不转factor

message = read.csv(‘e:/R/message-time-size.log‘,
                   as.is=TRUE,
                   header=FALSE,
                   sep = ",",
                   col.names=c(‘time‘,‘size‘))

转为时间类型

message$time = as.POSIXlt(strptime(message$time,"%d/%m/%Y:%H:%M:%S"))

byte转为kb

message$size<- message$size / 1024

画“时间-流量图”,x轴每1小时显示一个值,显示格式只显示小时

ggplot(message,aes(x=time,y=size)) +
  geom_line() +
  labs(title="时间-流量图",y=‘size(KB)‘) +
  scale_x_datetime(breaks=date_breaks("1 hour"),labels= date_format("%H"))

保存图片

ggsave(filename=‘e:/R/时间-流量图-分.jpg‘,width=15,height=8)

统计url访问次数图

ggplot(message)+
  geom_bar(aes(x=url)) +
  coord_flip() +
  labs(x=‘url‘,y=‘count‘)

饼状图

ggplot(message)+
  geom_bar(aes(x=factor(1),fill=url)) +
  coord_polar(theta=‘y‘) +
  labs(x=‘‘,y=‘‘)
ggsave(filename=‘e:/R/url-饼状图.jpg‘)

附上一张流量图

技术分享

技术分享

R语言分析nginx日志

标签:

原文地址:http://my.oschina.net/enyo/blog/377217

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!