查询亚马逊 Route53 处理程序查询日志 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

查询亚马逊 Route53 处理程序查询日志

您可以为亚马逊 Route53 解析程序查询日志创建 Athena 表,并从 Athena 查询它们。

Route53 解析器查询日志记录用于记录 VPC 中的资源、使用入站解析程序终端节点的本地资源、使用出站解析程序终端节点进行递归 DNS 解析的查询以及使用 Route53 解析器 DNS 防火墙规则阻止、允许或监视的查询域列表。有关解析器查询日志记录的更多信息,请参阅。解析器查询日志记录中的Amazon Route53 开发人员指南。有关日志中每个字段的信息,请参阅。显示在解析器查询日志中的值中的Amazon Route53 开发人员指南

为解析器查询日志创建表

您可以使用 Athena 控制台中的查询编辑器为 Route53 解析器查询日志创建和查询表。

创建和查询 Route53 解析器查询日志的 Athena 表

  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

  2. 在 Athena 查询编辑器中,输入以下CREATE TABLE网页。将LOCATION子句值与与您的解析程序日志在 Amazon S3 中的位置相对应的子句值。

    CREATE EXTERNAL TABLE r53_rlogs ( version string, account_id string, region string, vpc_id string, query_timestamp string, query_name string, query_type string, query_class string, rcode string, answers array< struct< Rdata: string, Type: string, Class: string> >, srcaddr string, srcport int, transport string, srcids struct< instance: string, resolverEndpoint: string > ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://your_log_bucket/AWSLogs/{account_id}/vpcdnsquerylogs/{vpc-id}/YYYY/MM/dd/'

    由于解析器查询日志数据是 JSON 格式的,因此 CREATE TABLE 语句使用JSON SerDe 库来分析数据。

    注意

    SerDe 期望 Amazon S3 日志中的每条 JSON 记录都位于单行文本中,并且不使用行终止字符分隔记录中的字段。如果日志 JSON 文本是非常打印的格式,您可能会收到错误消息配置单元图标错误:行不是有效的 JSON 对象当您尝试在创建表后查询表时。

  3. 选择 Run query (运行查询)。该语句创建 Athena 名为r53_rlogs,其中的列表示解析器日志数据中的每个字段。

  4. 在 Athena 控制台查询编辑器中,运行以下查询以验证您的表是否已创建。

    SELECT * FROM "r53_rlogs" LIMIT 10

示例查询

以下示例显示了您可以从 Athena 对解析器查询日志执行的一些查询。

示例 1-按降序查询时间戳顺序查询日志

以下查询以降序显示日志结果query_timestamp为了。

SELECT * FROM "r53_rlogs" ORDER BY query_timestamp DESC

示例 2-指定的开始时间和结束时间内的查询日志

以下查询查询在 2020 年 9 月 24 日午夜和上午 8 点之间记录。根据您自己的要求替换开始时间和结束时间。

SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode FROM "r53_rlogs" WHERE (parse_datetime(query_timestamp,'yyyy-MM-dd''T''HH:mm:ss''Z') BETWEEN parse_datetime('2020-09-24-00:00:00','yyyy-MM-dd-HH:mm:ss') AND parse_datetime('2020-09-24-00:08:00','yyyy-MM-dd-HH:mm:ss')) ORDER BY query_timestamp DESC

示例 3-基于指定 DNS 查询名称模式的查询日志

以下查询选择其查询名称包含字符串 “example.com” 的记录。

SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answers FROM "r53_rlogs" WHERE query_name LIKE '%example.com%' ORDER BY query_timestamp DESC

示例 4-没有答案的查询日志请求

以下查询选择请求未收到任何答案的日志条目。

SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answers FROM "r53_rlogs" WHERE cardinality(answers) = 0

示例 5-查询具有特定答案的日志

下面的查询显示了answer.Rdata值具有指定的 IP 地址。

SELECT query_timestamp, srcids.instance, srcaddr, srcport, query_name, rcode, answer.Rdata FROM "r53_rlogs" CROSS JOIN UNNEST(r53_rlogs.answers) as st(answer) WHERE answer.Rdata='203.0.113.16';