在堆栈驱动程序日志记录中解析文本有效负载中的字段



这是tomcat访问日志中的一行:

127.0.0.1 - - [24/May/2016:17:53:05 -0700] "POST /users HTTP/1.1" 200 10676

有没有办法解析出这里的各种字段,如客户端 IP、HTTP 请求方法、请求路径、响应代码等,并将其加载到 BigQuery 表中的单独列中?

本页底部的表格链接到流畅的 catch-all 配置,但我相信应该以可配置的方式解析和加载不同的日志,以便于查询?

还是我在这里错过了一些基本的东西?

这可能

不是你的意思 - 但只是猜测:

如何将日志加载到 GBQ 表中,以便每个日志行都成为表中的行,然后使用如下所示的内容将其解析为另一个表(代码不假装是最佳的 - 只是为了显示想法)

SELECT 
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){0} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){1} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){2} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){3} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){4} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){5} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){6} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){7} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){8} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){9} (.+?) '),
FROM (
  SELECT ' ' + REGEXP_REPLACE(log_line, r'[[]"]', '') + ' ' AS log_line 
  FROM 
    (SELECT '127.0.0.1 - - [24/May/2016:17:53:05 -0700] "POST /users HTTP/1.1" 200 10676' AS log_line)
)

您可以将其作为"CSV"导入吗?BigQuery 允许您指定自定义分隔符和引号字符。

127.0.0.1 - - [24/May/2016:17:53:05 -0700] "POST /users HTTP/1.1" 200 10676

看起来您可以提供一个空格作为引号字符,双引号作为(可选)引号。我希望上面的示例行解析为:

"127.0.0.1", "-", "-", "[24/May/2016:17:53:05", "-0700]", "POST/users HTTP/1.1", 200, 10676

时间戳 + 时区有点混乱,您最初需要将一些字段作为字符串导入,但您可以使用查询进行后处理(如 Mikhhail 的答案)来修复它并避免使用另一个工具来配置和管理。

相关内容

最新更新