W3C_LOG_PARSE - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

W3C_LOG_PARSE

W3C_LOG_PARSE( <character-expression>, <format-string> ) <format-string> := '<predefined-format> | <custom-format>' <predefined format> :=         COMMON       | COMMON WITH VHOST       | NCSA EXTENDED       | REFERER       | AGENT       | IIS <custom-format> := [an Apache log format specifier]

W3C 预定义格式

使用指示的格式说明符指定以下 W3C 预定义的格式名称,如以下语句中所示:

select stream W3C_LOG_PARSE(message, 'COMMON') r  from w3ccommon t;
格式名称 W3C 名称 格式说明符

COMMON

常用日志格式 (CLF)

%h %l %u %t "%r" %>s %b

COMMON WITH VHOST

带虚拟主机的常用日志格式

%v %h %l %u %t "%r" %>s %b

NCSA EXTENDED

NCSA 扩展/组合日志格式

%h %l %u %t "%r" %>s %b "%[Referer]i" "%[User-agent]i"

REFERER

引用站点日志格式

%[Referer]i ---> %U

AGENT

代理 (浏览器) 日志格式

%[User-agent]i

W3C 格式说明符

下面列出了这些格式说明符。W3C_LOG_PARSE 自动检测这些说明符和输出记录,每个说明符对应一个列。基于说明符的可能输出自动选择列的类型。例如,%b 表示处理 HTTP 请求时发送的字节数,因此该列类型为数字。但对于 %B,零个字节由一个短划线表示 - 从而将列类型强制设为文本。注释 A 解释说明符表中显示的“...”和“<”或“>”标记的含义。

下表按命令以字母顺序列出了 W3C 格式说明符。

格式说明符 说明

%

百分比符号 (Apache 2.0.44 及更高版本)

%...a

远程 IP 地址

%...A

本地 IP 地址

%...B,

响应的大小 (以字节为单位),不包括 HTTP 标头。

%...b

采用 CLF 格式的响应的大小 (以字节为单位),不包括 HTTP 标头,这表示在未发送字节时,使用“-”而不是 0。

%...[Customerdata]C

发送到服务器的请求中的 cookie Customerdata 的内容。

%...D

处理请求所用时间 (以微秒为单位)。

%...[CUSTOMERDATA]e

环境变量 CUSTOMERDATA 的内容

%...f

文件名

%...h

远程主机

%...H

请求协议

%...[Customerdata]i

发送到服务器的请求中的 Customerdata: 标头行的内容。

%...l

远程 logname (来自 identd,如果提供)

%...m

请求方法

%...[Customerdata]n

来自另一个模块的注释 Customerdata 的内容。

%...[Customerdata]o

回复中的 Customerdata: 标头行的内容。

%...p

处理请求的服务器的规范端口

%...P

处理请求的子项的进程 ID。

%...[format]P

处理请求的子项的进程 ID 或线程 ID。有效格式是 pid 和 tid。(Apache 2.0.46 及更高版本)

%...q

查询字符串(如果查询字符串存在,则前面有一个“?”,否则为空字符串)

%...r

请求的第一行

%...s

状态。对于已内部重定向的请求,这是 *原始* 请求的状态 --- 对于最后一个请求,为 %...>s。

%...t

采用常用日志时间格式表示的时间 (标准英语格式)

%...[format]t

采用指定格式表示的时间,应采用 strimmer(3) 格式。(可能已本地化)

%...T

处理请求所用时间 (以秒为单位)。

%...u

远程用户 (来自身份验证;如果返回状态 (%s) 为 401,则可能是假的)

%...U

请求的 URL 路径,不包含任何查询字符串。

%...v

处理请求的服务器的规范 ServerName。

%...V

取决于 UseCanonicalName 设置的服务器名称。

%...X

响应完成时的连接状态

X = 连接在响应完成前中止。

+ = 连接在发送响应后可保持有效状态。

- = 连接在发送响应后关闭。

(%..X 指令在 Apache 1.3 的后期版本中为 %...c,

但这与历史 ssl %...[var]c 语法相冲突。)

:%...I:

接收的字节数 (包括请求和标头) 不能为零。您需要启用 mod_logio 才能使用此项。

:%...O:

发送的字节数 (包括标头) 不能为零。您需要启用 mod_logio 才能使用此项。

注意

一些 W3C 格式说明符显示为包含“...”指示或“<”或“>”,它们在隐藏或重定向该说明符的输出时为可选控件。“...”可以为空 (如 COMMON 规范“\%h %u %r \%s %b”中所示) 或者可以指示包含项目的条件。这些条件是一系列 HTTP 状态代码 (可能前面添加了“!”),如果未满足指定的条件,则返回的列或字段将显示“-”。

