如何将AWS CloudFront访问日志文件加载到R中?

问题描述

我目前正在尝试将AWS CloudFront访问日志文件加载到R中,但是在文件开头的指令(特别是在标题列表之前的“ #Fields:”声明)遇到一些麻烦。

我正在使用的文件完全遵循AWS Access Log documentation中描述的格式(遵循W3C "Extended Log File Format")。
这是此类日志文件的一个(简化的)示例:

#Version: 1.0
#Fields: date time x-edge-location sc-bytes c-ip cs-method [... more field names ...]
2019-12-04  21:02:31    LAX1    392 192.0.2.100 GET [... more data points ...]
2019-12-13  22:36:27    SEA19-C1    900 192.0.2.200 GET [...]

我发现webreadr::read_aws有望帮助我阅读AWS CloudFront访问日志(它们甚至指向我上面链接的完全相同的文档)。但是,出现以下错误:

library(webreadr)

my_log <- read_aws(my_logfile)
Error in aws_header_select(header_fields) : 
  Your file contains unrecognised fields

查看webreadr的{​​{1}}对其不知道的字段并不可靠-我的AWS日志包含14个字段名称,自从最近更新时间。 (CRAN package source有点领先,但仍然不知道我的日志中有10个字段。)

我的问题:
是否有更好的R库来处理这些W3C扩展日志文件?


使用readr::read_delim之类的标准阅读器,我知道我可以跳过包含“ #Version:”指令的第一行。但是,在第二行中,“#Fields:”将作为第一列标题读入,并实际上将所有其他标题向右偏移一列。
我想避免这样的解决方案,我必须像这样分别读取标题:

library(dplyr)
library(readr)

headers <- read_lines(my_logfile,skip = 1,n_max = 1) %>%
  strsplit('\\s+') %>%
  unlist() %>%
  tail(-1)

my_log <- read_delim(
    my_logfile,delim = "\t",trim_ws = T,escape_backslash = FALSE,col_names = headers,skip = 2
)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...