Mat*_*ert 21 r logfile-analysis
我知道还有其他工具,比如awstats或splunk,但是我想知道是否在R中进行了一些严肃的(网络)服务器日志文件分析.我可能不是第一个想到在R中做这个,但是R还有很好的可视化功能和漂亮的空间包.你知道吗?或者是否有一个R包/代码来处理可以构建的最常见的日志文件格式?或者这只是一个非常糟糕的主意?
dou*_*oug 14
与为我们的Network Ops人员构建分析工具箱的项目相关,我在两个月前构建了其中一个.如果我开源,我的雇主没有问题,所以如果有人有兴趣我可以把它放在我的github回购上.我认为如果我构建一个R包,它对这个组最有用.我不能马上做到这一点,因为我需要研究使用非R代码构建包的文档(它可能就像在/ exec中使用合适的python运行时抛出python字节码文件一样简单,但是我不知道).
我真的很惊讶我需要进行这种项目.至少有几个优秀的开源和免费日志文件解析器/查看器(包括优秀的Webalyzer和AWStats),但解析服务器错误日志(解析服务器访问日志是两者的主要用例).
如果您不熟悉错误日志或它们与访问日志之间的差异,总而言之,Apache服务器(如iewsie,nginx和IIS)会记录两个不同的日志,并默认将它们存储到磁盘,并在同一目录中彼此相邻.在Mac OS X上,/ var中的目录位于root下面:
$> pwd
/var/log/apache2
$> ls
access_log error_log
Run Code Online (Sandbox Code Playgroud)
对于网络诊断,错误日志通常比访问日志更有用.由于许多字段中数据的非结构化特性,而且更重要的是,因为解析后留下的数据文件是不规则的时间序列,所以它们也恰好更难以处理 - 您可能有多个条目键入到一个时间戳,然后下一个条目是三秒钟,依此类推.
我想要一个我可以在原始错误日志中丢弃的应用程序(任何大小,但通常一次只有几百MB)在另一端有一些有用的东西 - 在这种情况下,必须是一些预先打包的分析和R中还有一个可用于命令行分析的数据立方体.鉴于此,我在python中编写了原始日志解析器,而处理器(例如,将解析器输出网格化以创建常规时间序列)和所有分析和数据可视化,我用R编码.
我一直在构建分析工具很长一段时间,但仅在过去的四年中我一直在使用R.所以我的第一印象 - 在解析原始日志文件并在R中加载数据框时立即感到高兴的是使用以及它如何非常适合这种任务.一些欢迎的惊喜:
序列化.在R中保留工作数据是单个命令(保存).我知道这一点,但我不知道这种二进制格式有多高效.实际数据:对于解析的每50 MB原始日志文件,.RData表示大约为500 KB - 100:1压缩.(注意:我通过使用data.table库并将压缩级别参数手动设置为save函数,将其进一步推至约300:1;
IO.我的数据仓库在很大程度上依赖于轻量级数据结构服务器,该服务器完全驻留在RAM中并异步写入磁盘,称为redis.该节目本身只有两年左右,但CRAN中已经有R的redis客户端(BW Lewis,版本1.6.1);
主要数据分析.该项目的目的是为我们的网络运营人员建立一个图书馆.我的目标是"一个命令=一个数据视图"类型的界面.因此,例如,我使用优秀的googleVis包创建了具有可排序列的专业外观可滚动/分页HTML表,其中我加载了聚合数据的数据框(> 5,000行).只有少数几个互动元素 - 例如,对列进行排序 - 提供了有用的描述性分析.另一个例子,我在一些基本的数据杂耍和类似表格的函数上写了很多瘦包装器; 例如,我将这些功能中的每一个绑定到选项卡式网页上的可点击按钮.同样,这很高兴在R中进行,部分原因是因为函数通常不需要包装器,所提供参数的单个命令足以生成有用的数据视图.
最后一个项目的几个例子:
# what are the most common issues that cause an error to be logged?
err_order = function(df){
t0 = xtabs(~Issue_Descr, df)
m = cbind( names(t0), t0)
rownames(m) = NULL
colnames(m) = c("Cause", "Count")
x = m[,2]
x = as.numeric(x)
ndx = order(x, decreasing=T)
m = m[ndx,]
m1 = data.frame(Cause=m[,1], Count=as.numeric(m[,2]),
CountAsProp=100*as.numeric(m[,2])/dim(df)[1])
subset(m1, CountAsProp >= 1.)
}
# calling this function, passing in a data frame, returns something like:
Cause Count CountAsProp
1 'connect to unix://var/ failed' 200 40.0
2 'object buffered to temp file' 185 37.0
3 'connection refused' 94 18.8
Run Code Online (Sandbox Code Playgroud)
使用googleVis为交互式分析显示的主数据多维数据集:
使用googleVis显示的列联表(来自xtab函数调用)

这实际上是一个很好的主意.R还具有非常好的日期/时间功能,可以进行聚类分析或使用各种机器学习算法,有三种不同的正则表达式引擎来解析等pp.
它可能不是一个新颖的想法.几年前,我与使用R进行主动(而非被动)日志文件分析的人进行了简短的电子邮件联系:阅读日志,(在他们的例子中)构建时间序列模型,预测热点.这显然是一个好主意.它是能源部的实验室之一,但我不再拥有URL.即使在时间模式之外,也有很多人可以做到这一点.
| 归档时间: |
|
| 查看次数: |
10906 次 |
| 最近记录: |