例如,如 Apache 文档中所述,指定“%400,501[User-agent]i”将仅在发生 400 错误和 501 错误(错误请求,未实现)时记录 User-agent。类似地,“%!200,304,302[Referer]i”将在无法返回某种正常状态的所有请求发生时记录 Referer:。

当已在内部重定向请求时,修饰符“<”和“>”可用于选择是应参阅原始请求,还是应参阅最终请求(分别)。默认情况下,% 指令 %s、%U、%T、%D 和 %r 会参阅原始请求,而所有其他指令符会参阅最终请求。例如,%>s 可用于记录请求的最终状态,而 %<u 可用于针对已内部重定向到未经身份验证的资源的请求来记录原始经身份验证的用户。

出于安全原因,从 Apache 2.0.46 开始,不可打印的字符和其他特殊字符主要使用 \xhh 序列 (其中,hh 代表原始字节的十六进制表示) 进行转义。此规则的例外情况包括 " 和 \ (它们通过前面添加反斜杠来进行转义) 以及所有空白字符 (它们采用 C 类表示法进行编写 (\n、\t 等))。在 2.0.46 之前的 httpd 2.0 版中,不会对 %...r、%...i 和 %...o 中的字符串进行任何转义操作,因此您在处理原始日志文件时需要特别小心,因为客户端可能已在日志中插入控制字符。

此外,在 httpd 2.0 中,B 格式字符串仅表示 HTTP 响应的大小 (以字节为单位),例如,这在连接中止或使用 SSL 时有所不同。对于通过网络发送到客户端的实际字节数,请使用 mod_logio 提供的 %O 格式。

按功能或类别划分的 W3C 格式说明符

类别包括发送的字节数、连接状态、环境变量的内容、文件名、主机、IP、注释、协议、查询字符串、回复、请求和时间。对于标记“...”或“<”或“>”,请参阅上一个注释。

功能或类别 W3C 格式说明符

发送的字节数,不包括 HTTP 标头

在未发送任何字节时具有“0”

%...B,

在未发送任何字节时具有“-”(CLF 格式)

%...b

接收的字节数 (包括请求和标头) 不能为零

必须启用 mod_logio 才能使用此项。

:% ...I:

发送的字节数 (包括标头) 不能为零

必须启用 mod_logio 才能使用此项。

:%...O:

响应完成时的连接状态

连接在响应完成前中止

X

连接在发送响应后可保持有效状态

+

连接在发送响应后关闭

-

注意

%..X 指令在 Apache 1.3 的后期版本中为 %...c,但这与历史 ssl %...[var]c 语法相冲突。

环境变量 CUSTOMERDATA

内容

%...[CUSTOMERDATA]e

文件名

%...f

主机(远程)

%...h

Protocol (协议)

%...H

IP 地址

远程

%...a

本地

%...A

备注

来自另一个模块的注释 Customerdata 的内容

%...[Customerdata]n

协议(请求)

%...H

查询字符串

注意

如果查询存在,则前面添加一个“?”

如果不存在,则为空字符串。

%...q

Replies

Customerdata (回复中的标头行) 的内容

%...[Customerdata]o

下表列出了响应和时间类别的 W3C 格式说明符。

功能或类别 W3C 格式说明符

请求

处理请求的服务器的规范端口

%...p

发送到服务器的请求中的 cookie Customerdata 的内容

%... [Customerdata]C

BAR 的内容:标头行

%... [BAR]i

发送的第一行:

%...r

处理请求所用的微秒数

%...D

协议

%...H

处理请求的子项的进程 ID

%...P

处理请求的子项的进程 ID 或线程 ID。

有效格式是 pid 和 tid。(Apache 2.0.46 及更高版本)

%...[format]P

远程 logname (来自 identd,如果提供)

%...l

远程用户:(来自身份验证;如果返回状态 (%s) 为 401,则可能是假的)

%...u

处理请求的服务器 (规范 ServerName)

%...v

取决于 UseCanonicalName 设置的服务器名称

%...V

请求方法

%...m

返回状态

%s

处理请求所用的秒数

%...T

已内部重定向的 *原始* 请求的状态

%...s

最后一个请求的状态

%...>s

请求的 URL 路径,不包含任何查询字符串

%...U

时间

常用日志格式时间格式 (标准英语格式)

%...t

采用 strftime(3) 格式表示的时间,可能已本地化

%...[format]t

处理请求所用的秒数

%...T

W3C 示例

