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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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 名称 格式说明符

常见的

常用日志格式 (CLF CLF CLF)

%h %l %u %t “%r” %>s %b

与 VHOST 很常见

虚拟主机的常用日志格式

%v %h %l %u %t “%r” %>s %b

NCSA 延期了

NCSA 扩展/组合日志格式

%h %l %u %t “%r” %>s %b “% [Referer] i” “% [User-Agent] i”

推荐人

引用日志格式

% [引用] i---> %U

代理人

代理(浏览器)日志格式

% [用户代理] i

W3C 格式说明符

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

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

格式说明符 说明

%

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

%... a

远程 IP 地址

%... A

本地 IP 地址

%%%%%% 1

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

%%%%%% 1

CLF 格式的响应大小,以字节为单位,不包括 HTTP 标头,这意味着当不发送字节时,使用 '-' 而不是 0。

%... [客户数据] C

发送到服务器的请求中 cookie 客户数据的内容。

%%%%%%%

处理请求所花费的时间,以微秒为单位。

%... [客户数据]

环境变量 CUSOMERDATA 的内容 CUSTO

%%%%%%%

文件名

%... h

远程主机

%... H

请求协议

%... [客户数据] i

客户数据的内容:发送到服务器的请求中的标题行。

%... l

远程日志名(如果已提供,则来自 identd)

%... m

请求方法

%... [客户数据] n

注释来自另一个模块的客户数据的内容。

%... [客户数据] o

客户数据的内容:回复中的标题行。

%... p

为请求提供服务的服务器的规范端口

%... P

为请求提供服务的子进程的进程 ID。

%... [格式] P

为请求提供服务的子进程的进程 ID 或线程 ID。有效的格式是 pid 和 tid。(Apache 2.0.46 及更高版本)

%... q

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

%... r

请求的第一行

%%%%%%%

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

%... t

时间,采用通用日志格式时间格式(标准英语格式)

%... [格式]

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

%... T

处理请求所花费的时间,以秒为单位。

%... u

远程用户(来自 auth;如果返回状态 (%s) 为 401,则可能是伪造的)

%... U

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

%... v

为请求提供服务的服务器 ServerName 的权威规范。

%... V

根据 UseCanonicalName 设置选择的服务器名称。

%%%%%%%

响应完成时的连接状态

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

+ = 发送响应后,连接可能会保持活动状态。

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

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

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

:%... I:

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

:%... O:

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

注意

一些 W3C 格式说明符显示为包含“...”指示或“<”或“>”,它们在隐藏或重定向该说明符的输出时为可选控件。“...” 可以为空(如通用规范 “\ %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”

%%%%%% 1

不发送字节时使用 “-”(CLF 格式)

%%%%%% 1

收到的字节,包括请求和标头,不能为零

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

:%... 我:

发送的字节,包括标头,不能为零

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

:%... O:

响应完成时的连接状态

在响应完成之前连接中止

X

发送响应后,连接可能会保持活动状态

+

发送响应后,连接将关闭

-

注意

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

环境变量 CUSTOMERDATA

内容

%... [客户数据]

文件名

%%%%%%%

主机(远程)

%... h

协议

%... H

IP 地址

远程

%... a

本地

%... A

备注

注释内容来自另一个模块的客户数据

%... [客户数据] n

协议(请求)

%... H

查询字符串

注意

如果存在查询,则在前面加上?

如果不是,则为空字符串。

%... q

回复

客户数据的内容(回复中的标题行)

%... [客户数据] o

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

函数或类别 W3C 格式说明符

请求

为请求提供服务的服务器的规范端口

%... p

发送到服务器的请求中 cookie 的内容客户数据

%... [客户数据] C

栏的内容:标题行

%... [酒吧]

发送的第一行:

%... r

处理请求所花费的微秒

%%%%%%%

协议

%... H

为请求提供服务的子进程的 ID

%... P

为请求提供服务的子进程的进程 ID 或线程 ID。

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

%... [格式] P

远程日志名(如果已提供,则来自 identd)

%... l

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

%... u

为请求提供服务的服务器(规范 ServerName)

%... v

UseCanonicalName 设置中的服务器名称

%... V

请求方法

%... m

退货状态

%s

处理请求所花费的秒数

%... T

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

%%%%%%%

上次请求的状态

%... >>>>>

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

%... U

时间

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

%... t

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

%... [格式]

处理请求所花费的秒数

%... T

W3C 示例

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

示例 1

本示例中的输入取自 Apache 日志文件,代表通用日志格式。

输入

(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);

Output

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。

下表(通用日志格式使用的说明符)描述了 COMMON 在 FROM 子句中使用的说明符。

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

输出列 格式说明符 返回值

第 1 列

%h

远程主机的 IP 地址 IP 地址

第 2 列

%l

远程日志名称

第 3 列

%u

远程用户

第 4 列

%t

那个时候

第 5 列

“%r”

请求的第一行

第 6 列

%%%%%%%

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

*原始*请求的状态

---%... >s 代表最后一个。

第 7 列

%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;

Output

   +----------+-----------------+--------------------------------+    | 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]