R语言分析nginx日志

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‘)

附上一张流量图

时间: 2024-10-08 11:41:08

R语言分析nginx日志的相关文章

烂泥:利用awstats分析nginx日志

昨天把nginx的日志进行了切割,关于如何切割nginx日志,可以查看<烂泥:切割nginx日志>这篇文章. 今天打算分析下nginx日志,要分析nginx日志,我们可以通过shell脚本和第三方软件awstats进行分析,在此我们选择的是通过第三方软件awstats进行分析. 要使用awstats分析nginx日志,我们要安装awstats,而在安装awstats之前,我们需要先来介绍下awstats是什么? 一.awstats是什么 awstats是一个免费非常简洁而且强大有个性的基于Pe

python分析nginx日志

问题:分析nginx日志并找出访问最多10个IP地址的来源以及次数 使用python模块IP 使用方法以及下载地址:https://pypi.python.org/pypi/17MonIP 相关python脚本: #!/usr/bin/env python #coding:utf8 #Auth: lad #date:2016-12-05 #desc:parser the nginx's log,the head of 10  import sys reload(sys) sys.setdefau

python 正则分析nginx日志

有个需求要分析nginx日志,也懒得去研究logstach之类的开源工具,干脆直接写一个脚本,自己根据需求来实现: 先看日志格式:我们跟别人的不太一样,所以没办法了: 12.195.166.35 [10/May/2015:14:38:09 +0800] "list.xxxx.com" "GET /new/10:00/9.html?cat=0,0&sort=price_asc HTTP/1.0" 200 42164 "http://list.zhon

shell脚本分析nginx日志

第一版,比较粗糙,仅限于能用 正在写入的文件不能用tar进行压缩 --------压缩日志---------------------- 94 access.log 95 tar: access.log: file changed as we read it 96 #### 压缩日志失败 #### #!/bin/sh #分析nginx日志 DATE=`date '+%Y%m%d-%H%M'` ARCHIVE=/usr/log_bak/nginx_$DATE.tar.gz MESSAGE=/usr/

awstats分析nginx日志文件

awstats分析nginx日志文件,将生成的结果(为txt文件)保存在/var/www/awstats目录下,通过apche来 显示生成的结果. nginx的域名为:www.a.com:80 LogFile="/usr/local/mybin/nginx/logs/access.log"  #nginx的日志文件路径 DirData="/var/www/awstats/" #awstats生成结果的保存路径 SiteDomain="www.a.com&q

awk分析nginx日志中响应时间的方法

针对响应时间慢的问题,我们在nginx日志格式中增加响应时间,现在需要针对响应时间进行分析,查找出相对较慢的响应时间. 1.确认下日志文件格式 日志格式: log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_for

ELK分析nginx日志

开源实时日志分析 ELK 平台能够完美的解决我们上述的问题, ELK 由 ElasticSearch . Logstash 和 Kiabana 三个开源工具组成.官方网站: https://www.elastic.co/products l   Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等. l   Logstash 是一个完全开源的工具,他可以对你的日志进行收集.分析,

python分析nginx日志的ip,url,status

Python 脚本如下: #!/usr/bin/env python #_*_coding:utf-8 _*_ __author__ = 'lvnian' #!/usr/bin env python # coding: utf-8 import MySQLdb as mysql import sys, os db = mysql.connect(user="root",passwd="[email protected]",db="intest",

awk分析nginx日志里面的接口响应时间

最近,有客户反应客户端卡,老板集合技术人员开会讨论,找出慢的原因,由此产生了分析nginx响应时间,由于线上环境nginx日志格式带上了引号,处理起来有点麻烦,以下是处理过程 一.nginx日志格式 log_format main '$remote_addr – $remote_user [$time_iso8601] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user