W3C_LOG_PARSE 支持访问由符合 W3C 标准的应用程序 (如 Apache Web 服务器) 生成的日志,从而生成输出行,每个说明符对应一个列。数据类型派生自 Apache mod_log_config 规范中列出的日志条目描述说明符。

示例 1

本示例中的输入取自一个 Apache 日志文件并采用 COMMON 日志格式表示。

输入

(192.168.254.30 - John [24/May/2004:22:01:02 -0700]                     "GET /icons/apache_pb.gif HTTP/1.1" 304 0), (192.168.254.30 - Jane [24/May/2004:22:01:02 -0700]                     "GET /icons/small/dir.gif HTTP/1.1" 304 0);

DDL

CREATE OR REPLACE PUMP weblog AS        SELECT STREAM            l.r.COLUMN1,            l.r.COLUMN2,            l.r.COLUMN3,            l.r.COLUMN4,            l.r.COLUMN5,            l.r.COLUMN6,            l.r.COLUMN7        FROM (SELECT STREAM W3C_LOG_PARSE(message, 'COMMON')              FROM "weblog_read) AS l(r);

输出

192.168.254.30 -  John  [24/May/2004:22:01:02 -0700] GET /icons/apache_pb.gif HTTP/1.1  304  0 192.168.254.30 -  Jane  [24/May/2004:22:01:02 -0700] GET /icons/small/dir.gif HTTP/1.1  304  0

FROM 子句中的 COMMON 规范表示常用日志格式 (CLF),该格式使用说明符 %h %l %u %t "%r" %>s %b。

W3C 预定义的格式显示 COMMON 和其他预定义的说明符集。

FROM 子句中的 COMMON 规范表示常用日志格式 (CLF),该格式使用说明符 %h %l %u %t "%r" %>s %b。

下表 (包含常用日志格式使用的说明符) 将介绍由 FROM 子句中的 COMMON 使用的说明符。

常用日志格式使用的说明符

输出列 格式说明符 返回值

COLUMN1

%h

远程主机的 IP 地址

COLUMN2

%l

远程登录名

COLUMN3

%u

远程用户

COLUMN4

%t

时间

COLUMN5

"%r"

请求的第一行

COLUMN6

%>s

状态:对于已内部重定向的请求,

此状态是 *原始* 请求的状态

--- 对于最后一个请求,为 %...>s。

COLUMN7

%b

发送的字节数,不包括 HTTP 标头

示例 2

本示例中的 DDL 说明如何重命名输出列以及筛选出不需要的列。

DDL

   CREATE OR REPLACE VIEW "Schema1".weblogreduced AS        SELECT STREAM CAST(s.COLUMN3 AS VARCHAR(5)) AS LOG_USER,        CAST(s.COLUMN1 AS VARCHAR(15)) AS ADDRESS,        CAST(s.COLUMN4 AS VARCHAR(30)) as TIME_DATES        FROM "Schema1".weblog s;

输出

   +----------+-----------------+--------------------------------+    | LOG_USER |     ADDRESS     |           TIME_DATES           |    |          |                 |                                |    +----------+-----------------+--------------------------------+    | Jane     | 192.168.254.30  | [24/May/2004:22:01:02 -0700]   |    |          |                 |                                |    | John     | 192.168.254.30  | [24/May/2004:22:01:02 -0700]   |    +----------+-----------------+--------------------------------+

W3C 自定义格式

将通过直接命名说明符而不是使用“COMMON”名称来创建相同结果,如下所示:

   CREATE OR REPLACE FOREIGN STREAM schema1.weblog        SERVER logfile_server        OPTIONS (LOG_PATH '/path/to/logfile',                 ENCODING 'UTF-8',                 SLEEP_INTERVAL '10000',                 MAX_UNCHANGED_STATS '10',                 PARSER 'W3C',                 PARSER_FORMAT '%h %l %u %t \"%r\" %>s %b');    or     CREATE FOREIGN STREAM "Schema1".weblog_read     SERVER "logfile_server"     OPTIONS (log_path '/path/to/logfile',     encoding 'UTF-8',     sleep_interval '10000',     max_unchanged_stats '10');     CREATE OR REPLACE VIEW "Schema1".weblog AS        SELECT STREAM            l.r.COLUMN1,            l.r.COLUMN2,            l.r.COLUMN3,            l.r.COLUMN4,            l.r.COLUMN5,            l.r.COLUMN6        FROM (SELECT STREAM W3C_LOG_PARSE(message, '%h %l %u %t \"%r\" %>s %b')              FROM "Schema1".weblog_read) AS l(r);
注意

如果将 %t 更改为 [%t],则数据列将包含以下内容:

       24/May/2004:22:01:02 -0700

(而不是 [24/May/2004:22:01:02 -0700])